mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
cursor: validate double-click against SSD part type
...because click on different parts of a client should not be interpreted as a double click. Previously only cursor-button and view were validated to be the same between clicks. This resulted in, for example a click on the client surface itself quickly followed by a click on the SSD titlebar being interpreted as a double-click on the titlebar. Fixes: #1657
This commit is contained in:
parent
21cad7d1a7
commit
d68376f2ac
1 changed files with 9 additions and 4 deletions
|
|
@ -855,8 +855,10 @@ handle_release_mousebinding(struct server *server,
|
|||
}
|
||||
|
||||
static bool
|
||||
is_double_click(long double_click_speed, uint32_t button, struct view *view)
|
||||
is_double_click(long double_click_speed, uint32_t button,
|
||||
struct cursor_context *ctx)
|
||||
{
|
||||
static enum ssd_part_type last_type;
|
||||
static uint32_t last_button;
|
||||
static struct view *last_view;
|
||||
static struct timespec last_click;
|
||||
|
|
@ -866,9 +868,11 @@ is_double_click(long double_click_speed, uint32_t button, struct view *view)
|
|||
long ms = (now.tv_sec - last_click.tv_sec) * 1000 +
|
||||
(now.tv_nsec - last_click.tv_nsec) / 1000000;
|
||||
last_click = now;
|
||||
if (last_button != button || last_view != view) {
|
||||
if (last_button != button || last_view != ctx->view
|
||||
|| last_type != ctx->type) {
|
||||
last_button = button;
|
||||
last_view = view;
|
||||
last_view = ctx->view;
|
||||
last_type = ctx->type;
|
||||
return false;
|
||||
}
|
||||
if (ms < double_click_speed && ms >= 0) {
|
||||
|
|
@ -878,6 +882,7 @@ is_double_click(long double_click_speed, uint32_t button, struct view *view)
|
|||
*/
|
||||
last_button = 0;
|
||||
last_view = NULL;
|
||||
last_type = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -888,7 +893,7 @@ handle_press_mousebinding(struct server *server, struct cursor_context *ctx,
|
|||
uint32_t button, uint32_t resize_edges)
|
||||
{
|
||||
struct mousebind *mousebind;
|
||||
bool double_click = is_double_click(rc.doubleclick_time, button, ctx->view);
|
||||
bool double_click = is_double_click(rc.doubleclick_time, button, ctx);
|
||||
bool consumed_by_frame_context = false;
|
||||
|
||||
uint32_t modifiers = wlr_keyboard_get_modifiers(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue