systray: prevent race in error detection
o9000 o9000
1 files changed,
4 insertions(+),
0 deletions(-)
jump to
M
src/systray/systraybar.c
→
src/systray/systraybar.c
@@ -442,6 +442,7 @@ }
Window parent = XCreateWindow(server.dsp, panel->main_win, 0, 0, 30, 30, 0, attr.depth, InputOutput, visual, mask, &set_attr); // Watch for the icon trying to resize itself / closing again + XSync(server.dsp, False); error = FALSE; XErrorHandler old = XSetErrorHandler(window_error_handler); XSelectInput(server.dsp, win, StructureNotifyMask);@@ -493,6 +494,7 @@
Panel* panel = systray.area.panel; // Reparent + XSync(server.dsp, False); error = FALSE; XErrorHandler old = XSetErrorHandler(window_error_handler); XReparentWindow(server.dsp, traywin->win, traywin->parent, 0, 0);@@ -523,6 +525,7 @@ e.xclient.data.l[1] = XEMBED_EMBEDDED_NOTIFY;
e.xclient.data.l[2] = 0; e.xclient.data.l[3] = traywin->parent; e.xclient.data.l[4] = 0; + XSync(server.dsp, False); error = FALSE; XErrorHandler old = XSetErrorHandler(window_error_handler); XSendEvent(server.dsp, traywin->win, False, 0xFFFFFF, &e);@@ -587,6 +590,7 @@ if (traywin->damage)
XDamageDestroy(server.dsp, traywin->damage); // reparent to root + XSync(server.dsp, False); error = FALSE; old = XSetErrorHandler(window_error_handler); if (!traywin->hide)