tAdd support for setting selection - spkp - Stacking wayland compositor
 (HTM) git clone git://git.z3bra.org/spkp.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit 2ca5e2f73d99654f5295056e2f76947c4b1eed64
 (DIR) parent 13990de6158e0d499c413cb104bd0b511fb447f1
 (HTM) Author: Willy Goiffon <dev@z3bra.org>
       Date:   Fri, 13 Nov 2020 17:12:24 +0100
       
       Add support for setting selection
       
       Diffstat:
         M compositor.c                        |      19 +++++++++++++++++++
       
       1 file changed, 19 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/compositor.c b/compositor.c
       t@@ -67,6 +67,7 @@ struct state {
                struct wl_listener new_output;
                struct wl_listener new_window;
                struct wl_listener new_chrome;
       +        struct wl_listener copy;
        
                /* cursor related events */
                struct wl_listener req_cursor;
       t@@ -168,6 +169,7 @@ static void cb_destroy_output(struct wl_listener *, void *);
        static void cb_frame_output(struct wl_listener *, void *);
        static void cb_new_window(struct wl_listener *, void *);
        static void cb_new_decoration(struct wl_listener *, void *);
       +static void cb_copy(struct wl_listener *, void *);
        
        static void cb_map_window(struct wl_listener *, void *);
        static void cb_unmap_window(struct wl_listener *, void *);
       t@@ -430,6 +432,21 @@ cb_new_decoration(struct wl_listener *listener, void *data)
        }
        
        /*
       + * Request setting selection from the client. This happens when the user
       + * copies something from a client window.
       + */
       +void
       +cb_copy(struct wl_listener *listener, void *data)
       +{
       +        struct state *server;
       +        struct wlr_seat_request_set_selection_event *ev;
       +
       +        server = wl_container_of(listener, server, copy);
       +        ev = data;
       +        wlr_seat_set_selection(server->seat, ev->source, ev->serial);
       +}
       +
       +/*
         * Request from a client to be mapped on-screen.
         */
        void
       t@@ -1125,6 +1142,7 @@ main(int argc, char *argv[])
                server.new_input.notify = cb_new_input;
                server.new_output.notify = cb_new_output;
                server.new_chrome.notify = cb_new_decoration;
       +        server.copy.notify = cb_copy;
        
                server.click.notify = cb_click;
                server.scroll.notify = cb_scroll;
       t@@ -1137,6 +1155,7 @@ main(int argc, char *argv[])
                wl_signal_add(&server.shell->events.new_surface, &server.new_window);
                wl_signal_add(&server.backend->events.new_input, &server.new_input);
                wl_signal_add(&server.chrome_mgr->events.new_toplevel_decoration, &server.new_chrome);
       +        wl_signal_add(&server.seat->events.request_set_selection, &server.copy);
        
                wl_signal_add(&server.cursor->events.button, &server.click);
                wl_signal_add(&server.cursor->events.axis, &server.scroll);