| 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); |