dwm-r1507-focusatom.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) 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, XA_CARDINAL, &real, &format, &n, &extra, &p);
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 & TAGMASK;
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", False);
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);