diff --git a/ChangeLog b/ChangeLog index 85a0029db..66cd02cf5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-02-20 Elijah Newren + + * src/window.c: (meta_window_activate): when receiving a + _NET_ACTIVE_WINDOW message, switch to the desktop where the window + is located before activating instead of moving the window to the + current desktop. Thanks to Lubos Lunak for catching this issue. + Fixes #128380. + 2005-02-20 Elijah Newren * src/window.c (meta_window_show): Ignore all focus and diff --git a/src/window.c b/src/window.c index e4bb6cd05..45076a988 100644 --- a/src/window.c +++ b/src/window.c @@ -2234,22 +2234,31 @@ meta_window_activate (MetaWindow *window, /* disable show desktop mode unless we're a desktop component */ maybe_leave_show_desktop_mode (window); - /* Get window on current workspace */ - if (!meta_window_located_on_workspace (window, - window->screen->active_workspace)) - meta_window_change_workspace (window, - window->screen->active_workspace); - if (window->shaded) meta_window_unshade (window); unminimize_window_and_all_transient_parents (window); - - meta_window_raise (window); - meta_topic (META_DEBUG_FOCUS, - "Focusing window %s due to activation\n", - window->desc); - meta_window_focus (window, timestamp); + + /* Activate the window, moving to its workspace if necessary */ + if (!meta_window_located_on_workspace (window, + window->screen->active_workspace)) + { + meta_topic (META_DEBUG_FOCUS, + "Focusing and moving to workspace of window %s due to " + "activation\n", + window->desc); + meta_workspace_activate_with_focus (window->workspace, + window, + timestamp); + } + else + { + meta_window_raise (window); + meta_topic (META_DEBUG_FOCUS, + "Focusing window %s due to activation\n", + window->desc); + meta_window_focus (window, timestamp); + } } /* returns values suitable for meta_window_move