aboutsummaryrefslogtreecommitdiff
path: root/rootston/cursor.c
diff options
context:
space:
mode:
Diffstat (limited to 'rootston/cursor.c')
-rw-r--r--rootston/cursor.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/rootston/cursor.c b/rootston/cursor.c
index 8ae098de..6e09c06e 100644
--- a/rootston/cursor.c
+++ b/rootston/cursor.c
@@ -101,8 +101,7 @@ static void seat_view_deco_button(struct roots_seat_view *view, double sx,
}
static void roots_passthrough_cursor(struct roots_cursor *cursor,
- int64_t time) {
- bool focus_changed;
+ uint32_t time) {
double sx, sy;
struct roots_view *view = NULL;
struct roots_seat *seat = cursor->seat;
@@ -146,23 +145,26 @@ static void roots_passthrough_cursor(struct roots_cursor *cursor,
cursor->wlr_surface = surface;
if (surface) {
- focus_changed = (seat->seat->pointer_state.focused_surface != surface);
wlr_seat_pointer_notify_enter(seat->seat, surface, sx, sy);
- if (!focus_changed && time > 0) {
- wlr_seat_pointer_notify_motion(seat->seat, time, sx, sy);
- }
+ wlr_seat_pointer_notify_motion(seat->seat, time, sx, sy);
} else {
wlr_seat_pointer_clear_focus(seat->seat);
}
- struct roots_drag_icon *drag_icon;
- wl_list_for_each(drag_icon, &seat->drag_icons, link) {
- roots_drag_icon_update_position(drag_icon);
+ if (seat->drag_icon != NULL) {
+ roots_drag_icon_update_position(seat->drag_icon);
}
}
+static inline int64_t timespec_to_msec(const struct timespec *a) {
+ return (int64_t)a->tv_sec * 1000 + a->tv_nsec / 1000000;
+}
+
void roots_cursor_update_focus(struct roots_cursor *cursor) {
- roots_passthrough_cursor(cursor, -1);
+ struct timespec now;
+ clock_gettime(CLOCK_MONOTONIC, &now);
+
+ roots_passthrough_cursor(cursor, timespec_to_msec(&now));
}
void roots_cursor_update_position(struct roots_cursor *cursor,