From: Michael Stapelberg Date: Mon, 24 Oct 2011 19:11:32 +0000 (+0100) Subject: i3bar: put tray icons in the save-set (prevents them from crashing when i3bar exits... X-Git-Tag: 4.1~49 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=35bd2d27c0a6bb0d4bd235b21240e5fcb4602f92;p=i3%2Fi3 i3bar: put tray icons in the save-set (prevents them from crashing when i3bar exits/crashes) --- diff --git a/i3bar/src/ipc.c b/i3bar/src/ipc.c index 009c276f..c704b4f9 100644 --- a/i3bar/src/ipc.c +++ b/i3bar/src/ipc.c @@ -165,6 +165,7 @@ void got_data(struct ev_loop *loop, ev_io *watcher, int events) { /* EOF received. Since i3 will restart i3bar instances as appropriate, * we exit here. */ DLOG("EOF received, exiting...\n"); + clean_xcb(); exit(EXIT_SUCCESS); } rec += n; diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c index 01caeeea..bb7e5c77 100644 --- a/i3bar/src/xcb.c +++ b/i3bar/src/xcb.c @@ -499,6 +499,13 @@ static void handle_client_message(xcb_client_message_event_t* event) { (char*)ev); free(event); + /* Put the client inside the save set. Upon termination (whether + * killed or normal exit does not matter) of i3bar, these clients + * will be correctly reparented to their most closest living + * ancestor. Without this, tray icons might die when i3bar + * exits/crashes. */ + xcb_change_save_set(xcb_connection, XCB_SET_MODE_INSERT, client); + if (map_it) { DLOG("Mapping dock client\n"); xcb_map_window(xcb_connection, client);