dwm-r1507-focusatom.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-r1507-focusatom.diff (2057B) | |
--- | |
1 diff -r 72e52c5333ef dwm.c | |
2 --- a/dwm.c Wed Nov 25 13:56:17 2009 +0000 | |
3 +++ b/dwm.c Thu Feb 25 23:41:45 2010 +0100 | |
4 @@ -177,6 +177,7 @@ | |
5 static void enternotify(XEvent *e); | |
6 static void expose(XEvent *e); | |
7 static void focus(Client *c); | |
8 +static void focusatomchange(void); | |
9 static void focusin(XEvent *e); | |
10 static void focusmon(const Arg *arg); | |
11 static void focusstack(const Arg *arg); | |
12 @@ -262,6 +263,7 @@ | |
13 [UnmapNotify] = unmapnotify | |
14 }; | |
15 static Atom wmatom[WMLast], netatom[NetLast]; | |
16 +static Atom focusatom; | |
17 static Bool otherwm; | |
18 static Bool running = True; | |
19 static Cursor cursor[CurLast]; | |
20 @@ -834,6 +836,33 @@ | |
21 } | |
22 | |
23 void | |
24 +focusatomchange() { | |
25 + int format, status; | |
26 + unsigned long n, extra; | |
27 + unsigned char *p = NULL; | |
28 + Atom real; | |
29 + Client *c; | |
30 + Monitor *m; | |
31 + Window *w; | |
32 + | |
33 + status = XGetWindowProperty(dpy, root, focusatom, 0L, 32L, True… | |
34 + if(status!=Success || n==0) return; | |
35 + if((w = (Window*)p) && (m = wintomon(*w)) && m != selmon) { | |
36 + unfocus(selmon->sel); | |
37 + selmon = m; | |
38 + } | |
39 + if((c = wintoclient(*w))) { | |
40 + if (!ISVISIBLE(c)) { | |
41 + c->mon->seltags ^= 1; /* toggle sel tagset */ | |
42 + c->mon->tagset[c->mon->seltags] = c->tags & TAG… | |
43 + } | |
44 + focus(c); | |
45 + arrange(c->mon); | |
46 + } | |
47 + XFree(p); | |
48 +} | |
49 + | |
50 +void | |
51 focusin(XEvent *e) { /* there are some broken focus acquiring clients */ | |
52 XFocusChangeEvent *ev = &e->xfocus; | |
53 | |
54 @@ -1264,6 +1293,8 @@ | |
55 | |
56 if((ev->window == root) && (ev->atom == XA_WM_NAME)) | |
57 updatestatus(); | |
58 + else if((ev->window == root) && (ev->atom == focusatom)) | |
59 + focusatomchange(); | |
60 else if(ev->state == PropertyDelete) | |
61 return; /* ignore */ | |
62 else if((c = wintoclient(ev->window))) { | |
63 @@ -1493,6 +1524,7 @@ | |
64 wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); | |
65 netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", Fals… | |
66 netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); | |
67 + focusatom = XInternAtom(dpy, "_DWM_FOCUS", False); | |
68 /* init cursors */ | |
69 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); | |
70 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |