95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
export default () => {
|
|
const isLocked = Variable(true);
|
|
const power = Variable("poweroff");
|
|
const suspend = Variable("sleep");
|
|
|
|
const cursor = "pointer";
|
|
|
|
const unlockButton = Widget.Button({
|
|
onPrimaryClick: () => {
|
|
isLocked.value = false;
|
|
},
|
|
tooltipText: "Unock power menu",
|
|
child: Widget.Icon("system-lock-screen-symbolic"),
|
|
cursor,
|
|
});
|
|
|
|
const lockButton = Widget.Button({
|
|
onPrimaryClick: () => {
|
|
isLocked.value = true;
|
|
},
|
|
tooltipText: "Lock power menu",
|
|
child: Widget.Icon("system-lock-screen-symbolic"),
|
|
cursor,
|
|
});
|
|
|
|
const poweroffButton = Widget.Button({
|
|
onPrimaryClick: () => {
|
|
Utils.exec("poweroff");
|
|
},
|
|
onSecondaryClick: () => (power.value = "reboot"),
|
|
tooltipText: "Shutdown",
|
|
child: Widget.Icon("system-shutdown-symbolic"),
|
|
cursor,
|
|
});
|
|
|
|
const rebootButton = Widget.Button({
|
|
onPrimaryClick: () => {
|
|
Utils.exec("reboot");
|
|
},
|
|
onSecondaryClick: () => (power.value = "poweroff"),
|
|
tooltipText: "Reboot",
|
|
child: Widget.Icon("system-reboot-symbolic"),
|
|
cursor,
|
|
});
|
|
|
|
const sleepButton = Widget.Button({
|
|
onPrimaryClick: () => {
|
|
Utils.exec("systemctl suspend");
|
|
},
|
|
onSecondaryClick: () => (suspend.value = "hibernate"),
|
|
tooltipText: "Sleep",
|
|
child: Widget.Icon("weather-clear-night-symbolic"),
|
|
cursor,
|
|
});
|
|
|
|
const hibernateButton = Widget.Button({
|
|
onPrimaryClick: () => {
|
|
Utils.exec("systemctl hibernate");
|
|
},
|
|
onSecondaryClick: () => (suspend.value = "sleep"),
|
|
tooltipText: "Hibernate",
|
|
child: Widget.Icon("computer-symbolic"),
|
|
cursor,
|
|
});
|
|
|
|
const powerStack = Widget.Stack({
|
|
children: {
|
|
poweroff: poweroffButton,
|
|
reboot: rebootButton,
|
|
},
|
|
shown: power.bind(),
|
|
});
|
|
|
|
const suspendStack = Widget.Stack({
|
|
children: {
|
|
sleep: sleepButton,
|
|
hibernate: hibernateButton,
|
|
},
|
|
shown: suspend.bind(),
|
|
});
|
|
|
|
return Widget.Stack({
|
|
className: "power-menu",
|
|
children: {
|
|
locked: Widget.CenterBox({ centerWidget: unlockButton }),
|
|
unlocked: Widget.CenterBox({
|
|
startWidget: powerStack,
|
|
centerWidget: lockButton,
|
|
endWidget: suspendStack,
|
|
}),
|
|
},
|
|
shown: isLocked.bind().as((l) => (l ? "locked" : "unlocked")),
|
|
});
|
|
};
|