input: CSD buttons are now triggered when releasing the mouse button

This is how most UIs work.

Note that we (at least on River) don't get any surface enter/leave
events while a button is held. This means we can't detect if the user
pressed the mouse button while on a CSD button, but then moves the
mouse outside. Releasing the mouse button will still activate the CSD
button.

Closes #1787
This commit is contained in:
Daniel Eklöf 2024-08-02 17:12:12 +02:00
parent 803f712332
commit 7ec9ca2b95
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 19 additions and 3 deletions

17
input.c
View file

@ -2577,12 +2577,19 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
}
case TERM_SURF_BUTTON_MINIMIZE:
if (button == BTN_LEFT && state == WL_POINTER_BUTTON_STATE_PRESSED)
if (button == BTN_LEFT &&
term->active_surface == TERM_SURF_BUTTON_MINIMIZE &&
state == WL_POINTER_BUTTON_STATE_RELEASED)
{
xdg_toplevel_set_minimized(term->window->xdg_toplevel);
}
break;
case TERM_SURF_BUTTON_MAXIMIZE:
if (button == BTN_LEFT && state == WL_POINTER_BUTTON_STATE_PRESSED) {
if (button == BTN_LEFT &&
term->active_surface == TERM_SURF_BUTTON_MAXIMIZE &&
state == WL_POINTER_BUTTON_STATE_RELEASED)
{
if (term->window->is_maximized)
xdg_toplevel_unset_maximized(term->window->xdg_toplevel);
else
@ -2591,8 +2598,12 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
break;
case TERM_SURF_BUTTON_CLOSE:
if (button == BTN_LEFT && state == WL_POINTER_BUTTON_STATE_PRESSED)
if (button == BTN_LEFT &&
term->active_surface == TERM_SURF_BUTTON_CLOSE &&
state == WL_POINTER_BUTTON_STATE_RELEASED)
{
term_shutdown(term);
}
break;
case TERM_SURF_GRID: {