[hackers] [dwm] make ewmh dialog windows float || Christoph Lohmann

From: <hg_AT_suckless.org>
Date: Wed, 2 Nov 2011 13:02:51 +0100 (CET)

changeset: 1584:1228e3d45d25
tag: tip
user: Christoph Lohmann <20h_AT_r-36.net>
date: Wed Nov 02 12:01:28 2011 +0000
files: dwm.c
description:
make ewmh dialog windows float


diff -r 904e923827cb -r 1228e3d45d25 dwm.c
--- a/dwm.c Mon Oct 31 20:09:27 2011 +0100
+++ b/dwm.c Wed Nov 02 12:01:28 2011 +0000
_AT_@ -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 */
_AT_@ -237,6 +238,7 @@
 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);
_AT_@ -1152,6 +1154,7 @@
         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);
_AT_@ -1308,6 +1311,8 @@
                         if(c == c->mon->sel)
                                 drawbar(c->mon);
                 }
+ if(ev->atom == netatom[NetWMWindowType])
+ updatewindowtype(c);
         }
 }
 
_AT_@ -1562,6 +1567,8 @@
         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);
_AT_@ -1967,6 +1974,25 @@
 }
 
 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;
 
Received on Wed Nov 02 2011 - 13:02:51 CET

This archive was generated by hypermail 2.3.0 : Wed Nov 02 2011 - 13:12:05 CET