Focus the no_focus_window if no suitable window is in the mru list (should

2004-09-15  Elijah Newren  <newren@math.utah.edu>

	Focus the no_focus_window if no suitable window is in the mru list
	(should fix the almost contrived extra issue found in #147475)

	* doc/how-to-get-focus-right.txt: We no longer need to lie about
	only focusing panels upon explicit request.

	* src/workspace.c: (meta_workspace_focus_top_window): removed this
	function--it was more code than needed and was unreliable anyway,
	(meta_workspace_focus_mru_window): if a suitable window isn't in
	the mru list, focus the no_focus_window instead of calling
	focus_top_window.
This commit is contained in:
Elijah Newren 2004-09-15 16:53:20 +00:00 committed by Elijah Newren
parent b8b647e346
commit cffe7e9566
3 changed files with 20 additions and 42 deletions

View File

@ -1,3 +1,17 @@
2004-09-15 Elijah Newren <newren@math.utah.edu>
Focus the no_focus_window if no suitable window is in the mru list
(should fix the almost contrived extra issue found in #147475)
* doc/how-to-get-focus-right.txt: We no longer need to lie about
only focusing panels upon explicit request.
* src/workspace.c: (meta_workspace_focus_top_window): removed this
function--it was more code than needed and was unreliable anyway,
(meta_workspace_focus_mru_window): if a suitable window isn't in
the mru list, focus the no_focus_window instead of calling
focus_top_window.
2004-09-15 Elijah Newren <newren@math.utah.edu> 2004-09-15 Elijah Newren <newren@math.utah.edu>
Prevent focus inconsistencies by only providing one focus method Prevent focus inconsistencies by only providing one focus method

View File

@ -78,10 +78,7 @@ without using the mouse, for example, by grabs).
Finally, windows of type WM_DOCK or WM_DESKTOP (e.g. the desktop and Finally, windows of type WM_DOCK or WM_DESKTOP (e.g. the desktop and
the panel) present a special case. For all focus modes, we only focus the panel) present a special case. For all focus modes, we only focus
these windows if the user clicks on them or uses Ctrl-Alt-Tab to these windows if the user clicks on them or uses Ctrl-Alt-Tab to
navigate to them. (Well, erm, actually they can be focused in click navigate to them.
and sloppy focus modes if no other window besides these are found, but
there shouldn't be any difference in behavior between doing this and
focusing the designated "no_focus_window")

View File

@ -31,8 +31,6 @@ void meta_workspace_queue_calc_showing (MetaWorkspace *workspace);
static void set_active_space_hint (MetaScreen *screen); static void set_active_space_hint (MetaScreen *screen);
static void meta_workspace_focus_mru_window (MetaWorkspace *workspace, static void meta_workspace_focus_mru_window (MetaWorkspace *workspace,
MetaWindow *not_this_one); MetaWindow *not_this_one);
static void meta_workspace_focus_top_window (MetaWorkspace *workspace,
MetaWindow *not_this_one);
static void static void
maybe_add_to_list (MetaScreen *screen, MetaWindow *window, gpointer data) maybe_add_to_list (MetaScreen *screen, MetaWindow *window, gpointer data)
@ -867,41 +865,10 @@ meta_workspace_focus_mru_window (MetaWorkspace *workspace,
} }
else else
{ {
meta_topic (META_DEBUG_FOCUS, "No MRU window to focus found\n"); meta_topic (META_DEBUG_FOCUS, "No MRU window to focus found; focusing no_focus_window.\n");
meta_workspace_focus_top_window (workspace, not_this_one); XSetInputFocus (workspace->screen->display->xdisplay,
} workspace->screen->display->no_focus_window,
} RevertToPointerRoot,
meta_display_get_current_time (workspace->screen->display));
/* Focus top window on workspace */
void
meta_workspace_focus_top_window (MetaWorkspace *workspace,
MetaWindow *not_this_one)
{
MetaWindow *window;
if (not_this_one)
meta_topic (META_DEBUG_FOCUS,
"Focusing top window excluding %s\n", not_this_one->desc);
window = meta_stack_get_default_focus_window (workspace->screen->stack,
workspace,
not_this_one);
/* FIXME I'm a loser on the CurrentTime front */
if (window)
{
meta_topic (META_DEBUG_FOCUS,
"Focusing top window %s\n", window->desc);
meta_window_focus (window,
meta_display_get_current_time (workspace->screen->display));
/* Also raise the window if in click-to-focus */
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
meta_window_raise (window);
}
else
{
meta_topic (META_DEBUG_FOCUS, "No top window to focus found\n");
} }
} }