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
This commit is contained in:
Tony Crisci 2013-12-26 00:30:21 -05:00 committed by Michael Stapelberg
parent cd6fb69977
commit 23b1da598e
1 changed files with 6 additions and 5 deletions

View File

@ -603,17 +603,18 @@ static void handle_client_message(xcb_client_message_event_t* event) {
* exits/crashes. */ * exits/crashes. */
xcb_change_save_set(xcb_connection, XCB_SET_MODE_INSERT, client); 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) { if (map_it) {
DLOG("Mapping dock client\n"); DLOG("Mapping dock client\n");
xcb_map_window(xcb_connection, client); xcb_map_window(xcb_connection, client);
} else { } else {
DLOG("Not mapping dock client yet\n"); 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 /* Trigger an update to copy the statusline text to the appropriate
* position */ * position */
configure_trayclients(); configure_trayclients();