[gnome-shell] WindowManager: handle move-to-workspace keybindings



commit 04dbf15d9b555b0cdc50d170543be25aba2b7c4f
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sat Apr 14 15:29:54 2012 +0200

    WindowManager: handle move-to-workspace keybindings
    
    Install a custom handler for move-to-workspace-* keybindings that
    shows the workspace switcher, which gives the user a sense of
    direction when navigating with the keyboard.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=674104

 js/ui/windowManager.js |   42 +++++++++++++++++++++++++++++++++---------
 1 files changed, 33 insertions(+), 9 deletions(-)
---
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 4292537..269cd47 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -125,6 +125,14 @@ const WindowManager = new Lang.Class({
                                             Lang.bind(this, this._showWorkspaceSwitcher));
         Meta.keybindings_set_custom_handler('switch-to-workspace-down',
                                             Lang.bind(this, this._showWorkspaceSwitcher));
+        Meta.keybindings_set_custom_handler('move-to-workspace-left',
+                                            Lang.bind(this, this._showWorkspaceSwitcher));
+        Meta.keybindings_set_custom_handler('move-to-workspace-right',
+                                            Lang.bind(this, this._showWorkspaceSwitcher));
+        Meta.keybindings_set_custom_handler('move-to-workspace-up',
+                                            Lang.bind(this, this._showWorkspaceSwitcher));
+        Meta.keybindings_set_custom_handler('move-to-workspace-down',
+                                            Lang.bind(this, this._showWorkspaceSwitcher));
         Meta.keybindings_set_custom_handler('switch-windows',
                                             Lang.bind(this, this._startAppSwitcher));
         Meta.keybindings_set_custom_handler('switch-group',
@@ -563,24 +571,40 @@ const WindowManager = new Lang.Class({
         if (this._workspaceSwitcherPopup == null)
             this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup();
 
-        if (binding.get_name() == 'switch-to-workspace-up')
-            this.actionMoveWorkspace(Meta.MotionDirection.UP);
-        else if (binding.get_name() == 'switch-to-workspace-down')
-            this.actionMoveWorkspace(Meta.MotionDirection.DOWN);
-        else if (binding.get_name() == 'switch-to-workspace-left')
-            this.actionMoveWorkspace(Meta.MotionDirection.LEFT);
-        else if (binding.get_name() == 'switch-to-workspace-right')
-            this.actionMoveWorkspace(Meta.MotionDirection.RIGHT);
+        let [action,,,direction] = binding.get_name().split('-');
+        let direction = Meta.MotionDirection[direction.toUpperCase()];
+
+        if (action == 'switch')
+            this.actionMoveWorkspace(direction);
+        else
+            this.actionMoveWindow(window, direction);
     },
 
     actionMoveWorkspace: function(direction) {
         let activeWorkspace = global.screen.get_active_workspace();
         let toActivate = activeWorkspace.get_neighbor(direction);
 
-        if (toActivate && activeWorkspace != toActivate)
+        if (activeWorkspace != toActivate)
             toActivate.activate(global.get_current_time());
 
         if (!Main.overview.visible)
             this._workspaceSwitcherPopup.display(direction, toActivate.index());
     },
+
+    actionMoveWindow: function(window, direction) {
+        let activeWorkspace = global.screen.get_active_workspace();
+        let toActivate = activeWorkspace.get_neighbor(direction);
+
+        if (activeWorkspace != toActivate) {
+            // This won't have any effect for "always sticky" windows
+            // (like desktop windows or docks)
+            window.change_workspace(toActivate);
+
+            global.display.clear_mouse_mode();
+            toActivate.activate_with_focus (window, global.get_current_time());
+        }
+
+        if (!Main.overview.visible)
+            this._workspaceSwitcherPopup.display(direction, toActivate.index());
+    },
 });



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]