From 1c831bc051b1304fe6b76141b5bd6f79691f09e1 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Sun, 28 Nov 2021 21:47:24 +0000 Subject: [PATCH] interactive.c: set move/resize cursor Fixes issue #124 --- include/labwc.h | 3 +++ src/cursor.c | 14 +++++++------- src/interactive.c | 11 +++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index 27a67abf..448a5a29 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -65,8 +65,10 @@ struct seat { struct wlr_seat *seat; struct server *server; struct wlr_keyboard_group *keyboard_group; + struct wlr_cursor *cursor; struct wlr_xcursor_manager *xcursor_manager; + struct wlr_drag_icon *drag_icon; struct wlr_pointer_constraint_v1 *current_constraint; struct wlr_idle *wlr_idle; @@ -422,6 +424,7 @@ struct view *desktop_surface_and_view_at(struct server *server, double lx, struct view *desktop_view_at_cursor(struct server *server); +void cursor_set(struct seat *seat, const char *cursor_name); void cursor_init(struct seat *seat); void keyboard_init(struct seat *seat); diff --git a/src/cursor.c b/src/cursor.c index 3d75c040..e9c55559 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -130,11 +130,11 @@ process_cursor_resize(struct server *server, uint32_t time) view_move_resize(view, new_view_geo); } -static void -set_cursor(struct server *server, const char *cursor_name) +void +cursor_set(struct seat *seat, const char *cursor_name) { wlr_xcursor_manager_set_cursor_image( - server->seat.xcursor_manager, cursor_name, server->seat.cursor); + seat->xcursor_manager, cursor_name, seat->cursor); } bool @@ -175,19 +175,19 @@ process_cursor_motion(struct server *server, uint32_t time) &sx, &sy, &view_area); if (!view) { - set_cursor(server, XCURSOR_DEFAULT); + cursor_set(&server->seat, XCURSOR_DEFAULT); } else { uint32_t resize_edges = ssd_resize_edges(view_area); if (resize_edges) { cursor_name_set_by_server = true; - set_cursor(server, + cursor_set(&server->seat, wlr_xcursor_get_resize_name(resize_edges)); } else if (view_area != LAB_SSD_NONE) { /* title and buttons */ - set_cursor(server, XCURSOR_DEFAULT); + cursor_set(&server->seat, XCURSOR_DEFAULT); cursor_name_set_by_server = true; } else if (cursor_name_set_by_server) { - set_cursor(server, XCURSOR_DEFAULT); + cursor_set(&server->seat, XCURSOR_DEFAULT); cursor_name_set_by_server = false; } } diff --git a/src/interactive.c b/src/interactive.c index daa6764d..5dcedc3d 100644 --- a/src/interactive.c +++ b/src/interactive.c @@ -26,4 +26,15 @@ interactive_begin(struct view *view, enum input_mode mode, uint32_t edges) }; memcpy(&server->grab_box, &box, sizeof(struct wlr_box)); server->resize_edges = edges; + + switch (mode) { + case LAB_INPUT_STATE_MOVE: + cursor_set(&server->seat, "move"); + break; + case LAB_INPUT_STATE_RESIZE: + cursor_set(&server->seat, wlr_xcursor_get_resize_name(edges)); + break; + default: + break; + } }