diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 0418912db..5bd14e499 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -543,24 +543,34 @@ WindowManager.prototype = { }, actionMoveWorkspaceLeft: function() { + let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL); let activeWorkspaceIndex = global.screen.get_active_workspace_index(); - if (activeWorkspaceIndex > 0) { - global.screen.get_workspace_by_index(activeWorkspaceIndex - 1).activate(global.get_current_time()); - if (!Main.overview.visible) - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex - 1); - } else if (!Main.overview.visible) { - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex); - } + let indexToActivate = activeWorkspaceIndex; + if (rtl && activeWorkspaceIndex < global.screen.n_workspaces - 1) + indexToActivate++; + else if (!rtl && 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.LEFT, indexToActivate); }, actionMoveWorkspaceRight: function() { + let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL); let activeWorkspaceIndex = global.screen.get_active_workspace_index(); - if (activeWorkspaceIndex < global.screen.n_workspaces - 1) { - global.screen.get_workspace_by_index(activeWorkspaceIndex + 1).activate(global.get_current_time()); - if (!Main.overview.visible) - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex + 1); - } else if (!Main.overview.visible) { - this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex); - } + 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.RIGHT, indexToActivate); } }; diff --git a/js/ui/workspaceSwitcherPopup.js b/js/ui/workspaceSwitcherPopup.js index b474377c8..afa947790 100644 --- a/js/ui/workspaceSwitcherPopup.js +++ b/js/ui/workspaceSwitcherPopup.js @@ -89,6 +89,7 @@ WorkspaceSwitcherPopup.prototype = { let children = this._list.get_children(); let childBox = new Clutter.ActorBox(); + let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL); let x = box.x1; let prevChildBoxX2 = box.x1 - this._itemSpacing; for (let i = 0; i < children.length; i++) { @@ -98,6 +99,11 @@ WorkspaceSwitcherPopup.prototype = { childBox.y2 = box.y1 + this._childHeight; x += this._childWidth + this._itemSpacing; prevChildBoxX2 = childBox.x2; + if (rtl) { + let ltrChildBoxX1 = childBox.x1; + childBox.x1 = box.x2 - (childBox.x2 - box.x1); + childBox.x2 = box.x2 - (ltrChildBoxX1 - box.x1); + } children[i].allocate(childBox, flags); } },