diff --git a/include/labwc.h b/include/labwc.h index 8245eede..367838c8 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -76,6 +76,7 @@ struct seat { struct wl_listener request_cursor; struct wl_listener request_set_selection; + struct wl_listener request_set_primary_selection; struct wl_listener keyboard_key; struct wl_listener keyboard_modifiers; diff --git a/src/cursor.c b/src/cursor.c index c0d80254..4f7c3830 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -5,6 +5,7 @@ #include "labwc.h" #include "menu/menu.h" #include "ssd.h" +#include static void request_cursor_notify(struct wl_listener *listener, void *data) @@ -40,6 +41,16 @@ request_set_selection_notify(struct wl_listener *listener, void *data) event->serial); } +static void +request_set_primary_selection_notify(struct wl_listener *listener, void *data) +{ + struct seat *seat = wl_container_of( + listener, seat, request_set_primary_selection); + struct wlr_seat_request_set_primary_selection_event *event = data; + wlr_seat_set_primary_selection(seat->seat, event->source, + event->serial); +} + static void process_cursor_move(struct server *server, uint32_t time) { @@ -402,10 +413,8 @@ cursor_init(struct seat *seat) seat->request_set_selection.notify = request_set_selection_notify; wl_signal_add(&seat->seat->events.request_set_selection, &seat->request_set_selection); - /* TODO: - * seat->request_set_primary_selection.notify = - * request_set_primary_selectioni_notify; - * wl_signal_add(&seat->seat->events.request_set_primary_selection, - * &seat->request_set_primary_selection); - */ + seat->request_set_primary_selection.notify = + request_set_primary_selection_notify; + wl_signal_add(&seat->seat->events.request_set_primary_selection, + &seat->request_set_primary_selection); }