Handle destroy notify events like unmap notify events
This helps for windows which are immediately destroyed instead of unmapped, like when starting i3status | ./foobar | dzen2 -dock and foobar does not exist (i3status and dzen2 will get a SIGPIPE).
This commit is contained in:
parent
e90e80c87d
commit
46e7cf5fe1
|
@ -94,6 +94,18 @@ int handle_configure_request(void *prophs, xcb_connection_t *conn,
|
||||||
*/
|
*/
|
||||||
int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_notify_event_t *event);
|
int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_notify_event_t *event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A destroy notify event is sent when the window is not unmapped, but
|
||||||
|
* immediately destroyed (for example when starting a window and immediately
|
||||||
|
* killing the program which started it).
|
||||||
|
*
|
||||||
|
* We just pass on the event to the unmap notify handler (by copying the
|
||||||
|
* important fields in the event data structure).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int handle_destroy_notify_event(void *data, xcb_connection_t *conn,
|
||||||
|
xcb_destroy_notify_event_t *event);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a window changes its title
|
* Called when a window changes its title
|
||||||
*
|
*
|
||||||
|
|
|
@ -571,6 +571,26 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_noti
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A destroy notify event is sent when the window is not unmapped, but
|
||||||
|
* immediately destroyed (for example when starting a window and immediately
|
||||||
|
* killing the program which started it).
|
||||||
|
*
|
||||||
|
* We just pass on the event to the unmap notify handler (by copying the
|
||||||
|
* important fields in the event data structure).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int handle_destroy_notify_event(void *data, xcb_connection_t *conn, xcb_destroy_notify_event_t *event) {
|
||||||
|
DLOG("destroy notify for 0x%08x, 0x%08x\n", event->event, event->window);
|
||||||
|
|
||||||
|
xcb_unmap_notify_event_t unmap;
|
||||||
|
unmap.sequence = event->sequence;
|
||||||
|
unmap.event = event->event;
|
||||||
|
unmap.window = event->window;
|
||||||
|
|
||||||
|
return handle_unmap_notify_event(NULL, conn, &unmap);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called when a window changes its title
|
* Called when a window changes its title
|
||||||
*
|
*
|
||||||
|
|
|
@ -414,6 +414,9 @@ int main(int argc, char *argv[], char *env[]) {
|
||||||
it any longer. Usually, the client destroys the window shortly afterwards. */
|
it any longer. Usually, the client destroys the window shortly afterwards. */
|
||||||
xcb_event_set_unmap_notify_handler(&evenths, handle_unmap_notify_event, NULL);
|
xcb_event_set_unmap_notify_handler(&evenths, handle_unmap_notify_event, NULL);
|
||||||
|
|
||||||
|
/* Destroy notify is handled the same as unmap notify */
|
||||||
|
xcb_event_set_destroy_notify_handler(&evenths, handle_destroy_notify_event, NULL);
|
||||||
|
|
||||||
/* Configure notify = window’s configuration (geometry, stacking, …). We only need
|
/* Configure notify = window’s configuration (geometry, stacking, …). We only need
|
||||||
it to set up ignore the following enter_notify events */
|
it to set up ignore the following enter_notify events */
|
||||||
xcb_event_set_configure_notify_handler(&evenths, handle_configure_event, NULL);
|
xcb_event_set_configure_notify_handler(&evenths, handle_configure_event, NULL);
|
||||||
|
|
Loading…
Reference in New Issue