|
|
|
@ -5,10 +5,12 @@
|
|
|
|
|
#include <strings.h>
|
|
|
|
|
#include <time.h>
|
|
|
|
|
#include <wlr/types/wlr_cursor.h>
|
|
|
|
|
#include <wlr/types/wlr_data_device.h>
|
|
|
|
|
#include <wlr/types/wlr_output_layout.h>
|
|
|
|
|
#include <wlr/types/wlr_primary_selection.h>
|
|
|
|
|
#include <wlr/types/wlr_xcursor_manager.h>
|
|
|
|
|
#include "log.h"
|
|
|
|
|
#include "config.h"
|
|
|
|
|
#include "log.h"
|
|
|
|
|
#include "sway/debug.h"
|
|
|
|
|
#include "sway/desktop.h"
|
|
|
|
|
#include "sway/input/cursor.h"
|
|
|
|
@ -44,6 +46,8 @@ void seat_destroy(struct sway_seat *seat) {
|
|
|
|
|
sway_cursor_destroy(seat->cursor);
|
|
|
|
|
wl_list_remove(&seat->new_node.link);
|
|
|
|
|
wl_list_remove(&seat->new_drag_icon.link);
|
|
|
|
|
wl_list_remove(&seat->request_set_selection.link);
|
|
|
|
|
wl_list_remove(&seat->request_set_primary_selection.link);
|
|
|
|
|
wl_list_remove(&seat->link);
|
|
|
|
|
wlr_seat_destroy(seat->wlr_seat);
|
|
|
|
|
free(seat->prev_workspace_name);
|
|
|
|
@ -311,6 +315,22 @@ static void handle_new_drag_icon(struct wl_listener *listener, void *data) {
|
|
|
|
|
seatop_abort(seat);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void handle_request_set_selection(struct wl_listener *listener,
|
|
|
|
|
void *data) {
|
|
|
|
|
struct sway_seat *seat =
|
|
|
|
|
wl_container_of(listener, seat, request_set_selection);
|
|
|
|
|
struct wlr_seat_request_set_selection_event *event = data;
|
|
|
|
|
wlr_seat_set_selection(seat->wlr_seat, event->source, event->serial);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void handle_request_set_primary_selection(struct wl_listener *listener,
|
|
|
|
|
void *data) {
|
|
|
|
|
struct sway_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->wlr_seat, event->source, event->serial);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void collect_focus_iter(struct sway_node *node, void *data) {
|
|
|
|
|
struct sway_seat *seat = data;
|
|
|
|
|
struct sway_seat_node *seat_node = seat_node_from_node(seat, node);
|
|
|
|
@ -371,6 +391,15 @@ struct sway_seat *seat_create(const char *seat_name) {
|
|
|
|
|
wl_signal_add(&seat->wlr_seat->events.new_drag_icon, &seat->new_drag_icon);
|
|
|
|
|
seat->new_drag_icon.notify = handle_new_drag_icon;
|
|
|
|
|
|
|
|
|
|
wl_signal_add(&seat->wlr_seat->events.request_set_selection,
|
|
|
|
|
&seat->request_set_selection);
|
|
|
|
|
seat->request_set_selection.notify = handle_request_set_selection;
|
|
|
|
|
|
|
|
|
|
wl_signal_add(&seat->wlr_seat->events.request_set_primary_selection,
|
|
|
|
|
&seat->request_set_primary_selection);
|
|
|
|
|
seat->request_set_primary_selection.notify =
|
|
|
|
|
handle_request_set_primary_selection;
|
|
|
|
|
|
|
|
|
|
wl_list_init(&seat->devices);
|
|
|
|
|
|
|
|
|
|
wl_list_insert(&server.input->seats, &seat->link);
|
|
|
|
|