From 4c437ae19dcb8a13155d56614e77f8e97d6183a9 Mon Sep 17 00:00:00 2001 From: lenemter Date: Fri, 6 Jun 2025 15:40:00 +0300 Subject: [PATCH 1/2] Daemon: disable "Move to Workspace" when it does nothing --- daemon-gtk3/WindowMenu.vala | 4 ++-- daemon/DBus.vala | 4 +++- daemon/WindowMenu.vala | 4 ++-- lib/WindowManager.vala | 4 +++- src/WindowManager.vala | 13 +++++++++++++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/daemon-gtk3/WindowMenu.vala b/daemon-gtk3/WindowMenu.vala index 74e0a1192..d4e855471 100644 --- a/daemon-gtk3/WindowMenu.vala +++ b/daemon-gtk3/WindowMenu.vala @@ -174,12 +174,12 @@ public class Gala.Daemon.WindowMenu : Gtk.Menu { SignalHandler.unblock (always_on_top, always_on_top_sid); SignalHandler.unblock (on_visible_workspace, on_visible_workspace_sid); - move_right.sensitive = !on_visible_workspace.active; + move_right.sensitive = !on_visible_workspace.active && Gala.WindowFlags.ALLOWS_MOVE_RIGHT in flags; if (move_right.sensitive) { move_right_accellabel.accel_string = keybind_settings.get_strv ("move-to-workspace-right")[0]; } - move_left.sensitive = !on_visible_workspace.active; + move_left.sensitive = !on_visible_workspace.active && Gala.WindowFlags.ALLOWS_MOVE_LEFT in flags; if (move_left.sensitive) { move_left_accellabel.accel_string = keybind_settings.get_strv ("move-to-workspace-left")[0]; } diff --git a/daemon/DBus.vala b/daemon/DBus.vala index 601f8f006..71c1f178c 100644 --- a/daemon/DBus.vala +++ b/daemon/DBus.vala @@ -36,7 +36,9 @@ public enum Gala.WindowFlags { ALWAYS_ON_TOP, ON_ALL_WORKSPACES, CAN_CLOSE, - IS_TILED + IS_TILED, + ALLOWS_MOVE_LEFT, + ALLOWS_MOVE_RIGHT } [DBus (name = "org.pantheon.gala")] diff --git a/daemon/WindowMenu.vala b/daemon/WindowMenu.vala index 518c63af7..4a148405e 100644 --- a/daemon/WindowMenu.vala +++ b/daemon/WindowMenu.vala @@ -200,12 +200,12 @@ public class Gala.Daemon.WindowMenu : Gtk.Popover { SignalHandler.unblock (always_on_top, always_on_top_sid); SignalHandler.unblock (on_visible_workspace, on_visible_workspace_sid); - move_right.sensitive = !on_visible_workspace.active; + move_right.sensitive = !on_visible_workspace.active && Gala.WindowFlags.ALLOWS_MOVE_RIGHT in flags; if (move_right.sensitive) { move_right_accellabel.accel_string = keybind_settings.get_strv ("move-to-workspace-right")[0]; } - move_left.sensitive = !on_visible_workspace.active; + move_left.sensitive = !on_visible_workspace.active && Gala.WindowFlags.ALLOWS_MOVE_LEFT in flags; if (move_left.sensitive) { move_left_accellabel.accel_string = keybind_settings.get_strv ("move-to-workspace-left")[0]; } diff --git a/lib/WindowManager.vala b/lib/WindowManager.vala index c85b55be2..908b9d6ec 100644 --- a/lib/WindowManager.vala +++ b/lib/WindowManager.vala @@ -56,7 +56,9 @@ namespace Gala { ALWAYS_ON_TOP, ON_ALL_WORKSPACES, CAN_CLOSE, - IS_TILED + IS_TILED, + ALLOWS_MOVE_LEFT, + ALLOWS_MOVE_RIGHT } /** diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 924841649..43f285285 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -936,6 +936,19 @@ namespace Gala { if (window.can_close ()) flags |= WindowFlags.CAN_CLOSE; + + unowned var workspace = window.get_workspace (); + if (workspace != null) { + unowned var manager = window.display.get_workspace_manager (); + var workspace_index = workspace.workspace_index; + if (workspace_index != 0) { + flags |= WindowFlags.ALLOWS_MOVE_LEFT; + } + + if (workspace_index != manager.n_workspaces - 2 || Utils.get_n_windows (workspace) != 1) { + flags |= WindowFlags.ALLOWS_MOVE_RIGHT; + } + } daemon_manager.show_window_menu.begin (flags, x, y); break; From e89fc709b353a0082cec30d0df8760d4fadc88fe Mon Sep 17 00:00:00 2001 From: lenemter Date: Fri, 6 Jun 2025 15:41:12 +0300 Subject: [PATCH 2/2] Fix lint --- src/WindowManager.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 43f285285..281ae0b4f 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -936,7 +936,7 @@ namespace Gala { if (window.can_close ()) flags |= WindowFlags.CAN_CLOSE; - + unowned var workspace = window.get_workspace (); if (workspace != null) { unowned var manager = window.display.get_workspace_manager ();