summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas James Alexander Thurman <tthurman@src.gnome.org>2008-12-21 05:35:30 +0000
committerThomas James Alexander Thurman <tthurman@src.gnome.org>2008-12-21 05:35:30 +0000
commit01027006a736e5a9ec1965acaff2709f4f6020ba (patch)
treefb4f419a4b8cd5a1b9f202e2374dc751c36e0fad
parent38faa8fe109071dcb9c49fdbc13774d13f4691ee (diff)
downloadmetacity-01027006a736e5a9ec1965acaff2709f4f6020ba.tar.gz
windows which attempt to present themselves but are offscreen end up
* src/core/window.c: windows which attempt to present themselves but are offscreen end up demanding attention, unless they are transient, when they move to the current workspace as before. Closes #482354. svn path=/trunk/; revision=4060
-rw-r--r--ChangeLog7
-rw-r--r--src/core/window.c19
2 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 507f42e7..d0f7c5a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-21 Colin Walters <walters@verbum.org>
+
+ * src/core/window.c: windows which attempt to present themselves
+ but are offscreen end up demanding attention, unless they
+ are transient, when they move to the current workspace
+ as before. Closes #482354.
+
2008-12-19 Thomas Thurman <tthurman@gnome.org>
* src/ui/frames.c: when the user double-clicks the title bar,
diff --git a/src/core/window.c b/src/core/window.c
index d098285c..0f93c409 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2952,8 +2952,23 @@ window_activate (MetaWindow *window,
/* Get window on current or given workspace */
if (workspace == NULL)
workspace = window->screen->active_workspace;
- if (!meta_window_located_on_workspace (window, workspace))
- meta_window_change_workspace (window, workspace);
+
+ /* For non-transient windows, we just set up a pulsing indicator,
+ rather than move windows or workspaces.
+ See http://bugzilla.gnome.org/show_bug.cgi?id=482354 */
+ if (window->xtransient_for == None &&
+ !meta_window_located_on_workspace (window, workspace))
+ {
+ meta_window_set_demands_attention (window);
+ /* We've marked it as demanding, don't need to do anything else. */
+ return;
+ }
+ else if (window->xtransient_for != None)
+ {
+ /* Move transients to current workspace - preference dialogs should appear over
+ the source window. */
+ meta_window_change_workspace (window, workspace);
+ }
if (window->shaded)
meta_window_unshade (window, timestamp);