tmake ewmh dialog windows float - dwm - [fork] customized build of dwm, the dyn… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 8262d9e663a98ab74b938bb5cdf0ddfd733bc5df | |
parent 90af1ced3c634683ec4c0e51c5f1e69461a9192a | |
Author: Christoph Lohmann <[email protected]> | |
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(-) | |
--- | |
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|PropertyChangeMas… | |
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"… | |
+ netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", Fal… | |
+ netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE… | |
/* 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 && … | |
+ wtype = *(Atom *)p; | |
+ XFree(p); | |
+ | |
+ if(wtype == netatom[NetWMWindowTypeDialog]) | |
+ c->isfloating = True; | |
+ } | |
+} | |
+ | |
+void | |
updatewmhints(Client *c) { | |
XWMHints *wmh; | |