]> Dogcows Code - chaz/tint2/commitdiff
*fix* issue 272
authorAndreas Fink <andreas.fink85@googlemail.com>
Wed, 18 Aug 2010 12:32:08 +0000 (12:32 +0000)
committerAndreas Fink <andreas.fink85@googlemail.com>
Wed, 18 Aug 2010 12:32:08 +0000 (12:32 +0000)
*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)

src/systray/systraybar.c
src/taskbar/task.c
src/util/window.c

index a6fec3ae56c24d9de722c69f157db26851e19c55..5a380c192302ebc3c7f5079d57374588f00eda52 100644 (file)
@@ -374,9 +374,11 @@ gboolean add_icon(Window id)
        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 @@ gboolean add_icon(Window id)
                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);
index 921f067ad4d9dd46ee4790e821281024b3a87f80..af4c369396c87e19c53f7a12e11d2e91576e9ab8 100644 (file)
@@ -444,9 +444,11 @@ void active_task()
        //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);
        }
 }
index f4ef6a04ac306277e46d6561a7cda780c150ef02..dc38d24f3ef84c0e46f59070243c78cfbf3dd2f5 100644 (file)
@@ -87,9 +87,12 @@ int window_is_hidden (Window win)
                        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);
This page took 0.030321 seconds and 4 git commands to generate.