mirror of
https://github.com/labwc/labwc.git
synced 2025-11-04 13:30:07 -05:00
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>
This commit is contained in:
parent
befe66d93f
commit
97846ae45b
3 changed files with 23 additions and 1 deletions
|
|
@ -483,6 +483,14 @@ void cursor_rebase(struct seat *seat, uint32_t time_msec);
|
||||||
*/
|
*/
|
||||||
void cursor_set(struct seat *seat, const char *cursor_name);
|
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_init(struct seat *seat);
|
||||||
void cursor_finish(struct seat *seat);
|
void cursor_finish(struct seat *seat);
|
||||||
|
|
||||||
|
|
|
||||||
15
src/cursor.c
15
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
|
void
|
||||||
start_drag(struct wl_listener *listener, void *data)
|
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);
|
wlr_idle_notify_activity(seat->wlr_idle, seat->seat);
|
||||||
|
|
||||||
/* Notify the client with pointer focus of the axis event. */
|
/* 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,
|
wlr_seat_pointer_notify_axis(seat->seat, event->time_msec,
|
||||||
event->orientation, event->delta, event->delta_discrete,
|
event->orientation, event->delta, event->delta_discrete,
|
||||||
event->source);
|
event->source);
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ desktop_move_to_front(struct view *view)
|
||||||
#if HAVE_XWAYLAND
|
#if HAVE_XWAYLAND
|
||||||
move_xwayland_sub_views_to_front(view);
|
move_xwayland_sub_views_to_front(view);
|
||||||
#endif
|
#endif
|
||||||
|
cursor_update_focus(view->server);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue