Bugfix: after the first UnmapNotify, unignore the event
This commit is contained in:
parent
d760a1c7b2
commit
055bd18142
|
@ -28,6 +28,30 @@ void add_ignore_event(const int sequence) {
|
||||||
SLIST_INSERT_HEAD(&ignore_events, event, ignore_events);
|
SLIST_INSERT_HEAD(&ignore_events, event, ignore_events);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unignores the given sequence. Called when unmap events (generated by
|
||||||
|
* reparenting) should be ignored and the unmap event actually happens, in
|
||||||
|
* order to not ignore too many unmap events (leading to ghost window
|
||||||
|
* decorations).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void unignore_event(const int sequence) {
|
||||||
|
struct Ignore_Event *event;
|
||||||
|
for (event = SLIST_FIRST(&ignore_events);
|
||||||
|
event != SLIST_END(&ignore_events);
|
||||||
|
event = SLIST_NEXT(event, ignore_events)) {
|
||||||
|
if (event->sequence != sequence)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
DLOG("Unignoring sequence number %d\n", sequence);
|
||||||
|
struct Ignore_Event *save = event;
|
||||||
|
event = SLIST_NEXT(event, ignore_events);
|
||||||
|
SLIST_REMOVE(&ignore_events, save, Ignore_Event, ignore_events);
|
||||||
|
free(save);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Checks if the given sequence is ignored and returns true if so.
|
* Checks if the given sequence is ignored and returns true if so.
|
||||||
*
|
*
|
||||||
|
@ -428,6 +452,7 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_noti
|
||||||
DLOG("UnmapNotify for 0x%08x (received from 0x%08x), serial %d\n", event->window, event->event, event->sequence);
|
DLOG("UnmapNotify for 0x%08x (received from 0x%08x), serial %d\n", event->window, event->event, event->sequence);
|
||||||
if (ignored) {
|
if (ignored) {
|
||||||
DLOG("Ignoring UnmapNotify (generated by reparenting)\n");
|
DLOG("Ignoring UnmapNotify (generated by reparenting)\n");
|
||||||
|
unignore_event(event->sequence);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Con *con = con_by_window_id(event->window);
|
Con *con = con_by_window_id(event->window);
|
||||||
|
|
Loading…
Reference in New Issue