Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-tapresize-20200819-f04cac6.diff - sites - public wiki contents of suckless.…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-tapresize-20200819-f04cac6.diff (4885B)
---
1 From d781863fb98f066d1ad98b573796d0880b48af8f Mon Sep 17 00:00:00 2001
2 From: verschmelzen <[email protected]>
3 Date: Wed, 19 Aug 2020 00:05:34 +0300
4 Subject: [PATCH] Resize windows with touchpad two-finger scroll
5
6 This patch allows to resize windows using mouse scroll events. Since
7 there is no right-click-tap-to-drag I found this patch to be the only
8 way to be able to both move and resize windows with touchpad.
9 ---
10 config.def.h | 16 ++++++++++++++++
11 dwm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
12 2 files changed, 62 insertions(+)
13
14 diff --git a/config.def.h b/config.def.h
15 index 1c0b587..d7d208f 100644
16 --- a/config.def.h
17 +++ b/config.def.h
18 @@ -36,6 +36,9 @@ static const float mfact = 0.55; /* factor of mast…
19 static const int nmaster = 1; /* number of clients in master are…
20 static const int resizehints = 1; /* 1 means respect size hints in t…
21
22 +/* mouse scroll resize */
23 +static const int scrollsensetivity = 30; /* 1 means resize window by 1 …
24 +
25 static const Layout layouts[] = {
26 /* symbol arrange function */
27 { "[]=", tile }, /* first entry is default */
28 @@ -96,6 +99,15 @@ static Key keys[] = {
29 { MODKEY|ShiftMask, XK_q, quit, {0} …
30 };
31
32 +/* resizemousescroll direction argument list */
33 +static const int scrollargs[][2] = {
34 + /* width change height change */
35 + { +scrollsensetivity, 0 },
36 + { -scrollsensetivity, 0 },
37 + { 0, +scrollsensetivi…
38 + { 0, -scrollsensetivity…
39 +};
40 +
41 /* button definitions */
42 /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, Clk…
43 static Button buttons[] = {
44 @@ -107,6 +119,10 @@ static Button buttons[] = {
45 { ClkClientWin, MODKEY, Button1, movemou…
46 { ClkClientWin, MODKEY, Button2, togglef…
47 { ClkClientWin, MODKEY, Button3, resizem…
48 + { ClkClientWin, MODKEY, Button4, resizem…
49 + { ClkClientWin, MODKEY, Button5, resizem…
50 + { ClkClientWin, MODKEY, Button6, resizem…
51 + { ClkClientWin, MODKEY, Button7, resizem…
52 { ClkTagBar, 0, Button1, view, …
53 { ClkTagBar, 0, Button3, togglev…
54 { ClkTagBar, MODKEY, Button1, tag, …
55 diff --git a/dwm.c b/dwm.c
56 index 9fd0286..30f14db 100644
57 --- a/dwm.c
58 +++ b/dwm.c
59 @@ -57,6 +57,12 @@
60 #define TAGMASK ((1 << LENGTH(tags)) - 1)
61 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
62
63 +/* Undefined in X11/X.h buttons that are actualy exist and correspond to
64 + * horizontal scroll
65 + */
66 +#define Button6 6
67 +#define Button7 7
68 +
69 /* enums */
70 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
71 enum { SchemeNorm, SchemeSel }; /* color schemes */
72 @@ -192,6 +198,7 @@ static Monitor *recttomon(int x, int y, int w, int h…
73 static void resize(Client *c, int x, int y, int w, int h, int interact);
74 static void resizeclient(Client *c, int x, int y, int w, int h);
75 static void resizemouse(const Arg *arg);
76 +static void resizemousescroll(const Arg *arg);
77 static void restack(Monitor *m);
78 static void run(void);
79 static void scan(void);
80 @@ -1345,6 +1352,45 @@ resizemouse(const Arg *arg)
81 }
82 }
83
84 +void
85 +resizemousescroll(const Arg *arg)
86 +{
87 + int nw, nh;
88 + Client *c;
89 + Monitor *m;
90 + XEvent ev;
91 + int dw = *((int*)arg->v + 1);
92 + int dh = *(int*)arg->v;
93 +
94 + if (!(c = selmon->sel))
95 + return;
96 + if (c->isfullscreen) /* no support resizing fullscreen windows …
97 + return;
98 + restack(selmon);
99 + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, Gr…
100 + None, cursor[CurResize]->cursor, CurrentTime) != GrabSu…
101 + return;
102 + nw = MAX(c->w + dw, 1);
103 + nh = MAX(c->h + dh, 1);
104 + if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon-…
105 + && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->…
106 + {
107 + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
108 + && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
109 + togglefloating(NULL);
110 + }
111 + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
112 + resize(c, c->x, c->y, nw, nh, 1);
113 + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c…
114 + XUngrabPointer(dpy, CurrentTime);
115 + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
116 + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
117 + sendmon(c, m);
118 + selmon = m;
119 + focus(NULL);
120 + }
121 +}
122 +
123 void
124 restack(Monitor *m)
125 {
126 --
127 2.28.0
128
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.