all repos — tint2 @ c5c8786363705488e58c6af137738d6ba75315b7

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

systray: Fix race in sorting icons by name
o9000 mrovi9000@gmail.com
commit

c5c8786363705488e58c6af137738d6ba75315b7

parent

c8250e5200b9d2a7352221e6e7a650b45dfce9dd

1 files changed, 19 insertions(+), 3 deletions(-)

jump to
M src/systray/systraybar.csrc/systray/systraybar.c

@@ -526,6 +526,13 @@ return FALSE;

} } + // Dangerous actions begin + XSync(server.display, False); + error = FALSE; + XErrorHandler old = XSetErrorHandler(window_error_handler); + + XSelectInput(server.display, win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask); + XTextProperty xname; char *name; if (XGetWMName(server.display, win, &xname)) {

@@ -571,8 +578,19 @@ if (systray_profile)

fprintf(stderr, "XGetWindowAttributes(server.display, win = %ld, &attr)\n", win); if (XGetWindowAttributes(server.display, win, &attr) == False) { free(name); + XSelectInput(server.display, win, NoEventMask); + + // Dangerous actions end + XSync(server.display, False); + XSetErrorHandler(old); + return FALSE; } + + // Dangerous actions end + XSync(server.display, False); + XSetErrorHandler(old); + unsigned long mask = 0; XSetWindowAttributes set_attr; Visual *visual = server.visual;

@@ -606,6 +624,7 @@ set_attr.background_pixmap = ParentRelative;

mask = CWBackPixmap; } } + if (systray_profile) fprintf(stderr, "XCreateWindow(...)\n"); Window parent = XCreateWindow(server.display,

@@ -683,9 +702,6 @@ // Watch for the icon trying to resize itself / closing again

XSync(server.display, False); error = FALSE; XErrorHandler old = XSetErrorHandler(window_error_handler); - if (systray_profile) - fprintf(stderr, "XSelectInput(server.display, traywin->win, ...)\n"); - XSelectInput(server.display, traywin->win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask); XWithdrawWindow(server.display, traywin->win, server.screen); XReparentWindow(server.display, traywin->win, traywin->parent, 0, 0);