old blog,

[hackpatch] Single workspace Alt+Tab / Alt+~ in Gnome3

Izhar Firdaus Izhar Firdaus Follow Support Nov 25, 2011 · 2 mins read
[hackpatch] Single workspace Alt+Tab / Alt+~ in Gnome3
Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.
The default alt+tab functionality in GNOME3 displays all apps and windows from all workspace. This probably is cool for non-power user who just use workspace to keep their current view uncluttered.

However for people like me who launch tens of windows and apps, and work with multiple project at once, and rely on the workspace to keep us in context with the project, the all workspace alt+tab is one heck of a confusing feature. This is especially true when I have multiple reference documents, and several browser windows opened, where some are meant for ProjectA, and some are meant for ProjectB. Any mistakes in alt+tab will cause me to get lost trying to go back to the right workspace, and the automatic reordering of alt+tab app icons based on last focus added the confusion even more, forcing me to stop for a while to find my bearing.

Anyway created a patch to make alt+tab showing only windows of current workspace.  Its quite rough, but good enough to keep my sanity.

WARNING: Things might break, use at your own risk, you have been warned.

--- /usr/share/gnome-shell/js/ui/altTab.js.old 2011-11-25 10:21:14.161993561 +0800
+++ /usr/share/gnome-shell/js/ui/altTab.js 2011-11-25 21:12:04.178685966 +0800
@@ -161,7 +161,7 @@
// standard Alt+Tab order (MRU except for minimized windows),
// and allApps is a list of apps that only appear on other
// workspaces, sorted by user_time, which is good enough.
- return [apps, allApps];
+ return [apps, []]; //allApps];

show : function(backward, binding, mask) {
@@ -893,7 +893,14 @@
let appIcon = new AppIcon(localApps[i]);
// Cache the window list now; we don't handle dynamic changes here,
// and we don't want to be continually retrieving it
- appIcon.cachedWindows = appIcon.app.get_windows();
+ let appWindows = appIcon.app.get_windows();
+ let cachedWindows = [];
+ for (let w = 0; w < appWindows.length; w++) {
+ if (appWindows[w].get_workspace() == activeWorkspace){
+ cachedWindows.push(appWindows[w]);
+ }
+ }
+ appIcon.cachedWindows = cachedWindows;
for (let i = 0; i < otherApps.length; i++) {
@@ -1066,6 +1073,9 @@
this._windows = windows;

for (let i = 0; i < windows.length; i++) {
+ if (windows[i].get_workspace() != activeWorkspace) {
+ continue;
+ }
if (!separatorAdded && windows[i].get_workspace() != activeWorkspace) {
separatorAdded = true;

Pastebin: http://pastebin.ca/2095832

Probably its better to turn this into an extension, but the modification is too little to justify that at the moment.

Update : Dont display dropdown arrow if theres only 1 window of app in current workspace
Written by Izhar Firdaus Follow Support
I'm a system architect, data engineer and developer advocate with passion in Free / Open Source software, entrepreneurship, community building, education and martial art. I take enjoyment in bridging and bringing together different FOSS technologies to help businesses and organizations utilize IT infrastructure to aid and optimize their business and organizational process.

CampusCamp : Building communities in educational institutions

So I created yet-another-barcamp-spinoff. :-) What is CampusCampIn general , CampusCamp is a BarCamp for educational institutions, ta...

In old blog, Nov 21, 2011

« Previous Post

diazotheme.bootstrap : Twitter Bootstrap based Diazo theme for Plone4.1+

I was introduced to twitter's bootstrap css toolkit quite a while ago, and loving it.Naturally, I want to use this in Plone, so I wen...

In old blog, Nov 27, 2011

Next Post »