dwm-warp-6.1.diff (1328B)
1 diff -ruN dwm-6.1-orig/dwm.c dwm-6.1/dwm.c 2 --- dwm-6.1-orig/dwm.c 2015-11-08 16:39:37.000000000 -0600 3 +++ dwm-6.1/dwm.c 2015-12-14 19:17:19.656091228 -0600 4 @@ -227,6 +227,7 @@ 5 static void updatetitle(Client *c); 6 static void updatewmhints(Client *c); 7 static void view(const Arg *arg); 8 +static void warp(const Client *c); 9 static Client *wintoclient(Window w); 10 static Monitor *wintomon(Window w); 11 static int xerror(Display *dpy, XErrorEvent *ee); 12 @@ -840,6 +841,7 @@ 13 in gedit and anjuta */ 14 selmon = m; 15 focus(NULL); 16 + warp(selmon->sel); 17 } 18 19 void 20 @@ -1384,6 +1386,8 @@ 21 } 22 XSync(dpy, False); 23 while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); 24 + if (m == selmon && (m->tagset[m->seltags] & m->sel->tags)) 25 + warp(m->sel); 26 } 27 28 void 29 @@ -2040,6 +2044,28 @@ 30 arrange(selmon); 31 } 32 33 +void 34 +warp(const Client *c) 35 +{ 36 + int x, y; 37 + 38 + if (!c) { 39 + XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww/2, selmon->wy + selmon->wh/2); 40 + return; 41 + } 42 + 43 + if (!getrootptr(&x, &y) || 44 + (x > c->x - c->bw && 45 + y > c->y - c->bw && 46 + x < c->x + c->w + c->bw*2 && 47 + y < c->y + c->h + c->bw*2) || 48 + (y > c->mon->by && y < c->mon->by + bh) || 49 + (c->mon->topbar && !y)) 50 + return; 51 + 52 + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2); 53 +} 54 + 55 Client * 56 wintoclient(Window w) 57 {