diff --git a/data/org.gnome.shell.gschema.xml.in.in b/data/org.gnome.shell.gschema.xml.in.in
index a12e7807f..816a1bc4e 100644
--- a/data/org.gnome.shell.gschema.xml.in.in
+++ b/data/org.gnome.shell.gschema.xml.in.in
@@ -186,6 +186,19 @@ value here is from the GsmPresenceStatus enumeration.
+
+
+ false
+ Limit switcher to current workspace.
+
+ If true, only applications that have windows on the current workspace are shown in the switcher.
+ Otherwise, all applications are included.
+
+
+
+
diff --git a/js/ui/altTab.js b/js/ui/altTab.js
index 34d83e4cf..9d47d1e5f 100644
--- a/js/ui/altTab.js
+++ b/js/ui/altTab.js
@@ -436,8 +436,11 @@ const AppSwitcher = new Lang.Class({
this._arrows = [];
let windowTracker = Shell.WindowTracker.get_default();
+ let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' });
+ let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
+ : null;
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL,
- global.screen, null);
+ global.screen, workspace);
// Construct the AppIcons, add to the popup
for (let i = 0; i < apps.length; i++) {
@@ -447,7 +450,9 @@ const AppSwitcher = new Lang.Class({
appIcon.cachedWindows = allWindows.filter(function(w) {
return windowTracker.get_window_app (w) == appIcon.app;
});
- this._addIcon(appIcon);
+ if (workspace == null || appIcon.cachedWindows.length > 0) {
+ this._addIcon(appIcon);
+ }
}
this._curApp = -1;