mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
clear expected focus window on open
2002-08-07 Craig Black <blackc@speakeasy.net> * src/display.c: (meta_display_open): clear expected focus window on open * src/display.h: add expected_focus_window field * src/window.c: (meta_window_make_fullscreen), (meta_window_unmake_fullscreen): change meta_window_update_layer() to meta_stack_update_layer() so build works again. (meta_window_free), (meta_window_make_fullscreen), (meta_window_focus), (meta_window_notify_focus): keep track of expected focus window after sending WM_TAKE_FOCUS event, previously if a UnmapNotify event arrived before the FocusIn event we would lose focus, fixes #84564.
This commit is contained in:
parent
ceb771aeb6
commit
7a598e5567
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
|||||||
|
2002-08-07 Craig Black <blackc@speakeasy.net>
|
||||||
|
|
||||||
|
* src/display.c: (meta_display_open): clear expected focus window
|
||||||
|
on open
|
||||||
|
|
||||||
|
* src/display.h: add expected_focus_window field
|
||||||
|
|
||||||
|
* src/window.c: (meta_window_make_fullscreen),
|
||||||
|
(meta_window_unmake_fullscreen): change meta_window_update_layer()
|
||||||
|
to meta_stack_update_layer() so build works again.
|
||||||
|
(meta_window_free), (meta_window_make_fullscreen),
|
||||||
|
(meta_window_focus), (meta_window_notify_focus): keep track of
|
||||||
|
expected focus window after sending WM_TAKE_FOCUS event,
|
||||||
|
previously if a UnmapNotify event arrived before the FocusIn event
|
||||||
|
we would lose focus, fixes #84564.
|
||||||
|
|
||||||
2002-08-07 Havoc Pennington <hp@redhat.com>
|
2002-08-07 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
* src/window.c (meta_window_unmake_fullscreen): update layer
|
* src/window.c (meta_window_unmake_fullscreen): update layer
|
||||||
|
@ -288,6 +288,7 @@ meta_display_open (const char *name)
|
|||||||
display->pending_pings = NULL;
|
display->pending_pings = NULL;
|
||||||
display->autoraise_timeout_id = 0;
|
display->autoraise_timeout_id = 0;
|
||||||
display->focus_window = NULL;
|
display->focus_window = NULL;
|
||||||
|
display->expected_focus_window = NULL;
|
||||||
display->mru_list = NULL;
|
display->mru_list = NULL;
|
||||||
|
|
||||||
display->showing_desktop = FALSE;
|
display->showing_desktop = FALSE;
|
||||||
|
@ -153,6 +153,11 @@ struct _MetaDisplay
|
|||||||
*/
|
*/
|
||||||
MetaWindow *focus_window;
|
MetaWindow *focus_window;
|
||||||
|
|
||||||
|
/* WM_TAKE_FOCUS has been sent but we have not yet
|
||||||
|
* received the resulting FocusIn event for this window
|
||||||
|
*/
|
||||||
|
MetaWindow *expected_focus_window;
|
||||||
|
|
||||||
/* Most recently focused list. Always contains all
|
/* Most recently focused list. Always contains all
|
||||||
* live windows.
|
* live windows.
|
||||||
*/
|
*/
|
||||||
|
16
src/window.c
16
src/window.c
@ -812,6 +812,14 @@ meta_window_free (MetaWindow *window)
|
|||||||
window->desc);
|
window->desc);
|
||||||
meta_screen_focus_top_window (window->screen, window);
|
meta_screen_focus_top_window (window->screen, window);
|
||||||
}
|
}
|
||||||
|
else if (window->display->expected_focus_window == window)
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_FOCUS,
|
||||||
|
"Focusing top window since expected focus window freed %s\n",
|
||||||
|
window->desc);
|
||||||
|
window->display->expected_focus_window = NULL;
|
||||||
|
meta_screen_focus_top_window (window->screen, window);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meta_topic (META_DEBUG_FOCUS,
|
meta_topic (META_DEBUG_FOCUS,
|
||||||
@ -1632,7 +1640,7 @@ meta_window_make_fullscreen (MetaWindow *window)
|
|||||||
|
|
||||||
window->fullscreen = TRUE;
|
window->fullscreen = TRUE;
|
||||||
|
|
||||||
meta_window_update_layer (window);
|
meta_stack_update_layer (window->screen->stack, window);
|
||||||
meta_window_raise (window);
|
meta_window_raise (window);
|
||||||
|
|
||||||
/* save size/pos as appropriate args for move_resize */
|
/* save size/pos as appropriate args for move_resize */
|
||||||
@ -1661,7 +1669,7 @@ meta_window_unmake_fullscreen (MetaWindow *window)
|
|||||||
|
|
||||||
window->fullscreen = FALSE;
|
window->fullscreen = FALSE;
|
||||||
|
|
||||||
meta_window_update_layer (window);
|
meta_stack_update_layer (window->screen->stack, window);
|
||||||
|
|
||||||
meta_window_move_resize (window,
|
meta_window_move_resize (window,
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -2798,6 +2806,7 @@ meta_window_focus (MetaWindow *window,
|
|||||||
meta_window_send_icccm_message (window,
|
meta_window_send_icccm_message (window,
|
||||||
window->display->atom_wm_take_focus,
|
window->display->atom_wm_take_focus,
|
||||||
timestamp);
|
timestamp);
|
||||||
|
window->display->expected_focus_window = window;
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_error_trap_pop (window->display);
|
meta_error_trap_pop (window->display);
|
||||||
@ -3580,6 +3589,9 @@ meta_window_notify_focus (MetaWindow *window,
|
|||||||
|
|
||||||
if (event->type == FocusIn)
|
if (event->type == FocusIn)
|
||||||
{
|
{
|
||||||
|
if (window->display->expected_focus_window == window)
|
||||||
|
window->display->expected_focus_window = NULL;
|
||||||
|
|
||||||
if (window != window->display->focus_window)
|
if (window != window->display->focus_window)
|
||||||
{
|
{
|
||||||
meta_topic (META_DEBUG_FOCUS,
|
meta_topic (META_DEBUG_FOCUS,
|
||||||
|
Loading…
Reference in New Issue
Block a user