From: Tony Crisci Date: Thu, 26 Dec 2013 05:30:21 +0000 (-0500) Subject: i3bar: Set `mapped` flag on trayclient creation X-Git-Tag: 4.7.1~5^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=23b1da598ebac70d82070abb557bef0fd3fabce9;p=i3%2Fi3 i3bar: Set `mapped` flag on trayclient creation When a trayclient is first created as a structure in memory, explicitly set the `mapped` flag to false. Otherwise it may initialize to `true` in some circumstances without actually being mapped, causing a request to be mapped from the client to be ignored. Create the trayclient in memory before handling a request to be mapped immediately. fixes #1138 --- diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c index d3dc948e..82861039 100644 --- a/i3bar/src/xcb.c +++ b/i3bar/src/xcb.c @@ -603,17 +603,18 @@ static void handle_client_message(xcb_client_message_event_t* event) { * exits/crashes. */ xcb_change_save_set(xcb_connection, XCB_SET_MODE_INSERT, client); + trayclient *tc = smalloc(sizeof(trayclient)); + tc->win = client; + tc->xe_version = xe_version; + tc->mapped = false; + TAILQ_INSERT_TAIL(output->trayclients, tc, tailq); + if (map_it) { DLOG("Mapping dock client\n"); xcb_map_window(xcb_connection, client); } else { DLOG("Not mapping dock client yet\n"); } - trayclient *tc = smalloc(sizeof(trayclient)); - tc->win = client; - tc->xe_version = xe_version; - TAILQ_INSERT_TAIL(output->trayclients, tc, tailq); - /* Trigger an update to copy the statusline text to the appropriate * position */ configure_trayclients();