2026-01-02 22:53:34 +07:00
|
|
|
#include <wayland-server-core.h>
|
|
|
|
|
#include <wlr/types/wlr_data_device.h>
|
|
|
|
|
|
|
|
|
|
#include "types.h"
|
|
|
|
|
|
2026-05-14 18:16:40 +07:00
|
|
|
void request_cursor(struct wl_listener *listener, void *data)
|
2026-01-02 22:53:34 +07:00
|
|
|
{
|
2026-05-14 18:16:40 +07:00
|
|
|
absn_server *server = wl_container_of(listener, server, request_cursor);
|
|
|
|
|
struct wlr_seat_pointer_request_set_cursor_event *event = data;
|
|
|
|
|
struct wlr_seat_client *client = server->seat->pointer_state.focused_client;
|
2026-01-02 22:53:34 +07:00
|
|
|
|
2026-05-17 20:03:02 +07:00
|
|
|
if (client == event->seat_client) {
|
|
|
|
|
wlr_cursor_set_surface(server->cursor, event->surface, event->hotspot_x,
|
|
|
|
|
event->hotspot_y);
|
|
|
|
|
}
|
2026-01-02 22:53:34 +07:00
|
|
|
}
|
|
|
|
|
|
2026-05-14 18:16:40 +07:00
|
|
|
void pointer_focus_change(struct wl_listener *listener, void *data)
|
2026-01-02 22:53:34 +07:00
|
|
|
{
|
2026-05-17 20:03:02 +07:00
|
|
|
absn_server *server =
|
|
|
|
|
wl_container_of(listener, server, pointer_focus_change);
|
2026-05-14 18:16:40 +07:00
|
|
|
struct wlr_seat_pointer_focus_change_event *event = data;
|
2026-01-02 22:53:34 +07:00
|
|
|
|
2026-05-17 20:03:02 +07:00
|
|
|
if (!event->new_surface) {
|
2026-05-14 18:16:40 +07:00
|
|
|
wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "default");
|
2026-05-17 20:03:02 +07:00
|
|
|
}
|
2026-01-02 22:53:34 +07:00
|
|
|
}
|
|
|
|
|
|
2026-05-14 18:16:40 +07:00
|
|
|
void request_set_selection(struct wl_listener *listener, void *data)
|
2026-01-02 22:53:34 +07:00
|
|
|
{
|
2026-05-17 20:03:02 +07:00
|
|
|
absn_server *server =
|
|
|
|
|
wl_container_of(listener, server, request_set_selection);
|
2026-05-14 18:16:40 +07:00
|
|
|
struct wlr_seat_request_set_selection_event *event = data;
|
2026-01-02 22:53:34 +07:00
|
|
|
|
2026-05-14 18:16:40 +07:00
|
|
|
wlr_seat_set_selection(server->seat, event->source, event->serial);
|
2026-01-02 22:53:34 +07:00
|
|
|
}
|