Correct handling of mouse up events (don't ignore all but the last
authornicm <nicm@openbsd.org>
Wed, 10 Apr 2024 07:29:15 +0000 (07:29 +0000)
committernicm <nicm@openbsd.org>
Wed, 10 Apr 2024 07:29:15 +0000 (07:29 +0000)
released button), and always process down event for double click. From
Rudy Dellomas III in GitHub issue 3919.

usr.bin/tmux/server-client.c

index 01e3bd1..6ed62c4 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.404 2024/01/16 13:09:11 claudio Exp $ */
+/* $OpenBSD: server-client.c,v 1.405 2024/04/10 07:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -626,6 +626,8 @@ server_client_check_mouse(struct client *c, struct key_event *event)
        } else if (MOUSE_RELEASE(m->b)) {
                type = UP;
                x = m->x, y = m->y, b = m->lb;
+               if (m->sgr_type == 'm')
+                       b = m->sgr_b;
                log_debug("up at %u,%u", x, y);
        } else {
                if (c->flags & CLIENT_DOUBLECLICK) {
@@ -646,7 +648,10 @@ server_client_check_mouse(struct client *c, struct key_event *event)
                                log_debug("triple-click at %u,%u", x, y);
                                goto have_event;
                        }
-               } else {
+               }
+
+               /* DOWN is the only remaining event type. */
+               if (type == NOTYPE) {
                        type = DOWN;
                        x = m->x, y = m->y, b = m->b;
                        log_debug("down at %u,%u", x, y);