From 01027006a736e5a9ec1965acaff2709f4f6020ba Mon Sep 17 00:00:00 2001 From: Thomas James Alexander Thurman Date: Sun, 21 Dec 2008 05:35:30 +0000 Subject: [PATCH] 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 --- ChangeLog | 7 +++++++ src/core/window.c | 19 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 507f42e78..d0f7c5a3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-12-21 Colin Walters + + * 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 * 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 d098285cd..0f93c409f 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);