diff options
author | Romain Gonçalves <me@rgoncalves.se> | 2021-12-15 21:25:09 +0100 |
---|---|---|
committer | Romain Gonçalves <me@rgoncalves.se> | 2023-06-05 18:16:06 +0200 |
commit | 5541600968ecbc9aefa1911e3a727bc75f4897aa (patch) | |
tree | 0390e36cccc6359b7b68976985ae2b74239c25c5 /patches/dwm-warp-6.2.diff | |
parent | 1c8451518856909f01b4577e205994678f481ea5 (diff) | |
download | dwm-5541600968ecbc9aefa1911e3a727bc75f4897aa.tar.gz |
patches: Add warp for automatically moving mouse
Diffstat (limited to 'patches/dwm-warp-6.2.diff')
-rw-r--r-- | patches/dwm-warp-6.2.diff | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/patches/dwm-warp-6.2.diff b/patches/dwm-warp-6.2.diff new file mode 100644 index 0000000..813c41d --- /dev/null +++ b/patches/dwm-warp-6.2.diff @@ -0,0 +1,58 @@ +diff --git a/dwm.c b/dwm.c +index 4465af1..bf74f60 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -227,6 +227,7 @@ static void updatetitle(Client *c); + static void updatewindowtype(Client *c); + static void updatewmhints(Client *c); + static void view(const Arg *arg); ++static void warp(const Client *c); + static Client *wintoclient(Window w); + static Monitor *wintomon(Window w); + static int xerror(Display *dpy, XErrorEvent *ee); +@@ -827,6 +828,7 @@ focusmon(const Arg *arg) + unfocus(selmon->sel, 0); + selmon = m; + focus(NULL); ++ warp(selmon->sel); + } + + void +@@ -1367,6 +1369,8 @@ restack(Monitor *m) + } + XSync(dpy, False); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); ++ if (m == selmon && (m->tagset[m->seltags] & m->sel->tags) && selmon->lt[selmon->sellt] != &layouts[2]) ++ warp(m->sel); + } + + void +@@ -2044,6 +2048,28 @@ view(const Arg *arg) + arrange(selmon); + } + ++void ++warp(const Client *c) ++{ ++ int x, y; ++ ++ if (!c) { ++ XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww/2, selmon->wy + selmon->wh/2); ++ return; ++ } ++ ++ if (!getrootptr(&x, &y) || ++ (x > c->x - c->bw && ++ y > c->y - c->bw && ++ x < c->x + c->w + c->bw*2 && ++ y < c->y + c->h + c->bw*2) || ++ (y > c->mon->by && y < c->mon->by + bh) || ++ (c->mon->topbar && !y)) ++ return; ++ ++ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2); ++} ++ + Client * + wintoclient(Window w) + { |