diff --git a/js/ui/altTab.js b/js/ui/altTab.js index dfdf9c3f9..d10133568 100644 --- a/js/ui/altTab.js +++ b/js/ui/altTab.js @@ -46,6 +46,19 @@ function _createWindowClone(window, size) { y_expand: true }); }; +function getWindows(workspace) { + // We ignore skip-taskbar windows in switchers, but if they are attached + // to their parent, their position in the MRU list may be more appropriate + // than the parent; so start with the complete list ... + let windows = global.display.get_tab_list(Meta.TabList.NORMAL_ALL, + workspace); + // ... map windows to their parent where appropriate ... + return windows.map(w => { + return w.is_attached_dialog() ? w.get_transient_for() : w; + // ... and filter out skip-taskbar windows and duplicates + }).filter((w, i, a) => !w.skip_taskbar && a.indexOf(w) == i); +} + const AppSwitcherPopup = new Lang.Class({ Name: 'AppSwitcherPopup', Extends: SwitcherPopup.SwitcherPopup, @@ -517,7 +530,7 @@ const WindowSwitcherPopup = new Lang.Class({ _getWindowList: function() { let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null; - return global.display.get_tab_list(Meta.TabList.NORMAL, workspace); + return getWindows(workspace); }, _keyPressHandler: function(keysym, action) { @@ -555,7 +568,7 @@ const WindowCyclerPopup = new Lang.Class({ _getWindows: function() { let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null; - return global.display.get_tab_list(Meta.TabList.NORMAL, workspace); + return getWindows(workspace); }, _keyPressHandler: function(keysym, action) {