=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/menu.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- src/usr.bin/tmux/menu.c 2020/09/16 18:37:55 1.31 +++ src/usr.bin/tmux/menu.c 2020/10/30 08:55:56 1.32 @@ -1,4 +1,4 @@ -/* $OpenBSD: menu.c,v 1.31 2020/09/16 18:37:55 nicm Exp $ */ +/* $OpenBSD: menu.c,v 1.32 2020/10/30 08:55:56 nicm Exp $ */ /* * Copyright (c) 2019 Nicholas Marriott @@ -203,16 +203,28 @@ 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,6 +315,8 @@ if (md->choice == -1) return (1); item = &menu->items[md->choice]; + if ((md->flags & MENU_STAYOPEN) && item->name == NULL) + return (0); if (item->name == NULL || *item->name == '-') return (1); if (md->cb != NULL) {