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.
This commit is contained in:
John Lindgren 2022-01-08 02:01:14 -05:00 committed by Johan Malm
parent ae43d4b9d1
commit 7f8b7f0a56

View file

@ -542,6 +542,12 @@ handle_press_mousebinding(struct view *view, struct server *server,
switch (mousebind->mouse_event) { switch (mousebind->mouse_event) {
case MOUSE_ACTION_DRAG: /* FALLTHROUGH */ case MOUSE_ACTION_DRAG: /* FALLTHROUGH */
case MOUSE_ACTION_CLICK: case MOUSE_ACTION_CLICK:
/*
* 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; mousebind->pressed_in_context = true;
continue; continue;
case MOUSE_ACTION_DOUBLECLICK: case MOUSE_ACTION_DOUBLECLICK: