Fix middle-frame-click-to-lower focus inconsistency (#154601)

2004-10-08  Elijah Newren  <newren@math.utah.edu>

	Fix middle-frame-click-to-lower focus inconsistency (#154601)

	* src/core.c (meta_core_user_lower_and_unfocus): focus the default
	window in all focus modes, not just click-to-focus (EnterNotify
	events will not handle this case for sloppy and mouse focus)

	* src/display.c (event_callback): replace window->has_focus with
	window == display->expected_focus_window to avoid a race issue
This commit is contained in:
Elijah Newren 2004-10-08 22:34:34 +00:00 committed by Elijah Newren
parent 79b4de04fc
commit 81fe64991c
3 changed files with 21 additions and 10 deletions

View File

@ -1,8 +1,19 @@
2004-10-08 Elijah Newren <newren@math.utah.edu> 2004-10-08 Elijah Newren <newren@math.utah.edu>
Alter the meaning of expected_focus_window; doesn't affect Fix middle-frame-click-to-lower focus inconsistency (#154601)
current operation but assists in fixing some other bugs
(#154598) * src/core.c (meta_core_user_lower_and_unfocus): focus the default
window in all focus modes, not just click-to-focus (EnterNotify
events will not handle this case for sloppy and mouse focus)
* src/display.c (event_callback): replace window->has_focus with
window == display->expected_focus_window to avoid a race issue
2004-10-08 Elijah Newren <newren@math.utah.edu>
Alter the meaning of expected_focus_window; doesn't affect
current operation but assists in fixing some other bugs
(#154598)
* src/display.c (meta_display_focus_the_no_focus_window): set the * src/display.c (meta_display_focus_the_no_focus_window): set the
expected_focus_window to NULL. expected_focus_window to NULL.

View File

@ -275,13 +275,13 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
g_list_append (window->screen->active_workspace->mru_list, g_list_append (window->screen->active_workspace->mru_list,
window); window);
} }
/* focus on the (new) topmost window */
if (window->has_focus)
meta_workspace_focus_default_window (window->screen->active_workspace,
window,
timestamp);
} }
/* focus the default window, if needed */
if (window->has_focus)
meta_workspace_focus_default_window (window->screen->active_workspace,
NULL,
timestamp);
} }
void void

View File

@ -1784,7 +1784,7 @@ event_callback (XEvent *event,
switch (meta_prefs_get_focus_mode ()) switch (meta_prefs_get_focus_mode ())
{ {
case META_FOCUS_MODE_MOUSE: case META_FOCUS_MODE_MOUSE:
if (window->has_focus && if (window == display->expected_focus_window &&
(window->frame == NULL || frame_was_receiver) && (window->frame == NULL || frame_was_receiver) &&
event->xcrossing.mode != NotifyGrab && event->xcrossing.mode != NotifyGrab &&
event->xcrossing.mode != NotifyUngrab && event->xcrossing.mode != NotifyUngrab &&