89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
from fabric.widgets.box import Box
|
|
from fabric.widgets.label import Label
|
|
from fabric.widgets.button import Button
|
|
from fabric.utils.helpers import exec_shell_command_async
|
|
import utils.icons as icons
|
|
|
|
|
|
class PowerMenu(Box):
|
|
def __init__(self, **kwargs):
|
|
super().__init__(
|
|
name="power-menu",
|
|
orientation="h",
|
|
spacing=10,
|
|
v_align="center",
|
|
h_align="center",
|
|
v_expand=True,
|
|
h_expand=True,
|
|
visible=True,
|
|
**kwargs,
|
|
)
|
|
|
|
self.launcher = kwargs["launcher"]
|
|
|
|
self.btn_lock = Button(
|
|
name="power-menu-button",
|
|
child=Label(name="button-label", markup=icons.lock),
|
|
on_clicked=self.lock,
|
|
)
|
|
|
|
self.btn_suspend = Button(
|
|
name="power-menu-button",
|
|
child=Label(name="button-label", markup=icons.suspend),
|
|
on_clicked=self.suspend,
|
|
)
|
|
|
|
self.btn_logout = Button(
|
|
name="power-menu-button",
|
|
child=Label(name="button-label", markup=icons.logout),
|
|
on_clicked=self.logout,
|
|
)
|
|
|
|
self.btn_reboot = Button(
|
|
name="power-menu-button",
|
|
child=Label(name="button-label", markup=icons.reboot),
|
|
on_clicked=self.reboot,
|
|
)
|
|
|
|
self.btn_shutdown = Button(
|
|
name="power-menu-button",
|
|
child=Label(name="button-label", markup=icons.shutdown),
|
|
on_clicked=self.poweroff,
|
|
)
|
|
|
|
self.buttons = [
|
|
self.btn_lock,
|
|
self.btn_suspend,
|
|
self.btn_logout,
|
|
self.btn_reboot,
|
|
self.btn_shutdown,
|
|
]
|
|
|
|
for button in self.buttons:
|
|
self.add(button)
|
|
|
|
self.show_all()
|
|
|
|
def close_menu(self):
|
|
self.launcher.close()
|
|
|
|
def lock(self, *args):
|
|
exec_shell_command_async("hyprlock --immediate")
|
|
self.close_menu()
|
|
|
|
def suspend(self, *args):
|
|
exec_shell_command_async("systemctl suspend")
|
|
self.close_menu()
|
|
|
|
def logout(self, *args):
|
|
exec_shell_command_async("hyprctl dispatch exit")
|
|
self.close_menu()
|
|
|
|
def reboot(self, *args):
|
|
exec_shell_command_async("systemctl reboot")
|
|
self.close_menu()
|
|
|
|
def poweroff(self, *args):
|
|
exec_shell_command_async("systemctl poweroff")
|
|
self.close_menu()
|