i3bar: kick tray clients after output configuration changed
This makes i3bar reflect xrandr --output foo --primary changes immediately.
This commit is contained in:
parent
189b27b01e
commit
17e4d7ede1
|
@ -77,6 +77,17 @@ void clean_xcb();
|
||||||
*/
|
*/
|
||||||
void get_atoms();
|
void get_atoms();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reparents all tray clients of the specified output to the root window. This
|
||||||
|
* is either used when shutting down, when an output appears (xrandr --output
|
||||||
|
* VGA1 --off) or when the primary output changes.
|
||||||
|
*
|
||||||
|
* Applications using the tray will start the protocol from the beginning again
|
||||||
|
* afterwards.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void kick_tray_clients(i3_output *output);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Destroy the bar of the specified output
|
* Destroy the bar of the specified output
|
||||||
*
|
*
|
||||||
|
|
|
@ -65,6 +65,11 @@ void got_output_reply(char *reply) {
|
||||||
DLOG("Reconfiguring Windows...\n");
|
DLOG("Reconfiguring Windows...\n");
|
||||||
realloc_sl_buffer();
|
realloc_sl_buffer();
|
||||||
reconfig_windows();
|
reconfig_windows();
|
||||||
|
|
||||||
|
i3_output *o_walk;
|
||||||
|
SLIST_FOREACH(o_walk, outputs, slist) {
|
||||||
|
kick_tray_clients(o_walk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1087,6 +1087,28 @@ void get_atoms() {
|
||||||
DLOG("Got Atoms\n");
|
DLOG("Got Atoms\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reparents all tray clients of the specified output to the root window. This
|
||||||
|
* is either used when shutting down, when an output appears (xrandr --output
|
||||||
|
* VGA1 --off) or when the primary output changes.
|
||||||
|
*
|
||||||
|
* Applications using the tray will start the protocol from the beginning again
|
||||||
|
* afterwards.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void kick_tray_clients(i3_output *output) {
|
||||||
|
trayclient *trayclient;
|
||||||
|
TAILQ_FOREACH(trayclient, output->trayclients, tailq) {
|
||||||
|
/* Unmap, then reparent (to root) the tray client windows */
|
||||||
|
xcb_unmap_window(xcb_connection, trayclient->win);
|
||||||
|
xcb_reparent_window(xcb_connection,
|
||||||
|
trayclient->win,
|
||||||
|
xcb_root,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Destroy the bar of the specified output
|
* Destroy the bar of the specified output
|
||||||
*
|
*
|
||||||
|
@ -1099,17 +1121,7 @@ void destroy_window(i3_output *output) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
trayclient *trayclient;
|
kick_tray_clients(output);
|
||||||
TAILQ_FOREACH(trayclient, output->trayclients, tailq) {
|
|
||||||
/* Unmap, then reparent (to root) the tray client windows */
|
|
||||||
xcb_unmap_window(xcb_connection, trayclient->win);
|
|
||||||
xcb_reparent_window(xcb_connection,
|
|
||||||
trayclient->win,
|
|
||||||
xcb_root,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
xcb_destroy_window(xcb_connection, output->bar);
|
xcb_destroy_window(xcb_connection, output->bar);
|
||||||
output->bar = XCB_NONE;
|
output->bar = XCB_NONE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue