From 0beeb9834a89505206a4a1c15d6663f0c8c52834 Mon Sep 17 00:00:00 2001 From: CoolnsX Date: Thu, 12 Aug 2021 22:10:28 +0530 Subject: [PATCH] add mouse support in dmenu --- dmenu-5.0/config.h | 29 ++++++++++ dmenu-5.0/dmenu | Bin 43488 -> 43488 bytes dmenu-5.0/dmenu.c | 117 +++++++++++++++++++++++++++++++++++++++++ dmenu-5.0/dmenu.c.orig | 23 +++++--- dmenu-5.0/dmenu.c.rej | 12 +++++ dmenu-5.0/dmenu.o | Bin 33376 -> 36360 bytes 6 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 dmenu-5.0/config.h create mode 100644 dmenu-5.0/dmenu.c.rej diff --git a/dmenu-5.0/config.h b/dmenu-5.0/config.h new file mode 100644 index 0000000..a4bbe5e --- /dev/null +++ b/dmenu-5.0/config.h @@ -0,0 +1,29 @@ +/* See LICENSE file for copyright and license details. */ +/* Default settings; can be overriden by command line. */ + +static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ +/* -fn option overrides fonts[0]; default X11 font or font set */ +static const char *fonts[] = { + "Comic Sans MS:size=12" +}; +static const char *prompt = NULL; /* -p option; prompt to the left of input field */ +static const char *colors[SchemeLast][2] = { + /* fg bg */ + [SchemeNorm] = { "#bbbbbb", "#222222" }, + [SchemeSel] = { "#eeeeee", "#5294e2" }, + [SchemeOut] = { "#000000", "#C000FF" }, +}; +/* -l option; if nonzero, dmenu uses vertical list with given number of lines */ +static unsigned int lines = 10; +/* -h option; minimum height of a menu line */ +static unsigned int lineheight = 0; +static unsigned int min_lineheight = 8; + +/* + * Characters not considered part of a word while deleting words + * for example: " /?\"&[]" + */ +static const char worddelimiters[] = " "; + +/* Size of the window border */ +static const unsigned int border_width = 4; diff --git a/dmenu-5.0/dmenu b/dmenu-5.0/dmenu index 3fc657e126c062a5a56c5e054b169459271e89be..d6e06a8c8a1aaa77d0b49574c3ed2e15e95e2bf4 100755 GIT binary patch delta 11023 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 hQ@&v=Tezuf%)kG=`t_#XFoy-ip6{{y@KO921? delta 10041 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 Vwq@xbutton; + int x = 0, y = 0, h = bh, w; + + if (ev->window != win) + return; + + /* right-click: exit */ + if (ev->button == Button3) + exit(1); + + if (prompt && *prompt) + x += promptw; + + /* input field */ + w = (lines > 0 || !matches) ? mw - x : inputw; + + /* left-click on input: clear input, + * NOTE: if there is no left-arrow the space for < is reserved so + * add that to the input width */ + if (ev->button == Button1 && + ((lines <= 0 && ev->x >= 0 && ev->x <= x + w + + ((!prev || !curr->left) ? TEXTW("<") : 0)) || + (lines > 0 && ev->y >= y && ev->y <= y + h))) { + insert(NULL, -cursor); + drawmenu(); + return; + } + /* middle-mouse click: paste selection */ + if (ev->button == Button2) { + XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY, + utf8, utf8, win, CurrentTime); + drawmenu(); + return; + } + /* scroll up */ + if (ev->button == Button4 && prev) { + sel = curr = prev; + calcoffsets(); + drawmenu(); + return; + } + /* scroll down */ + if (ev->button == Button5 && next) { + sel = curr = next; + calcoffsets(); + drawmenu(); + return; + } + if (ev->button != Button1) + return; + if (ev->state & ~ControlMask) + return; + if (lines > 0) { + /* vertical list: (ctrl)left-click on item */ + w = mw - x; + for (item = curr; item != next; item = item->right) { + y += h; + if (ev->y >= y && ev->y <= (y + h)) { + puts(item->text); + if (!(ev->state & ControlMask)) + exit(0); + sel = item; + if (sel) { + sel->out = 1; + drawmenu(); + } + return; + } + } + } else if (matches) { + /* left-click on left arrow */ + x += inputw; + w = TEXTW("<"); + if (prev && curr->left) { + if (ev->x >= x && ev->x <= x + w) { + sel = curr = prev; + calcoffsets(); + drawmenu(); + return; + } + } + /* horizontal list: (ctrl)left-click on item */ + for (item = curr; item != next; item = item->right) { + x += w; + w = MIN(TEXTW(item->text), mw - x - TEXTW(">")); + if (ev->x >= x && ev->x <= x + w) { + puts(item->text); + if (!(ev->state & ControlMask)) + exit(0); + sel = item; + if (sel) { + sel->out = 1; + drawmenu(); + } + return; + } + } + /* left-click on right arrow */ + w = TEXTW(">"); + x = mw - w; + if (next && ev->x >= x && ev->x <= x + w) { + sel = curr = next; + calcoffsets(); + drawmenu(); + return; + } + } +} + static void paste(void) { @@ -570,6 +683,9 @@ run(void) break; cleanup(); exit(1); + case ButtonPress: + buttonpress(&ev); + break; case Expose: if (ev.xexpose.count == 0) drw_map(drw, win, 0, 0, mw, mh); @@ -669,6 +785,7 @@ setup(void) swa.override_redirect = True; swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; + swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask | ButtonPressMask; win = XCreateWindow(dpy, parentwin, x, y, mw, mh, border_width, CopyFromParent, CopyFromParent, CopyFromParent, CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); diff --git a/dmenu-5.0/dmenu.c.orig b/dmenu-5.0/dmenu.c.orig index 5273e07..f7801e1 100644 --- a/dmenu-5.0/dmenu.c.orig +++ b/dmenu-5.0/dmenu.c.orig @@ -89,6 +89,15 @@ calcoffsets(void) break; } +static int +max_textw(void) +{ + int len = 0; + for (struct item *item = items; item && item->text; item++) + len = MAX(TEXTW(item->text), len); + return len; +} + static void cleanup(void) { @@ -612,6 +621,7 @@ setup(void) bh = MAX(bh,lineheight); /* make a menu line AT LEAST 'lineheight' tall */ lines = MAX(lines, 0); mh = (lines + 1) * bh; + promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; #ifdef XINERAMA i = 0; if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) { @@ -638,9 +648,9 @@ setup(void) if (INTERSECT(x, y, 1, 1, info[i])) break; - x = info[i].x_org; - y = info[i].y_org + (topbar ? 0 : info[i].height - mh); - mw = info[i].width; + mw = MIN(MAX(max_textw() + promptw, 300), info[i].width); + x = info[i].x_org + ((info[i].width - mw) / 2); + y = info[i].y_org + ((info[i].height - mh) / 2); XFree(info); } else #endif @@ -648,11 +658,10 @@ setup(void) if (!XGetWindowAttributes(dpy, parentwin, &wa)) die("could not get embedding window attributes: 0x%lx", parentwin); - x = 0; - y = topbar ? 0 : wa.height - mh; - mw = wa.width; + mw = MIN(MAX(max_textw() + promptw, 300), wa.width); + x = (wa.width - mw) / 2; + y = (wa.height - mh) / 2; } - promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; inputw = MIN(inputw, mw/3); match(); diff --git a/dmenu-5.0/dmenu.c.rej b/dmenu-5.0/dmenu.c.rej new file mode 100644 index 0000000..209c051 --- /dev/null +++ b/dmenu-5.0/dmenu.c.rej @@ -0,0 +1,12 @@ +--- dmenu.c ++++ dmenu.c +@@ -774,7 +890,8 @@ setup(void) + /* create menu window */ + swa.override_redirect = True; + swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; +- swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; ++ swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask | ++ ButtonPressMask; + win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0, + CopyFromParent, CopyFromParent, CopyFromParent, + CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); diff --git a/dmenu-5.0/dmenu.o b/dmenu-5.0/dmenu.o index f5b266c46ecfb34f01cbdfd5057ad0164bcd55fe..6f72cce00b4a452dabc6a3bcee823ccad595d310 100644 GIT binary patch delta 11357 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 G#{UBncqc9Z delta 8375 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 YRN~E>3lAk`WsGiiHD2HvUv9|!FS=41$p8QV