|
|
@ -145,16 +145,14 @@ static void seat_handle_selection_source_destroy(
|
|
|
|
struct wl_listener *listener, void *data) {
|
|
|
|
struct wl_listener *listener, void *data) {
|
|
|
|
struct wlr_seat *seat =
|
|
|
|
struct wlr_seat *seat =
|
|
|
|
wl_container_of(listener, seat, selection_source_destroy);
|
|
|
|
wl_container_of(listener, seat, selection_source_destroy);
|
|
|
|
struct wlr_seat_client *seat_client = seat->keyboard_state.focused_client;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wl_list_remove(&seat->selection_source_destroy.link);
|
|
|
|
wl_list_remove(&seat->selection_source_destroy.link);
|
|
|
|
seat->selection_source = NULL;
|
|
|
|
seat->selection_source = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
if (seat_client && seat->keyboard_state.focused_surface) {
|
|
|
|
struct wlr_seat_client *focused_client =
|
|
|
|
struct wl_resource *resource;
|
|
|
|
seat->keyboard_state.focused_client;
|
|
|
|
wl_resource_for_each(resource, &seat_client->data_devices) {
|
|
|
|
if (focused_client != NULL) {
|
|
|
|
wl_data_device_send_selection(resource, NULL);
|
|
|
|
seat_client_send_selection(focused_client);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
wlr_signal_emit_safe(&seat->events.set_selection, seat);
|
|
|
|
wlr_signal_emit_safe(&seat->events.set_selection, seat);
|
|
|
@ -171,12 +169,6 @@ void wlr_seat_set_selection(struct wlr_seat *seat,
|
|
|
|
seat->selection_source = source;
|
|
|
|
seat->selection_source = source;
|
|
|
|
seat->selection_serial = serial;
|
|
|
|
seat->selection_serial = serial;
|
|
|
|
|
|
|
|
|
|
|
|
struct wlr_seat_client *focused_client =
|
|
|
|
|
|
|
|
seat->keyboard_state.focused_client;
|
|
|
|
|
|
|
|
if (focused_client) {
|
|
|
|
|
|
|
|
seat_client_send_selection(focused_client);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (source) {
|
|
|
|
if (source) {
|
|
|
|
seat->selection_source_destroy.notify =
|
|
|
|
seat->selection_source_destroy.notify =
|
|
|
|
seat_handle_selection_source_destroy;
|
|
|
|
seat_handle_selection_source_destroy;
|
|
|
@ -184,6 +176,12 @@ void wlr_seat_set_selection(struct wlr_seat *seat,
|
|
|
|
&seat->selection_source_destroy);
|
|
|
|
&seat->selection_source_destroy);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct wlr_seat_client *focused_client =
|
|
|
|
|
|
|
|
seat->keyboard_state.focused_client;
|
|
|
|
|
|
|
|
if (focused_client) {
|
|
|
|
|
|
|
|
seat_client_send_selection(focused_client);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
wlr_signal_emit_safe(&seat->events.set_selection, seat);
|
|
|
|
wlr_signal_emit_safe(&seat->events.set_selection, seat);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|