all repos — tint2 @ d7914dd0ad86946a26f2f9aa93cb3273546d54b2

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

*fix* issue 272
*fix* correct transient window handling (f.ex window3 is transient for window2 and window2 transient for window1 and window1 is already in tint2, so 
window3 will not be added)


git-svn-id: http://tint2.googlecode.com/svn/trunk@542 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
Andreas.Fink85 Andreas.Fink85@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

d7914dd0ad86946a26f2f9aa93cb3273546d54b2

parent

95b35aefc05622689784e5c1a7a016795df5f064

3 files changed, 14 insertions(+), 7 deletions(-)

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

@@ -374,9 +374,11 @@ XWindowAttributes attr;

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;

@@ -387,7 +389,7 @@ set_attr.background_pixmap = ParentRelative;

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);
M src/taskbar/task.csrc/taskbar/task.c

@@ -444,9 +444,11 @@ Window w1 = window_get_active();

//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); } }
M src/util/window.csrc/util/window.c

@@ -87,9 +87,12 @@ XFree(at);

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);