From 7f8b7f0a5620babd2924c074fa4674692c19ff43 Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Sat, 8 Jan 2022 02:01:14 -0500 Subject: [PATCH] cursor: Don't allow a DRAG action to start from a double-click By moving the cursor slightly after the second press (but before the second release) it was possible to accidentally trigger both a DOUBLECLICK and a DRAG action. Doing this on the titlebar would cause the window to maximize and then immediately unmaximize, which feels very "glitchy". As a simple fix, don't allow a press event that is triggering a DOUBLECLICK to also trigger a DRAG (or CLICK) on the following release event. Note: Openbox avoids the issue by processing DOUBLECLICK on the second release event. If the cursor moves before that, the DRAG wins out and the DOUBLECLICK isn't processed. --- src/cursor.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cursor.c b/src/cursor.c index d28b2db3..12d72981 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -542,7 +542,13 @@ handle_press_mousebinding(struct view *view, struct server *server, switch (mousebind->mouse_event) { case MOUSE_ACTION_DRAG: /* FALLTHROUGH */ case MOUSE_ACTION_CLICK: - mousebind->pressed_in_context = true; + /* + * DRAG and CLICK actions will be processed on + * the release event, unless the press event is + * counted as a DOUBLECLICK. + */ + if (!double_click) + mousebind->pressed_in_context = true; continue; case MOUSE_ACTION_DOUBLECLICK: if (!double_click)