[gnome-shell] Allow selection of individual windows
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Allow selection of individual windows
- Date: Mon, 17 May 2010 17:22:26 +0000 (UTC)
commit 1af392b5f0a7ddbbafcd31718c503ee0f4620411
Author: Colin Walters <walters verbum org>
Date: Thu May 6 13:36:01 2010 -0400
Allow selection of individual windows
Per design discussion, change things back so that when choosing
an individual window, we raise only that window. However
when we select an application, raise all windows.
A behavioral change required to clearly differentiate these
is that when the window thumbnail list is popped up, it no
longer has the first window selected by default. Therefore
the user has to explicitly press the down arrow or use the
mouse to enter individual window selection mode.
https://bugzilla.gnome.org/show_bug.cgi?id=617959
js/ui/altTab.js | 60 ++++++++++++++++++++++++++++++++++++------------------
1 files changed, 40 insertions(+), 20 deletions(-)
---
diff --git a/js/ui/altTab.js b/js/ui/altTab.js
index 5146f50..1a0e80a 100644
--- a/js/ui/altTab.js
+++ b/js/ui/altTab.js
@@ -46,7 +46,7 @@ AltTabPopup.prototype = {
this._haveModal = false;
this._currentApp = 0;
- this._currentWindow = 0;
+ this._currentWindow = -1;
this._thumbnailTimeoutId = 0;
this._motionTimeoutId = 0;
@@ -164,8 +164,9 @@ AltTabPopup.prototype = {
this._select(0, 1, true);
else
this._select(1);
- } else
+ } else {
this._select(1);
+ }
}
// There's a race condition; if the user released Alt before
@@ -190,10 +191,16 @@ AltTabPopup.prototype = {
},
_nextWindow : function() {
+ // We actually want the second window if we're in the unset state
+ if (this._currentWindow == -1)
+ this._currentWindow = 0;
return mod(this._currentWindow + 1,
this._appIcons[this._currentApp].cachedWindows.length);
},
_previousWindow : function() {
+ // Also assume second window here
+ if (this._currentWindow == -1)
+ this._currentWindow = 1;
return mod(this._currentWindow - 1,
this._appIcons[this._currentApp].cachedWindows.length);
},
@@ -213,7 +220,7 @@ AltTabPopup.prototype = {
this.destroy();
else if (this._thumbnailsFocused) {
if (keysym == Clutter.Tab) {
- if (shift && this._currentWindow == 0)
+ if (shift && (this._currentWindow == 0 || this._currentWindow == -1))
this._select(this._previousApp());
else if (!shift && this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
this._select(this._nextApp());
@@ -233,7 +240,7 @@ AltTabPopup.prototype = {
else if (keysym == Clutter.Right || keysym == Clutter.d)
this._select(this._nextApp());
else if (keysym == Clutter.Down || keysym == Clutter.s)
- this._select(this._currentApp, this._currentWindow);
+ this._select(this._currentApp, 0);
}
return true;
@@ -252,7 +259,7 @@ AltTabPopup.prototype = {
let direction = event.get_scroll_direction();
if (direction == Clutter.ScrollDirection.UP) {
if (this._thumbnailsFocused) {
- if (this._currentWindow == 0)
+ if (this._currentWindow == 0 || this._currentWindow == -1)
this._select(this._previousApp());
else
this._select(this._currentApp, this._previousWindow());
@@ -286,12 +293,17 @@ AltTabPopup.prototype = {
_appActivated : function(appSwitcher, n) {
// If the user clicks on the selected app, activate the
// selected window; otherwise (eg, they click on an app while
- // !mouseActive) activate the first window of the clicked-on
- // app.
- let appIcon = this._appIcons[n];
- let windowIndex = (n == this._currentApp) ? this._currentWindow : 0;
- let window = appIcon.cachedWindows[windowIndex];
- appIcon.app.activate_window(window, global.get_current_time());
+ // !mouseActive) activate the the clicked-on app.
+ if (n == this._currentApp) {
+ let window;
+ if (this._currentWindow >= 0)
+ window = this._appIcons[this._currentApp].cachedWindows[this._currentWindow];
+ else
+ window = null;
+ this._appIcons[this._currentApp].app.activate_window(window, global.get_current_time());
+ } else {
+ this._appIcons[n].app.activate_window(null, global.get_current_time());
+ }
this.destroy();
},
@@ -304,7 +316,7 @@ AltTabPopup.prototype = {
_windowActivated : function(thumbnailList, n) {
let appIcon = this._appIcons[this._currentApp];
- appIcon.app.activate_window(appIcon.cachedWindows[n]);
+ Main.activateWindow(appIcon.cachedWindows[n]);
this.destroy();
},
@@ -330,9 +342,12 @@ AltTabPopup.prototype = {
},
_finish : function() {
- let appIcon = this._appIcons[this._currentApp];
- let window = appIcon.cachedWindows[this._currentWindow];
- appIcon.app.activate_window(window, global.get_current_time());
+ let app = this._appIcons[this._currentApp];
+ if (this._currentWindow >= 0) {
+ Main.activateWindow(app.cachedWindows[this._currentWindow]);
+ } else {
+ app.app.activate_window(null, global.get_current_time());
+ }
this.destroy();
},
@@ -397,7 +412,7 @@ AltTabPopup.prototype = {
this._thumbnailsFocused = (window != null) && !forceAppFocus;
this._currentApp = app;
- this._currentWindow = window ? window : 0;
+ this._currentWindow = window ? window : -1;
this._appSwitcher.highlight(app, this._thumbnailsFocused);
if (window != null) {
@@ -409,13 +424,18 @@ AltTabPopup.prototype = {
!forceAppFocus) {
this._thumbnailTimeoutId = Mainloop.timeout_add (
THUMBNAIL_POPUP_TIME,
- Lang.bind(this, function () {
- this._select(this._currentApp, 0, true);
- return false;
- }));
+ Lang.bind(this, this._timeoutPopupThumbnails));
}
},
+ _timeoutPopupThumbnails: function() {
+ if (!this._thumbnails)
+ this._createThumbnails();
+ this._thumbnailTimeoutId = 0;
+ this._thumbnailsFocused = false;
+ return false;
+ },
+
_destroyThumbnails : function() {
Tweener.addTween(this._thumbnails.actor,
{ opacity: 0,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]