From 97846ae45b06600ed5bf4fb54daada583fc48d59 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Sun, 26 Dec 2021 22:09:41 +0000 Subject: [PATCH] cursor: add cursor_update_focus() ...and call it from desktop_move_to_front() in order force an enter event on the surface below the cursor when cycling views. Fixes #162 and #225 Inspired by PR #164 - just restructured it a bit. Suggested-by: @bi4k8 Co-authored-by: Consolatis <35009135+Consolatis@users.noreply.github.com> --- include/labwc.h | 8 ++++++++ src/cursor.c | 15 ++++++++++++++- src/desktop.c | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/labwc.h b/include/labwc.h index 07909228..10a8e58a 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -483,6 +483,14 @@ void cursor_rebase(struct seat *seat, uint32_t time_msec); */ void cursor_set(struct seat *seat, const char *cursor_name); +/** + * cursor_update_focus - update cursor focus + * @server - server + * Use it to force an update of the cursor icon and to send an enter event + * to the surface below the cursor. + */ +void cursor_update_focus(struct server *server); + void cursor_init(struct seat *seat); void cursor_finish(struct seat *seat); diff --git a/src/cursor.c b/src/cursor.c index 29e8eb5f..47d4b58e 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -321,6 +321,20 @@ process_cursor_motion(struct server *server, uint32_t time) } } +static uint32_t +msec(const struct timespec *t) +{ + return t->tv_sec * 1000 + t->tv_nsec / 1000000; +} + +void +cursor_update_focus(struct server *server) +{ + struct timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + cursor_rebase(&server->seat, msec(&now)); +} + void start_drag(struct wl_listener *listener, void *data) { @@ -750,7 +764,6 @@ cursor_axis(struct wl_listener *listener, void *data) wlr_idle_notify_activity(seat->wlr_idle, seat->seat); /* Notify the client with pointer focus of the axis event. */ - cursor_rebase(seat, event->time_msec); wlr_seat_pointer_notify_axis(seat->seat, event->time_msec, event->orientation, event->delta, event->delta_discrete, event->source); diff --git a/src/desktop.c b/src/desktop.c index d8768de5..4a69a7c3 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -63,6 +63,7 @@ desktop_move_to_front(struct view *view) #if HAVE_XWAYLAND move_xwayland_sub_views_to_front(view); #endif + cursor_update_focus(view->server); } static void