aboutsummaryrefslogtreecommitdiff
path: root/menu.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2020-11-03 08:35:52 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2020-11-03 08:35:52 +0000
commitba9962b568dd111455963c88b0458cf8847c9690 (patch)
treea13a66498befbd75237a3a7a3869ccd2c52b8452 /menu.c
parent733abfcfc5b05cb3e1f2cf08f00a9325c6f6fa04 (diff)
parentff53eed402abb146096673963da39b5036a5c861 (diff)
downloadrtmux-ba9962b568dd111455963c88b0458cf8847c9690.tar.gz
rtmux-ba9962b568dd111455963c88b0458cf8847c9690.tar.bz2
rtmux-ba9962b568dd111455963c88b0458cf8847c9690.zip
Merge branch 'master' into 3.2-rc
Diffstat (limited to 'menu.c')
-rw-r--r--menu.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/menu.c b/menu.c
index 4fcf660a..48c9ed2f 100644
--- a/menu.c
+++ b/menu.c
@@ -203,16 +203,28 @@ menu_key_cb(struct client *c, struct key_event *event)
m->x > md->px + 4 + menu->width ||
m->y < md->py + 1 ||
m->y > md->py + 1 + count - 1) {
- if (MOUSE_RELEASE(m->b))
- return (1);
+ if (~md->flags & MENU_STAYOPEN) {
+ if (MOUSE_RELEASE(m->b))
+ return (1);
+ } else {
+ if (!MOUSE_RELEASE(m->b) &&
+ MOUSE_WHEEL(m->b) == 0 &&
+ !MOUSE_DRAG(m->b))
+ return (1);
+ }
if (md->choice != -1) {
md->choice = -1;
c->flags |= CLIENT_REDRAWOVERLAY;
}
return (0);
}
- if (MOUSE_RELEASE(m->b))
- goto chosen;
+ if (~md->flags & MENU_STAYOPEN) {
+ if (MOUSE_RELEASE(m->b))
+ goto chosen;
+ } else {
+ if (MOUSE_WHEEL(m->b) == 0 && !MOUSE_DRAG(m->b))
+ goto chosen;
+ }
md->choice = m->y - (md->py + 1);
if (md->choice != old)
c->flags |= CLIENT_REDRAWOVERLAY;
@@ -303,8 +315,11 @@ chosen:
if (md->choice == -1)
return (1);
item = &menu->items[md->choice];
- if (item->name == NULL || *item->name == '-')
+ if (item->name == NULL || *item->name == '-') {
+ if (md->flags & MENU_STAYOPEN)
+ return (0);
return (1);
+ }
if (md->cb != NULL) {
md->cb(md->menu, md->choice, item->key, md->data);
md->cb = NULL;