diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/workspace.c | 42 | ||||
-rw-r--r-- | src/core/workspace.h | 11 |
2 files changed, 17 insertions, 36 deletions
diff --git a/src/core/workspace.c b/src/core/workspace.c index dffb1ebf..b83491e3 100644 --- a/src/core/workspace.c +++ b/src/core/workspace.c @@ -33,7 +33,7 @@ void meta_workspace_queue_calc_showing (MetaWorkspace *workspace); static void set_active_space_hint (MetaScreen *screen); -static void focus_ancestor_or_mru_window (MetaWorkspace *workspace, +static void focus_ancestor_or_top_window (MetaWorkspace *workspace, MetaWindow *not_this_one, guint32 timestamp); static void free_this (gpointer candidate, @@ -971,7 +971,7 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace, if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK || !workspace->screen->display->mouse_mode) - focus_ancestor_or_mru_window (workspace, not_this_one, timestamp); + focus_ancestor_or_top_window (workspace, not_this_one, timestamp); else { MetaWindow * window; @@ -1008,7 +1008,7 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace, } } else if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_SLOPPY) - focus_ancestor_or_mru_window (workspace, not_this_one, timestamp); + focus_ancestor_or_top_window (workspace, not_this_one, timestamp); else if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_MOUSE) { meta_topic (META_DEBUG_FOCUS, @@ -1035,13 +1035,11 @@ record_ancestor (MetaWindow *window, * window on active workspace */ static void -focus_ancestor_or_mru_window (MetaWorkspace *workspace, +focus_ancestor_or_top_window (MetaWorkspace *workspace, MetaWindow *not_this_one, guint32 timestamp) { MetaWindow *window = NULL; - MetaWindow *desktop_window = NULL; - GList *tmp; if (not_this_one) meta_topic (META_DEBUG_FOCUS, @@ -1072,36 +1070,8 @@ focus_ancestor_or_mru_window (MetaWorkspace *workspace, } } - /* No ancestor, look for the MRU window */ - tmp = workspace->mru_list; - - while (tmp) - { - MetaWindow* tmp_window; - tmp_window = ((MetaWindow*) tmp->data); - if (tmp_window != not_this_one && - meta_window_showing_on_its_workspace (tmp_window) && - tmp_window->type != META_WINDOW_DOCK && - tmp_window->type != META_WINDOW_DESKTOP) - { - window = tmp->data; - break; - } - else if (tmp_window != not_this_one && - desktop_window == NULL && - meta_window_showing_on_its_workspace (tmp_window) && - tmp_window->type == META_WINDOW_DESKTOP) - { - /* Found the most recently used desktop window */ - desktop_window = tmp_window; - } - - tmp = tmp->next; - } - - /* If no window was found, default to the MRU desktop-window */ - if (window == NULL) - window = desktop_window; + window = meta_stack_get_default_focus_window (workspace->screen->stack, + workspace, NULL); if (window) { diff --git a/src/core/workspace.h b/src/core/workspace.h index 7d02861e..b8ea3c97 100644 --- a/src/core/workspace.h +++ b/src/core/workspace.h @@ -52,6 +52,17 @@ struct _MetaWorkspace MetaScreen *screen; GList *windows; + + /* The "MRU list", or "most recently used" list, is a list of + * MetaWindows ordered based on the time the the user interacted + * with the window most recently. + * + * For historical reasons, we keep an MRU list per workspace. + * It used to be used to calculate the default focused window, + * but isn't anymore, as the window next in the stacking order + * can sometimes be not the window the user interacted with last, + */ + GList *mru_list; GList *list_containing_self; |