t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 8262d9e663a98ab74b938bb5cdf0ddfd733bc5df
   DIR parent 90af1ced3c634683ec4c0e51c5f1e69461a9192a
   URI Author: Christoph Lohmann <20h@r-36.net>
       Date:   Wed,  2 Nov 2011 12:01:28 +0000
       
       make ewmh dialog windows float
       Diffstat:
         M dwm.c                               |      28 +++++++++++++++++++++++++++-
       
       1 file changed, 27 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -58,7 +58,8 @@
        enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
        enum { ColBorder, ColFG, ColBG, ColLast };              /* color */
        enum { NetSupported, NetWMName, NetWMState,
       -       NetWMFullscreen, NetActiveWindow, NetLast };     /* EWMH atoms */
       +       NetWMFullscreen, NetActiveWindow, NetWMWindowType,
       +       NetWMWindowTypeDialog, NetLast };     /* EWMH atoms */
        enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
        enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
               ClkClientWin, ClkRootWin, ClkLast };             /* clicks */
       t@@ -237,6 +238,7 @@ static void updatebars(void);
        static void updatenumlockmask(void);
        static void updatesizehints(Client *c);
        static void updatestatus(void);
       +static void updatewindowtype(Client *c);
        static void updatetitle(Client *c);
        static void updatewmhints(Client *c);
        static void view(const Arg *arg);
       t@@ -1152,6 +1154,7 @@ manage(Window w, XWindowAttributes *wa) {
                XConfigureWindow(dpy, w, CWBorderWidth, &wc);
                XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
                configure(c); /* propagates border_width, if size doesn't change */
       +        updatewindowtype(c);
                updatesizehints(c);
                updatewmhints(c);
                XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
       t@@ -1308,6 +1311,8 @@ propertynotify(XEvent *e) {
                                if(c == c->mon->sel)
                                        drawbar(c->mon);
                        }
       +                if(ev->atom == netatom[NetWMWindowType])
       +                        updatewindowtype(c);
                }
        }
        
       t@@ -1562,6 +1567,8 @@ setup(void) {
                netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
                netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
                netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
       +        netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
       +        netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
                /* init cursors */
                cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
                cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
       t@@ -1967,6 +1974,25 @@ updatestatus(void) {
        }
        
        void
       +updatewindowtype(Client *c)
       +{
       +        Atom wtype, real;
       +        int format;
       +        unsigned long n, extra;
       +        unsigned char *p = NULL;
       +
       +        if(XGetWindowProperty(dpy, c->win, netatom[NetWMWindowType], 0L,
       +                              sizeof(Atom), False, XA_ATOM, &real, &format,
       +                              &n, &extra, (unsigned char **)&p) == Success && p) {
       +                wtype = *(Atom *)p;
       +                XFree(p);
       +
       +                if(wtype == netatom[NetWMWindowTypeDialog])
       +                        c->isfloating = True;
       +        }
       +}
       +
       +void
        updatewmhints(Client *c) {
                XWMHints *wmh;