[gnome-shell] WindowManager: handle move-to-workspace keybindings
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] WindowManager: handle move-to-workspace keybindings
- Date: Wed, 27 Jun 2012 18:08:45 +0000 (UTC)
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]