sites

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

commit 0a741edd1c4ca77733f55b216ccd6469ebf72500
parent 2aa855189ac70f60149ae13a3d0767f62ebdf239
Author: prx <prx@ybad.name>
Date:   Wed,  4 Nov 2020 15:34:10 +0100

add patch to change item bg color when hovered

Diffstat:
Atools.suckless.org/dmenu/patches/mouse-support/dmenu-mousesupporthoverbgcol-5.0.diff | 184+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtools.suckless.org/dmenu/patches/mouse-support/index.md | 4++++
2 files changed, 188 insertions(+), 0 deletions(-)

diff --git a/tools.suckless.org/dmenu/patches/mouse-support/dmenu-mousesupporthoverbgcol-5.0.diff b/tools.suckless.org/dmenu/patches/mouse-support/dmenu-mousesupporthoverbgcol-5.0.diff @@ -0,0 +1,184 @@ +Only in .: config.h +diff -up ../dmenu-5.0/dmenu.c ./dmenu.c +--- ../dmenu-5.0/dmenu.c Wed Sep 2 18:37:07 2020 ++++ ./dmenu.c Wed Nov 4 15:25:27 2020 +@@ -501,6 +501,156 @@ draw: + } + + static void ++buttonpress(XEvent *e) ++{ ++ struct item *item; ++ XButtonPressedEvent *ev = &e->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; ++ /* disabled below, needs to be fixed */ ++ /* ++ 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 ++mousemove(XEvent *e) ++{ ++ struct item *item; ++ XPointerMovedEvent *ev = &e->xmotion; ++ int x = 0, y = 0, h = bh, w; ++ ++ if (lines > 0) { ++ w = mw - x; ++ for (item = curr; item != next; item = item->right) { ++ y += h; ++ if (ev->y >= y && ev->y <= (y + h)) { ++ sel = item; ++ calcoffsets(); ++ drawmenu(); ++ return; ++ } ++ } ++ } else if (matches) { ++ x += inputw; ++ w = TEXTW("<"); ++ 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) { ++ sel = item; ++ calcoffsets(); ++ drawmenu(); ++ return; ++ } ++ } ++ } ++} ++ ++static void + paste(void) + { + char *p, *q; +@@ -561,6 +711,12 @@ run(void) + break; + cleanup(); + exit(1); ++ case ButtonPress: ++ buttonpress(&ev); ++ break; ++ case MotionNotify: ++ mousemove(&ev); ++ break; + case Expose: + if (ev.xexpose.count == 0) + drw_map(drw, win, 0, 0, mw, mh); +@@ -658,7 +814,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 | PointerMotionMask; + win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0, + CopyFromParent, CopyFromParent, CopyFromParent, + CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); diff --git a/tools.suckless.org/dmenu/patches/mouse-support/index.md b/tools.suckless.org/dmenu/patches/mouse-support/index.md @@ -29,8 +29,12 @@ Download * [dmenu-mousesupport-4.7.diff](dmenu-mousesupport-4.7.diff) * [dmenu-mousesupport-4.6.diff](dmenu-mousesupport-4.6.diff) * [dmenu-mousesupport-20160702-3c91eed.diff](dmenu-mousesupport-20160702-3c91eed.diff) +* [dmenu-mousesupporthoverbgcol-5.0.diff](dmenu-mousesupporthoverbgcol-5.0.diff) + set selectbg color on hovered item. + Author ------ * Hiltjo Posthuma - <hiltjo@codemadness.org> * Xarchus (for multisel support). +* prx (for selectbg color on hovered item)