if ( XGetWindowAttributes(server.dsp, id, &attr) == False ) return FALSE;
unsigned long mask = 0;
XSetWindowAttributes set_attr;
+ Visual* visual = server.visual;
//printf("icon with depth: %d, width %d, height %d\n", attr.depth, attr.width, attr.height);
printf("icon with depth: %d\n", attr.depth);
if (attr.depth != server.depth || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0) {
+ visual = attr.visual;
set_attr.colormap = attr.colormap;
set_attr.background_pixel = 0;
set_attr.border_pixel = 0;
mask = CWBackPixmap;
}
Window parent_window;
- parent_window = XCreateWindow(server.dsp, panel->main_win, 0, 0, 30, 30, 0, attr.depth, InputOutput, attr.visual, mask, &set_attr);
+ parent_window = XCreateWindow(server.dsp, panel->main_win, 0, 0, 30, 30, 0, attr.depth, InputOutput, visual, mask, &set_attr);
old = XSetErrorHandler(window_error_handler);
XReparentWindow(server.dsp, id, parent_window, 0, 0);
XSync(server.dsp, False);
//printf("Change active task %ld\n", w1);
if (w1) {
- Window w2;
- if (XGetTransientForHint(server.dsp, w1, &w2) != 0)
- if (w2 && !task_get_tasks(w1)) w1 = w2;
+ if (!task_get_tasks(w1)) {
+ Window w2;
+ while (XGetTransientForHint(server.dsp, w1, &w2))
+ w1 = w2;
+ }
set_task_state((task_active = task_get_task(w1)), TASK_ACTIVE);
}
}
return 1;
}
// do not add transient_for windows if the transient window is already in the taskbar
- if ( XGetTransientForHint(server.dsp, win, &window) && task_get_tasks(window) ) {
- XFree(at);
- return 1;
+ window=win;
+ while ( XGetTransientForHint(server.dsp, window, &window) ) {
+ if ( task_get_tasks(window) ) {
+ XFree(at);
+ return 1;
+ }
}
}
XFree(at);