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..281ae0b4f 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -937,6 +937,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; case Meta.WindowMenuType.APP: