X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Fwindow.c;h=285d525d8e15edbddf23964978ddbd724cafd4a7;hb=5f2ac42c8d842e3592e828b9a9f736e84144be64;hp=eaab1b7980ed6673bffabc43b554a4cccf5f2598;hpb=c75a021fbda4df34dc017369f877f018855e0609;p=chaz%2Ftint2 diff --git a/src/util/window.c b/src/util/window.c index eaab1b7..285d525 100644 --- a/src/util/window.c +++ b/src/util/window.c @@ -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,21 @@ 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)); + if (IconicState == get_property32(win, server.atom.WM_STATE, server.atom.WM_STATE)) { + // openbox sets on shaded windows the IconicState, however we do not consider these windows iconified + 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_SHADED) { + XFree(at); + return 0; + } + } + XFree(at); + return 1; + } + return 0; }