Major change: Redirect events instead of handle the notifies.

By specifying XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, the window manager
will get map request events instead of map notify events, and therefore
can act sooner (the window won’t be positioned on the screen and moved
afterwards).

Furthermore, this fixes some problems with GIMP/VLC (and probably others)
which caused endless loops.

Also, events which should be ignored are now saved in a queue rather than
saving just the last event. This should eliminate race conditions.

Note that there is a new FIXME in src/handlers.c. Some windows generate
unmap notify events when reparenting while others don’t. We need to
understand, document and implement a more correct way to handle this.
This commit is contained in:
Michael Stapelberg
2009-03-10 00:51:15 +01:00
parent 3f482bd3b3
commit c025678177
4 changed files with 155 additions and 58 deletions

View File

@ -109,6 +109,12 @@ struct Stack_Window {
SLIST_ENTRY(Stack_Window) stack_windows;
};
struct Ignore_Event {
int sequence;
time_t added;
SLIST_ENTRY(Ignore_Event) ignore_events;
};
/******************************************************************************
* Major types