From 2a81a27ace4286a8536ce649f275d1e9d31a0356 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Tue, 16 Jun 2026 22:24:56 +0545 Subject: [PATCH] feat(src/window/panel/components): improve Hyprland command dispatch syntax and workspace navigation Use quoted commands and explicit method calls to avoid shell parsing issues. --- src/window/panel/components/globalmenu.py | 30 +++++++++++++++-------- src/window/panel/components/workspace.py | 23 +++++++++++++++-- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/window/panel/components/globalmenu.py b/src/window/panel/components/globalmenu.py index b0f0cd8..8b5a3f4 100644 --- a/src/window/panel/components/globalmenu.py +++ b/src/window/panel/components/globalmenu.py @@ -163,7 +163,7 @@ class GlobalMenuDropdowns: [ dropdown_option( "Enter Full Screen", - on_click="hyprctl dispatch fullscreen", + on_click="hyprctl dispatch 'hl.dsp.fullscreen()'", ), ], ) @@ -184,25 +184,35 @@ class GlobalMenuDropdowns: dropdown_divider("---------------------"), dropdown_option( "Move Window to Left", - on_click="hyprctl dispatch movewindow l", + on_click="hyprctl dispatch 'hl.dsp.movewindow([[l]])'", ), dropdown_option( "Move Window to Right", - on_click="hyprctl dispatch movewindow r", + on_click="hyprctl dispatch 'hl.dsp.movewindow([[r]])'", ), dropdown_option( "Cycle Through Windows", - on_click="hyprctl dispatch cyclenext", + on_click="hyprctl dispatch 'hl.dsp.cyclenext()'", ), dropdown_divider("---------------------"), - dropdown_option("Float", on_click="hyprctl dispatch togglefloating"), - dropdown_option("Quit", on_click="hyprctl dispatch killactive"), - dropdown_option("Pseudo", on_click="hyprctl dispatch pseudo"), dropdown_option( - "Toggle Split", on_click="hyprctl dispatch togglesplit" + "Float", on_click="hyprctl dispatch 'hl.dsp.togglefloating()'" + ), + dropdown_option( + "Quit", on_click="hyprctl dispatch 'hl.dsp.killactive()'" + ), + dropdown_option( + "Pseudo", on_click="hyprctl dispatch 'hl.dsp.pseudo()'" + ), + dropdown_option( + "Toggle Split", on_click="hyprctl dispatch 'hl.dsp.togglesplit()'" + ), + dropdown_option( + "Center", on_click="hyprctl dispatch 'hl.dsp.centerwindow()'" + ), + dropdown_option( + "Group", on_click="hyprctl dispatch 'hl.dsp.togglegroup()'" ), - dropdown_option("Center", on_click="hyprctl dispatch centerwindow"), - dropdown_option("Group", on_click="hyprctl dispatch togglegroup"), dropdown_option( "Pin", on_clicked=lambda _: exec_shell_command_async( diff --git a/src/window/panel/components/workspace.py b/src/window/panel/components/workspace.py index fffe298..e764989 100644 --- a/src/window/panel/components/workspace.py +++ b/src/window/panel/components/workspace.py @@ -8,6 +8,25 @@ from utils.utils import setup_cursor_hover # TODO: Support multi-monitor setups +class LuaHyprlandWorkspaces(HyprlandWorkspaces): + def do_action_next(self): + ws = "e" if not self._empty_scroll else "" + return self.connection.send_command( + f"batch/dispatch hl.dsp.focus({{workspace=[[{ws}+1]]}})" + ) + + def do_action_previous(self): + ws = "e" if not self._empty_scroll else "" + return self.connection.send_command( + f"batch/dispatch hl.dsp.focus({{workspace=[[{ws}-1]]}})" + ) + + def do_button_clicked(self, button: WorkspaceButton): + return self.connection.send_command( + f"batch/dispatch hl.dsp.focus({{workspace=[[{button.id}]]}})" + ) + + class WorkspaceIndicator(Box): def __init__(self, **kwargs): Box.__init__( @@ -16,7 +35,7 @@ class WorkspaceIndicator(Box): self._current_config = {"hide_special_workspace": True} on_config_change(self._on_config_changed) - self.workspaces = HyprlandWorkspaces( + self.workspaces = LuaHyprlandWorkspaces( name="workspaces", spacing=4, buttons_factory=self._get_button_factory(), @@ -72,7 +91,7 @@ class WorkspaceIndicator(Box): if hasattr(self, "workspaces") and self.workspaces: self.workspaces.destroy() - self.workspaces = HyprlandWorkspaces( + self.workspaces = LuaHyprlandWorkspaces( name="workspaces", spacing=4, buttons_factory=button_factory,