Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-mousesupport-4.7.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-mousesupport-4.7.diff (3813B)
---
1 From 27f62488ceb466f73f682f5104825c60712bb5ff Mon Sep 17 00:00:00 2001
2 From: Hiltjo Posthuma <[email protected]>
3 Date: Fri, 9 Jun 2017 13:00:06 +0200
4 Subject: [PATCH] dmenu mouse support
5
6 ---
7 dmenu.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++…
8 1 file changed, 118 insertions(+), 1 deletion(-)
9
10 diff --git a/dmenu.c b/dmenu.c
11 index d605ab4..0c8500b 100644
12 --- a/dmenu.c
13 +++ b/dmenu.c
14 @@ -459,6 +459,119 @@ keypress(XKeyEvent *ev)
15 }
16
17 static void
18 +buttonpress(XEvent *e)
19 +{
20 + struct item *item;
21 + XButtonPressedEvent *ev = &e->xbutton;
22 + int x = 0, y = 0, h = bh, w;
23 +
24 + if (ev->window != win)
25 + return;
26 +
27 + /* right-click: exit */
28 + if (ev->button == Button3)
29 + exit(1);
30 +
31 + if (prompt && *prompt)
32 + x += promptw;
33 +
34 + /* input field */
35 + w = (lines > 0 || !matches) ? mw - x : inputw;
36 +
37 + /* left-click on input: clear input,
38 + * NOTE: if there is no left-arrow the space for < is reserved …
39 + * add that to the input width */
40 + if (ev->button == Button1 &&
41 + ((lines <= 0 && ev->x >= 0 && ev->x <= x + w +
42 + ((!prev || !curr->left) ? TEXTW("<") : 0)) ||
43 + (lines > 0 && ev->y >= y && ev->y <= y + h))) {
44 + insert(NULL, -cursor);
45 + drawmenu();
46 + return;
47 + }
48 + /* middle-mouse click: paste selection */
49 + if (ev->button == Button2) {
50 + XConvertSelection(dpy, (ev->state & ShiftMask) ? clip :…
51 + utf8, utf8, win, CurrentTime);
52 + drawmenu();
53 + return;
54 + }
55 + /* scroll up */
56 + if (ev->button == Button4 && prev) {
57 + sel = curr = prev;
58 + calcoffsets();
59 + drawmenu();
60 + return;
61 + }
62 + /* scroll down */
63 + if (ev->button == Button5 && next) {
64 + sel = curr = next;
65 + calcoffsets();
66 + drawmenu();
67 + return;
68 + }
69 + if (ev->button != Button1)
70 + return;
71 + if (ev->state & ~ControlMask)
72 + return;
73 + if (lines > 0) {
74 + /* vertical list: (ctrl)left-click on item */
75 + w = mw - x;
76 + for (item = curr; item != next; item = item->right) {
77 + y += h;
78 + if (ev->y >= y && ev->y <= (y + h)) {
79 + puts(item->text);
80 + if (!(ev->state & ControlMask))
81 + exit(0);
82 + sel = item;
83 + if (sel) {
84 + sel->out = 1;
85 + drawmenu();
86 + }
87 + return;
88 + }
89 + }
90 + } else if (matches) {
91 + /* left-click on left arrow */
92 + x += inputw;
93 + w = TEXTW("<");
94 + if (prev && curr->left) {
95 + if (ev->x >= x && ev->x <= x + w) {
96 + sel = curr = prev;
97 + calcoffsets();
98 + drawmenu();
99 + return;
100 + }
101 + }
102 + /* horizontal list: (ctrl)left-click on item */
103 + for (item = curr; item != next; item = item->right) {
104 + x += w;
105 + w = MIN(TEXTW(item->text), mw - x - TEXTW(">"));
106 + if (ev->x >= x && ev->x <= x + w) {
107 + puts(item->text);
108 + if (!(ev->state & ControlMask))
109 + exit(0);
110 + sel = item;
111 + if (sel) {
112 + sel->out = 1;
113 + drawmenu();
114 + }
115 + return;
116 + }
117 + }
118 + /* left-click on right arrow */
119 + w = TEXTW(">");
120 + x = mw - w;
121 + if (next && ev->x >= x && ev->x <= x + w) {
122 + sel = curr = next;
123 + calcoffsets();
124 + drawmenu();
125 + return;
126 + }
127 + }
128 +}
129 +
130 +static void
131 paste(void)
132 {
133 char *p, *q;
134 @@ -512,6 +625,9 @@ run(void)
135 if (XFilterEvent(&ev, win))
136 continue;
137 switch(ev.type) {
138 + case ButtonPress:
139 + buttonpress(&ev);
140 + break;
141 case Expose:
142 if (ev.xexpose.count == 0)
143 drw_map(drw, win, 0, 0, mw, mh);
144 @@ -609,7 +725,8 @@ setup(void)
145 /* create menu window */
146 swa.override_redirect = True;
147 swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
148 - swa.event_mask = ExposureMask | KeyPressMask | VisibilityChange…
149 + swa.event_mask = ExposureMask | KeyPressMask | VisibilityChange…
150 + ButtonPressMask;
151 win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
152 CopyFromParent, CopyFromParent, CopyFromPar…
153 CWOverrideRedirect | CWBackPixel | CWEventM…
154 --
155 2.12.2
156
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.