[gnome-shell-extensions] Auto Move Windows: open overview when last window is closed
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell-extensions] Auto Move Windows: open overview when last window is closed
- Date: Sat, 9 Jul 2011 14:00:24 +0000 (UTC)
commit 68629ea7a629a373941a2c8c4982e5a0210d3ff0
Author: Alessandro Crismani <alessandro crismani gmail com>
Date: Tue May 31 23:15:43 2011 +0100
Auto Move Windows: open overview when last window is closed
Using the auto move window the overview is not shown when the last
window on a workspace is closed, instead the workspace before is
activated. Fix the extension to show the ovreview instead of changing
workspace when the last window is closed. The fix is basically merged
from gnome-shell master.
https://bugzilla.gnome.org/show_bug.cgi?id=651586
extensions/auto-move-windows/extension.js | 39 +++++++++++++++++++++++++++-
1 files changed, 37 insertions(+), 2 deletions(-)
---
diff --git a/extensions/auto-move-windows/extension.js b/extensions/auto-move-windows/extension.js
index f12931c..136f3cd 100644
--- a/extensions/auto-move-windows/extension.js
+++ b/extensions/auto-move-windows/extension.js
@@ -5,6 +5,7 @@ const Glib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
+const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
@@ -73,8 +74,17 @@ function main(extensionMeta) {
let i;
let emptyWorkspaces = new Array(Main._workspaces.length);
- for (i = 0; i < Main._workspaces.length; i++)
- emptyWorkspaces[i] = true;
+ for (i = 0; i < Main._workspaces.length; i++) {
+ let lastRemoved = Main._workspaces[i]._lastRemovedWindow;
+ if (lastRemoved &&
+ (lastRemoved.get_window_type() == Meta.WindowType.SPLASHSCREEN ||
+ lastRemoved.get_window_type() == Meta.WindowType.DIALOG ||
+ lastRemoved.get_window_type() == Meta.WindowType.MODAL_DIALOG))
+ emptyWorkspaces[i] = false;
+ else
+ emptyWorkspaces[i] = true;
+ }
+
let windows = global.get_window_actors();
for (i = 0; i < windows.length; i++) {
@@ -93,6 +103,18 @@ function main(extensionMeta) {
emptyWorkspaces.push(false);
}
+ let activeWorkspaceIndex = global.screen.get_active_workspace_index();
+ let removingCurrentWorkspace = (emptyWorkspaces[activeWorkspaceIndex] &&
+ activeWorkspaceIndex < emptyWorkspaces.length - 1);
+ // Don't enter the overview when removing multiple empty workspaces at startup
+ let showOverview = (removingCurrentWorkspace &&
+ !emptyWorkspaces.every(function(x) { return x; }));
+
+ if (removingCurrentWorkspace) {
+ // "Merge" the empty workspace we are removing with the one at the end
+ Main.wm.blockAnimations();
+ }
+
// Delete other empty workspaces; do it from the end to avoid index changes
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
if (emptyWorkspaces[i])
@@ -100,6 +122,19 @@ function main(extensionMeta) {
else
break;
}
+
+ if (removingCurrentWorkspace) {
+ if (activeWorkspaceIndex > global.screen.n_workspaces - 1)
+ global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
+ else
+ global.screen.get_workspace_by_index(activeWorkspaceIndex).activate(global.get_current_time());
+
+ Main.wm.unblockAnimations();
+
+ if (!Main.overview.visible && showOverview)
+ Main.overview.show();
+ }
+
Main._checkWorkspacesId = 0;
return false;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]