94 lines
2.5 KiB
TypeScript
94 lines
2.5 KiB
TypeScript
import {
|
|
exec
|
|
} from 'astal';
|
|
import {
|
|
Gtk
|
|
} from 'astal/gtk4';
|
|
|
|
const PowerMenu = (): Gtk.Popover => {
|
|
const popover = new Gtk.Popover( {
|
|
'cssClasses': [ 'PowerMenu' ]
|
|
} );
|
|
|
|
const powerMenuBox = () => {
|
|
return (
|
|
<box>
|
|
<button
|
|
cssClasses={[ 'power-button' ]}
|
|
child={
|
|
<image iconName={'system-shutdown-symbolic'}></image>
|
|
}
|
|
onClicked={() => exec( '/bin/sh -c \'shutdown now\'' )}
|
|
></button>
|
|
<button
|
|
cssClasses={[ 'power-button' ]}
|
|
child={<image iconName={'system-reboot-symbolic'}></image>}
|
|
onClicked={() => exec( '/bin/sh -c \'reboot\'' )}
|
|
></button>
|
|
<button
|
|
cssClasses={[ 'power-button' ]}
|
|
child={<image iconName={'system-suspend-symbolic'}></image>}
|
|
onClicked={() => exec( '/bin/sh -c \'systemctl suspend\'' )}
|
|
></button>
|
|
</box>
|
|
);
|
|
};
|
|
|
|
popover.set_child( powerMenuBox() );
|
|
|
|
return popover;
|
|
};
|
|
|
|
const Power = () => {
|
|
const pm = PowerMenu();
|
|
|
|
return (
|
|
<button
|
|
widthRequest={0}
|
|
hexpand={false}
|
|
vexpand={false}
|
|
cssClasses={[ 'power-menu-button' ]}
|
|
child={
|
|
<box>
|
|
<image iconName={'system-shutdown-symbolic'}></image>
|
|
{pm}
|
|
</box>
|
|
}
|
|
onClicked={() => pm.popup()}
|
|
/>
|
|
);
|
|
};
|
|
|
|
const UserMenu = (): Gtk.Popover => {
|
|
const popover = new Gtk.Popover();
|
|
|
|
const powerMenuBox = () => {
|
|
return (
|
|
<box>
|
|
<button
|
|
cssClasses={[ 'power-button' ]}
|
|
child={
|
|
<image iconName={'system-lock-screen-symbolic'}></image>
|
|
}
|
|
onClicked={() => exec( '/bin/sh -c \'hyprlock\'' )}
|
|
></button>
|
|
<button
|
|
cssClasses={[ 'power-button' ]}
|
|
child={<image iconName={'system-log-out-symbolic'}></image>}
|
|
onClicked={() => exec( '/bin/sh -c \'hyprctl dispatch exit 0\'' )
|
|
}
|
|
></button>
|
|
</box>
|
|
);
|
|
};
|
|
|
|
popover.set_child( powerMenuBox() );
|
|
|
|
return popover;
|
|
};
|
|
|
|
export default {
|
|
Power,
|
|
UserMenu
|
|
};
|