]> Dogcows Code - chaz/tint2/blobdiff - src/util/window.c
*fix* hopefully fixed issue 212 (thx to l_man for testing)
[chaz/tint2] / src / util / window.c
index eaab1b7980ed6673bffabc43b554a4cccf5f2598..06ab09359054e334aaedd5b100482a4e7d0072b0 100644 (file)
@@ -33,6 +33,7 @@
 #include "window.h"
 #include "server.h"
 #include "panel.h"
+#include "taskbar.h"
 
 
 
@@ -86,8 +87,11 @@ int window_is_hidden (Window win)
                        return 1;
                }
                if (at[i] == server.atom._NET_WM_STATE_MODAL) {
-                       XFree(at);
-                       return 1;
+                       // do not add modal windows if the transient window is already in the taskbar
+                       if ( XGetTransientForHint(server.dsp, win, &window) && task_get_tasks(window) ) {
+                               XFree(at);
+                               return 1;
+                       }
                }
        }
        XFree(at);
@@ -142,7 +146,19 @@ int window_get_monitor (Window win)
 
 int window_is_iconified (Window win)
 {
-       return (IconicState == get_property32(win, server.atom.WM_STATE, server.atom.WM_STATE));
+       // EWMH specification : minimization of windows use _NET_WM_STATE_HIDDEN.
+       // WM_STATE is not accurate for shaded window and in multi_desktop mode.
+       Atom *at;
+       int count, i;
+       at = server_get_property (win, server.atom._NET_WM_STATE, XA_ATOM, &count);
+       for (i = 0; i < count; i++) {
+               if (at[i] == server.atom._NET_WM_STATE_HIDDEN) {
+                       XFree(at);
+                       return 1;
+               }
+       }
+       XFree(at);
+       return 0;
 }
 
 
This page took 0.021962 seconds and 4 git commands to generate.