WorkspaceSwitcher: simplify code for handling keybindings

Most of code implementing workspace switches was repeated with
minor differences on each direction. Instead, consolidate it
and use the new meta_workspace_get_neighbor.

https://bugzilla.gnome.org/show_bug.cgi?id=674104
This commit is contained in:
Giovanni Campagna 2012-04-14 14:40:30 +02:00
parent a1bb0ec738
commit de72065a4a
3 changed files with 18 additions and 69 deletions

View File

@ -564,72 +564,23 @@ const WindowManager = new Lang.Class({
this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup(); this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup();
if (binding.get_name() == 'switch-to-workspace-up') if (binding.get_name() == 'switch-to-workspace-up')
this.actionMoveWorkspaceUp(); this.actionMoveWorkspace(Meta.MotionDirection.UP);
else if (binding.get_name() == 'switch-to-workspace-down') else if (binding.get_name() == 'switch-to-workspace-down')
this.actionMoveWorkspaceDown(); this.actionMoveWorkspace(Meta.MotionDirection.DOWN);
// left/right would effectively act as synonyms for up/down if we enabled them; else if (binding.get_name() == 'switch-to-workspace-left')
// but that could be considered confusing. this.actionMoveWorkspace(Meta.MotionDirection.LEFT);
// else if (binding.get_name() == 'switch-to-workspace-left') else if (binding.get_name() == 'switch-to-workspace-right')
// this.actionMoveWorkspaceLeft(); this.actionMoveWorkspace(Meta.MotionDirection.RIGHT);
// else if (binding.get_name() == 'switch-to-workspace-right')
// this.actionMoveWorkspaceRight();
}, },
actionMoveWorkspaceLeft: function() { actionMoveWorkspace: function(direction) {
let rtl = (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL); let activeWorkspace = global.screen.get_active_workspace();
let activeWorkspaceIndex = global.screen.get_active_workspace_index(); let toActivate = activeWorkspace.get_neighbor(direction);
let indexToActivate = activeWorkspaceIndex;
if (rtl && activeWorkspaceIndex < global.screen.n_workspaces - 1)
indexToActivate++;
else if (!rtl && activeWorkspaceIndex > 0)
indexToActivate--;
if (indexToActivate != activeWorkspaceIndex) if (toActivate && activeWorkspace != toActivate)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time()); toActivate.activate(global.get_current_time());
if (!Main.overview.visible) if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.UP, indexToActivate); this._workspaceSwitcherPopup.display(direction, toActivate.index());
}, },
actionMoveWorkspaceRight: function() {
let rtl = (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL);
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let indexToActivate = activeWorkspaceIndex;
if (rtl && activeWorkspaceIndex > 0)
indexToActivate--;
else if (!rtl && activeWorkspaceIndex < global.screen.n_workspaces - 1)
indexToActivate++;
if (indexToActivate != activeWorkspaceIndex)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.DOWN, indexToActivate);
},
actionMoveWorkspaceUp: function() {
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let indexToActivate = activeWorkspaceIndex;
if (activeWorkspaceIndex > 0)
indexToActivate--;
if (indexToActivate != activeWorkspaceIndex)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.UP, indexToActivate);
},
actionMoveWorkspaceDown: function() {
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let indexToActivate = activeWorkspaceIndex;
if (activeWorkspaceIndex < global.screen.n_workspaces - 1)
indexToActivate++;
if (indexToActivate != activeWorkspaceIndex)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.DOWN, indexToActivate);
}
}); });

View File

@ -3,18 +3,16 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const Main = imports.ui.main;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const ANIMATION_TIME = 0.1; const ANIMATION_TIME = 0.1;
const DISPLAY_TIMEOUT = 600; const DISPLAY_TIMEOUT = 600;
const UP = -1;
const DOWN = 1;
const WorkspaceSwitcherPopup = new Lang.Class({ const WorkspaceSwitcherPopup = new Lang.Class({
Name: 'WorkspaceSwitcherPopup', Name: 'WorkspaceSwitcherPopup',
@ -110,9 +108,9 @@ const WorkspaceSwitcherPopup = new Lang.Class({
for (let i = 0; i < global.screen.n_workspaces; i++) { for (let i = 0; i < global.screen.n_workspaces; i++) {
let indicator = null; let indicator = null;
if (i == activeWorkspaceIndex && direction == UP) if (i == activeWorkspaceIndex && direction == Meta.MotionDirection.UP)
indicator = new St.Bin({ style_class: 'ws-switcher-active-up' }); indicator = new St.Bin({ style_class: 'ws-switcher-active-up' });
else if(i == activeWorkspaceIndex && direction == DOWN) else if(i == activeWorkspaceIndex && direction == Meta.MotionDirection.DOWN)
indicator = new St.Bin({ style_class: 'ws-switcher-active-down' }); indicator = new St.Bin({ style_class: 'ws-switcher-active-down' });
else else
indicator = new St.Bin({ style_class: 'ws-switcher-box' }); indicator = new St.Bin({ style_class: 'ws-switcher-box' });

View File

@ -1048,10 +1048,10 @@ const WorkspacesDisplay = new Lang.Class({
_onScrollEvent: function (actor, event) { _onScrollEvent: function (actor, event) {
switch ( event.get_scroll_direction() ) { switch ( event.get_scroll_direction() ) {
case Clutter.ScrollDirection.UP: case Clutter.ScrollDirection.UP:
Main.wm.actionMoveWorkspaceUp(); Main.wm.actionMoveWorkspace(Meta.MotionDirection.UP);
break; break;
case Clutter.ScrollDirection.DOWN: case Clutter.ScrollDirection.DOWN:
Main.wm.actionMoveWorkspaceDown(); Main.wm.actionMoveWorkspace(Meta.MotionDirection.DOWN);
break; break;
} }
} }