sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

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  {