From ee3c8dd7c552a9a502d6a2cef9d8dfa6a2eeda09 Mon Sep 17 00:00:00 2001 From: Jan Pokorný Date: Mar 14 2019 01:43:24 +0000 Subject: 0.5.0-1 - Updated to version 0.5.0 (0.2, 0.3, 0.4, 0.4.1 skipped) - Avoid building some parts that are not shipped in binary form, anyway - Minor spec cleanup (clarify the licensing comment, licensecheck's NTP ~ MIT, ldconfig_scriptlets no longer relevant, arch-specific tweak no longer needed) Signed-off-by: Jan Pokorný --- diff --git a/data-device-multiple_per_seat.patch b/data-device-multiple_per_seat.patch deleted file mode 100644 index 1a9847f..0000000 --- a/data-device-multiple_per_seat.patch +++ /dev/null @@ -1,464 +0,0 @@ -From 5d26da9d15d4874c383bbc9948a802fcd605dc8b Mon Sep 17 00:00:00 2001 -From: emersion -Date: Wed, 21 Nov 2018 21:32:54 +0100 -Subject: [PATCH] data-device: allow multiple devices for the same seat - -This commit makes it possible for a single client to have multiple data devices -for the same seat. This fixes issues with Firefox. - -This mainly removes wlr_data_source.offer. We make sure we create one data -offer per device. We now make the offer inert when the source is destroyed. - -Fixes the second half of https://github.com/swaywm/wlroots/issues/1041 ---- - include/types/wlr_data_device.h | 3 +- - include/wlr/types/wlr_data_device.h | 13 ++- - types/data_device/wlr_data_device.c | 33 ++++---- - types/data_device/wlr_data_offer.c | 123 +++++++++++++++------------- - types/data_device/wlr_data_source.c | 35 ++------ - types/data_device/wlr_drag.c | 46 ++++------- - 6 files changed, 112 insertions(+), 141 deletions(-) - -diff --git a/include/types/wlr_data_device.h b/include/types/wlr_data_device.h -index 388e91a5e..376c5f09f 100644 ---- a/include/types/wlr_data_device.h -+++ b/include/types/wlr_data_device.h -@@ -19,6 +19,7 @@ extern const struct wlr_surface_role drag_icon_surface_role; - struct wlr_data_offer *data_offer_create(struct wl_client *client, - struct wlr_data_source *source, uint32_t version); - void data_offer_update_action(struct wlr_data_offer *offer); -+void data_offer_destroy(struct wlr_data_offer *offer); - - struct wlr_client_data_source *client_data_source_create( - struct wl_client *client, uint32_t version, uint32_t id, -@@ -26,7 +27,7 @@ struct wlr_client_data_source *client_data_source_create( - struct wlr_client_data_source *client_data_source_from_resource( - struct wl_resource *resource); - struct wlr_data_offer *data_source_send_offer(struct wlr_data_source *source, -- struct wlr_seat_client *target); -+ struct wl_resource *device_resource); - void data_source_notify_finish(struct wlr_data_source *source); - - bool seat_client_start_drag(struct wlr_seat_client *client, -diff --git a/include/wlr/types/wlr_data_device.h b/include/wlr/types/wlr_data_device.h -index 9ce8f400f..9c4ce995e 100644 ---- a/include/wlr/types/wlr_data_device.h -+++ b/include/wlr/types/wlr_data_device.h -@@ -12,14 +12,14 @@ - #include - #include - --extern const struct --wlr_pointer_grab_interface wlr_data_device_pointer_drag_interface; -+extern const struct wlr_pointer_grab_interface -+ wlr_data_device_pointer_drag_interface; - --extern const struct --wlr_keyboard_grab_interface wlr_data_device_keyboard_drag_interface; -+extern const struct wlr_keyboard_grab_interface -+ wlr_data_device_keyboard_drag_interface; - --extern const struct --wlr_touch_grab_interface wlr_data_device_touch_drag_interface; -+extern const struct wlr_touch_grab_interface -+ wlr_data_device_touch_drag_interface; - - struct wlr_data_device_manager { - struct wl_global *global; -@@ -72,7 +72,6 @@ struct wlr_data_source { - - // source status - bool accepted; -- struct wlr_data_offer *offer; - - // drag'n'drop status - enum wl_data_device_manager_dnd_action current_dnd_action; -diff --git a/types/data_device/wlr_data_device.c b/types/data_device/wlr_data_device.c -index a50f0b4ae..f868ea370 100644 ---- a/types/data_device/wlr_data_device.c -+++ b/types/data_device/wlr_data_device.c -@@ -94,25 +94,24 @@ static void data_device_handle_resource_destroy(struct wl_resource *resource) { - - - void wlr_seat_client_send_selection(struct wlr_seat_client *seat_client) { -- if (wl_list_empty(&seat_client->data_devices)) { -- return; -+ struct wlr_data_source *source = seat_client->seat->selection_source; -+ if (source != NULL) { -+ source->accepted = false; - } - -- if (seat_client->seat->selection_source) { -- struct wlr_data_offer *offer = data_source_send_offer( -- seat_client->seat->selection_source, seat_client); -- if (offer == NULL) { -- return; -- } -- -- struct wl_resource *resource; -- wl_resource_for_each(resource, &seat_client->data_devices) { -- wl_data_device_send_selection(resource, offer->resource); -- } -- } else { -- struct wl_resource *resource; -- wl_resource_for_each(resource, &seat_client->data_devices) { -- wl_data_device_send_selection(resource, NULL); -+ struct wl_resource *device_resource; -+ wl_resource_for_each(device_resource, &seat_client->data_devices) { -+ if (source != NULL) { -+ struct wlr_data_offer *offer = -+ data_source_send_offer(source, device_resource); -+ if (offer == NULL) { -+ wl_client_post_no_memory(seat_client->client); -+ return; -+ } -+ -+ wl_data_device_send_selection(device_resource, offer->resource); -+ } else { -+ wl_data_device_send_selection(device_resource, NULL); - } - } - } -diff --git a/types/data_device/wlr_data_offer.c b/types/data_device/wlr_data_offer.c -index 9847e07c2..6135ffe33 100644 ---- a/types/data_device/wlr_data_offer.c -+++ b/types/data_device/wlr_data_offer.c -@@ -55,15 +55,10 @@ static uint32_t data_offer_choose_action(struct wlr_data_offer *offer) { - } - - void data_offer_update_action(struct wlr_data_offer *offer) { -- if (!offer->source) { -- return; -- } -- - uint32_t action = data_offer_choose_action(offer); - if (offer->source->current_dnd_action == action) { - return; - } -- - offer->source->current_dnd_action = action; - - if (offer->in_ask) { -@@ -78,50 +73,80 @@ void data_offer_update_action(struct wlr_data_offer *offer) { - } - } - --static void data_offer_accept(struct wl_client *client, -+static void data_offer_handle_accept(struct wl_client *client, - struct wl_resource *resource, uint32_t serial, const char *mime_type) { - struct wlr_data_offer *offer = data_offer_from_resource(resource); -- -- if (!offer->source || offer != offer->source->offer) { -+ if (offer == NULL) { - return; - } - -- // TODO check that client is currently focused by the input device -- - wlr_data_source_accept(offer->source, serial, mime_type); - } - --static void data_offer_receive(struct wl_client *client, -+static void data_offer_handle_receive(struct wl_client *client, - struct wl_resource *resource, const char *mime_type, int32_t fd) { - struct wlr_data_offer *offer = data_offer_from_resource(resource); -- -- if (offer->source && offer == offer->source->offer) { -- wlr_data_source_send(offer->source, mime_type, fd); -- } else { -+ if (offer == NULL) { - close(fd); -+ return; - } -+ -+ wlr_data_source_send(offer->source, mime_type, fd); - } - --static void data_offer_destroy(struct wl_client *client, -+static void data_offer_dnd_finish(struct wlr_data_offer *offer) { -+ struct wlr_data_source *source = offer->source; -+ if (source->actions < 0) { -+ return; -+ } -+ -+ if (offer->in_ask) { -+ wlr_data_source_dnd_action(source, source->current_dnd_action); -+ } -+ -+ wlr_data_source_dnd_finish(source); -+} -+ -+static void data_offer_handle_destroy(struct wl_client *client, - struct wl_resource *resource) { -+ struct wlr_data_offer *offer = data_offer_from_resource(resource); -+ if (offer == NULL) { -+ goto out; -+ } -+ -+ // If the drag destination has version < 3, wl_data_offer.finish -+ // won't be called, so do this here as a safety net, because -+ // we still want the version >= 3 drag source to be happy. -+ if (wl_resource_get_version(offer->resource) < -+ WL_DATA_OFFER_ACTION_SINCE_VERSION) { -+ data_offer_dnd_finish(offer); -+ } else if (offer->source->impl->dnd_finish) { -+ // wlr_data_source_cancel can free the source -+ wlr_data_source_cancel(offer->source); -+ } -+ -+out: - wl_resource_destroy(resource); - } - --static void data_offer_finish(struct wl_client *client, -+static void data_offer_handle_finish(struct wl_client *client, - struct wl_resource *resource) { - struct wlr_data_offer *offer = data_offer_from_resource(resource); -- -- if (!offer->source || offer->source->offer != offer) { -+ if (offer == NULL) { - return; - } - -- data_source_notify_finish(offer->source); -+ data_offer_dnd_finish(offer); -+ data_offer_destroy(offer); - } - --static void data_offer_set_actions(struct wl_client *client, -+static void data_offer_handle_set_actions(struct wl_client *client, - struct wl_resource *resource, uint32_t actions, - uint32_t preferred_action) { - struct wlr_data_offer *offer = data_offer_from_resource(resource); -+ if (offer == NULL) { -+ return; -+ } - - if (actions & ~DATA_DEVICE_ALL_ACTIONS) { - wl_resource_post_error(offer->resource, -@@ -144,52 +169,36 @@ static void data_offer_set_actions(struct wl_client *client, - data_offer_update_action(offer); - } - --static void data_offer_handle_resource_destroy(struct wl_resource *resource) { -- struct wlr_data_offer *offer = data_offer_from_resource(resource); -- -- if (!offer->source) { -- goto out; -+void data_offer_destroy(struct wlr_data_offer *offer) { -+ if (offer == NULL) { -+ return; - } - - wl_list_remove(&offer->source_destroy.link); - -- if (offer->source->offer != offer) { -- goto out; -- } -- -- // If the drag destination has version < 3, wl_data_offer.finish -- // won't be called, so do this here as a safety net, because -- // we still want the version >= 3 drag source to be happy. -- if (wl_resource_get_version(offer->resource) < -- WL_DATA_OFFER_ACTION_SINCE_VERSION) { -- data_source_notify_finish(offer->source); -- offer->source->offer = NULL; -- } else if (offer->source->impl->dnd_finish) { -- // source->cancel can free the source -- offer->source->offer = NULL; -- wlr_data_source_cancel(offer->source); -- } else { -- offer->source->offer = NULL; -- } -- --out: -+ // Make the resource inert -+ wl_resource_set_user_data(offer->resource, NULL); - free(offer); - } - - static const struct wl_data_offer_interface data_offer_impl = { -- .accept = data_offer_accept, -- .receive = data_offer_receive, -- .destroy = data_offer_destroy, -- .finish = data_offer_finish, -- .set_actions = data_offer_set_actions, -+ .accept = data_offer_handle_accept, -+ .receive = data_offer_handle_receive, -+ .destroy = data_offer_handle_destroy, -+ .finish = data_offer_handle_finish, -+ .set_actions = data_offer_handle_set_actions, - }; - --static void handle_offer_source_destroyed(struct wl_listener *listener, -+static void data_offer_handle_resource_destroy(struct wl_resource *resource) { -+ struct wlr_data_offer *offer = data_offer_from_resource(resource); -+ data_offer_destroy(offer); -+} -+ -+static void data_offer_handle_source_destroy(struct wl_listener *listener, - void *data) { - struct wlr_data_offer *offer = - wl_container_of(listener, offer, source_destroy); -- -- offer->source = NULL; -+ data_offer_destroy(offer); - } - - struct wlr_data_offer *data_offer_create(struct wl_client *client, -@@ -200,8 +209,8 @@ struct wlr_data_offer *data_offer_create(struct wl_client *client, - } - offer->source = source; - -- offer->resource = wl_resource_create(client, -- &wl_data_offer_interface, version, 0); -+ offer->resource = -+ wl_resource_create(client, &wl_data_offer_interface, version, 0); - if (offer->resource == NULL) { - free(offer); - return NULL; -@@ -209,7 +218,7 @@ struct wlr_data_offer *data_offer_create(struct wl_client *client, - wl_resource_set_implementation(offer->resource, &data_offer_impl, offer, - data_offer_handle_resource_destroy); - -- offer->source_destroy.notify = handle_offer_source_destroyed; -+ offer->source_destroy.notify = data_offer_handle_source_destroy; - wl_signal_add(&source->events.destroy, &offer->source_destroy); - - return offer; -diff --git a/types/data_device/wlr_data_source.c b/types/data_device/wlr_data_source.c -index 64db3a706..413f461a2 100644 ---- a/types/data_device/wlr_data_source.c -+++ b/types/data_device/wlr_data_source.c -@@ -11,47 +11,22 @@ - #include "types/wlr_data_device.h" - #include "util/signal.h" - --void data_source_notify_finish(struct wlr_data_source *source) { -- assert(source->offer); -- if (source->actions < 0) { -- return; -- } -- -- if (source->offer->in_ask) { -- wlr_data_source_dnd_action(source, source->current_dnd_action); -- } -- -- source->offer = NULL; -- wlr_data_source_dnd_finish(source); --} -- - struct wlr_data_offer *data_source_send_offer(struct wlr_data_source *source, -- struct wlr_seat_client *target) { -- if (wl_list_empty(&target->data_devices)) { -- return NULL; -- } -- -- uint32_t version = wl_resource_get_version( -- wl_resource_from_link(target->data_devices.next)); -- -- struct wlr_data_offer *offer = -- data_offer_create(target->client, source, version); -+ struct wl_resource *device_resource) { -+ struct wl_client *client = wl_resource_get_client(device_resource); -+ uint32_t version = wl_resource_get_version(device_resource); -+ struct wlr_data_offer *offer = data_offer_create(client, source, version); - if (offer == NULL) { - return NULL; - } - -- struct wl_resource *target_resource; -- wl_resource_for_each(target_resource, &target->data_devices) { -- wl_data_device_send_data_offer(target_resource, offer->resource); -- } -+ wl_data_device_send_data_offer(device_resource, offer->resource); - - char **p; - wl_array_for_each(p, &source->mime_types) { - wl_data_offer_send_offer(offer->resource, *p); - } - -- source->offer = offer; -- source->accepted = false; - return offer; - } - -diff --git a/types/data_device/wlr_drag.c b/types/data_device/wlr_drag.c -index 8ed6e034d..8e737597b 100644 ---- a/types/data_device/wlr_drag.c -+++ b/types/data_device/wlr_drag.c -@@ -47,25 +47,27 @@ static void drag_set_focus(struct wlr_drag *drag, - return; - } - -- if (drag->source && drag->source->offer) { -- // unlink the offer from the source -- wl_list_remove(&drag->source->offer->source_destroy.link); -- drag->source->offer->source = NULL; -- drag->source->offer = NULL; -- } -- - struct wlr_seat_client *focus_client = wlr_seat_client_for_wl_client( - drag->seat_client->seat, wl_resource_get_client(surface->resource)); - if (!focus_client) { - return; - } - -- struct wl_resource *offer_resource = NULL; -- if (drag->source) { -+ if (drag->source != NULL) { - drag->source->accepted = false; -- struct wlr_data_offer *offer = data_source_send_offer(drag->source, -- focus_client); -- if (offer != NULL) { -+ -+ uint32_t serial = -+ wl_display_next_serial(drag->seat_client->seat->display); -+ -+ struct wl_resource *device_resource; -+ wl_resource_for_each(device_resource, &focus_client->data_devices) { -+ struct wlr_data_offer *offer = -+ data_source_send_offer(drag->source, device_resource); -+ if (offer == NULL) { -+ wl_resource_post_no_memory(device_resource); -+ return; -+ } -+ - data_offer_update_action(offer); - - if (wl_resource_get_version(offer->resource) >= -@@ -74,18 +76,10 @@ static void drag_set_focus(struct wlr_drag *drag, - drag->source->actions); - } - -- offer_resource = offer->resource; -- } -- } -- -- if (!wl_list_empty(&focus_client->data_devices)) { -- uint32_t serial = -- wl_display_next_serial(drag->seat_client->seat->display); -- struct wl_resource *resource; -- wl_resource_for_each(resource, &focus_client->data_devices) { -- wl_data_device_send_enter(resource, serial, surface->resource, -+ wl_data_device_send_enter(device_resource, serial, -+ surface->resource, - wl_fixed_from_double(sx), wl_fixed_from_double(sy), -- offer_resource); -+ offer->resource); - } - } - -@@ -174,12 +168,6 @@ static uint32_t drag_handle_pointer_button(struct wlr_seat_pointer_grab *grab, - } - wlr_data_source_dnd_drop(drag->source); - -- if (drag->source->offer != NULL) { -- drag->source->offer->in_ask = -- drag->source->current_dnd_action == -- WL_DATA_DEVICE_MANAGER_DND_ACTION_ASK; -- } -- - struct wlr_drag_drop_event event = { - .drag = drag, - .time = time, diff --git a/data-device-no_cancel_on_destroy.patch b/data-device-no_cancel_on_destroy.patch deleted file mode 100644 index 541ed56..0000000 --- a/data-device-no_cancel_on_destroy.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 4423f88fac1d82756bab451f451b159fa6d0e9f5 Mon Sep 17 00:00:00 2001 -From: emersion -Date: Mon, 26 Nov 2018 12:32:39 +0100 -Subject: [PATCH] data-device: never cancel the source when offer is destroyed - -The source could be used in another offer. ---- - types/data_device/wlr_data_offer.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/types/data_device/wlr_data_offer.c b/types/data_device/wlr_data_offer.c -index 6135ffe33..b8cec091b 100644 ---- a/types/data_device/wlr_data_offer.c -+++ b/types/data_device/wlr_data_offer.c -@@ -120,9 +120,6 @@ static void data_offer_handle_destroy(struct wl_client *client, - if (wl_resource_get_version(offer->resource) < - WL_DATA_OFFER_ACTION_SINCE_VERSION) { - data_offer_dnd_finish(offer); -- } else if (offer->source->impl->dnd_finish) { -- // wlr_data_source_cancel can free the source -- wlr_data_source_cancel(offer->source); - } - - out: diff --git a/gtk-primary-selection-track_resources.patch b/gtk-primary-selection-track_resources.patch deleted file mode 100644 index afc6efb..0000000 --- a/gtk-primary-selection-track_resources.patch +++ /dev/null @@ -1,84 +0,0 @@ -From eaafd65a12d6b15cc8e503ef6e9e99a65bd1e791 Mon Sep 17 00:00:00 2001 -From: emersion -Date: Wed, 21 Nov 2018 11:15:35 +0100 -Subject: [PATCH] gtk-primary-selection: track resources - ---- - include/wlr/types/wlr_primary_selection.h | 1 + - types/wlr_primary_selection.c | 18 +++++++++++++++--- - 2 files changed, 16 insertions(+), 3 deletions(-) - -diff --git a/include/wlr/types/wlr_primary_selection.h b/include/wlr/types/wlr_primary_selection.h -index c11e2fabb..192bfc02f 100644 ---- a/include/wlr/types/wlr_primary_selection.h -+++ b/include/wlr/types/wlr_primary_selection.h -@@ -14,6 +14,7 @@ - - struct wlr_primary_selection_device_manager { - struct wl_global *global; -+ struct wl_list resources; - - struct wl_listener display_destroy; - -diff --git a/types/wlr_primary_selection.c b/types/wlr_primary_selection.c -index 0539773b0..743125406 100644 ---- a/types/wlr_primary_selection.c -+++ b/types/wlr_primary_selection.c -@@ -212,6 +212,7 @@ void wlr_seat_set_primary_selection(struct wlr_seat *seat, - return; - } - -+ // TODO: make all offers inert - if (seat->primary_selection_source) { - wl_list_remove(&seat->primary_selection_source_destroy.link); - seat->primary_selection_source->cancel(seat->primary_selection_source); -@@ -349,12 +350,17 @@ static void device_manager_handle_destroy(struct wl_client *client, - } - - static const struct gtk_primary_selection_device_manager_interface --device_manager_impl = { -+ device_manager_impl = { - .create_source = device_manager_handle_create_source, - .get_device = device_manager_handle_get_device, - .destroy = device_manager_handle_destroy, - }; - -+static void device_manager_handle_resource_destroy( -+ struct wl_resource *resource) { -+ wl_list_remove(wl_resource_get_link(resource)); -+} -+ - - static void primary_selection_device_manager_bind(struct wl_client *client, - void *data, uint32_t version, uint32_t id) { -@@ -367,7 +373,9 @@ static void primary_selection_device_manager_bind(struct wl_client *client, - return; - } - wl_resource_set_implementation(resource, &device_manager_impl, manager, -- NULL); -+ device_manager_handle_resource_destroy); -+ -+ wl_list_insert(&manager->resources, wl_resource_get_link(resource)); - } - - static void handle_display_destroy(struct wl_listener *listener, void *data) { -@@ -392,6 +400,7 @@ struct wlr_primary_selection_device_manager * - return NULL; - } - -+ wl_list_init(&manager->resources); - wl_signal_init(&manager->events.destroy); - - manager->display_destroy.notify = handle_display_destroy; -@@ -407,7 +416,10 @@ void wlr_primary_selection_device_manager_destroy( - } - wlr_signal_emit_safe(&manager->events.destroy, manager); - wl_list_remove(&manager->display_destroy.link); -- // TODO: free resources -+ struct wl_resource *resource, *resource_tmp; -+ wl_resource_for_each_safe(resource, resource_tmp, &manager->resources) { -+ wl_resource_destroy(resource); -+ } - wl_global_destroy(manager->global); - free(manager); - } diff --git a/gtk-primary-selection_multiple_devices.patch b/gtk-primary-selection_multiple_devices.patch deleted file mode 100644 index 3f61934..0000000 --- a/gtk-primary-selection_multiple_devices.patch +++ /dev/null @@ -1,215 +0,0 @@ -From b9a2e4ba4c92cd4c19f8cf5ed7e6603731eca9ab Mon Sep 17 00:00:00 2001 -From: emersion -Date: Wed, 21 Nov 2018 10:59:11 +0100 -Subject: [PATCH] gtk-primary-selection: support multiple devices - -When a client was creating multiple data devices for the same seat, we were -only creating one resource. This is a protocol error. - -Instead, create one offer per data device. - -This commit also makes offers inert when their source is destroyed. - -Fixes part of https://github.com/swaywm/wlroots/issues/1041 -Supersedes https://github.com/swaywm/wlroots/pull/1113 ---- - include/wlr/types/wlr_primary_selection.h | 3 - - types/wlr_primary_selection.c | 96 ++++++++++------------- - 2 files changed, 40 insertions(+), 59 deletions(-) - -diff --git a/include/wlr/types/wlr_primary_selection.h b/include/wlr/types/wlr_primary_selection.h -index f33f6368d..c11e2fabb 100644 ---- a/include/wlr/types/wlr_primary_selection.h -+++ b/include/wlr/types/wlr_primary_selection.h -@@ -24,8 +24,6 @@ struct wlr_primary_selection_device_manager { - void *data; - }; - --struct wlr_primary_selection_offer; -- - struct wlr_primary_selection_source { - // source metadata - struct wl_array mime_types; -@@ -36,7 +34,6 @@ struct wlr_primary_selection_source { - void (*cancel)(struct wlr_primary_selection_source *source); - - // source status -- struct wlr_primary_selection_offer *offer; - struct wlr_seat_client *seat_client; - - struct { -diff --git a/types/wlr_primary_selection.c b/types/wlr_primary_selection.c -index 3fed0f642..0539773b0 100644 ---- a/types/wlr_primary_selection.c -+++ b/types/wlr_primary_selection.c -@@ -9,6 +9,8 @@ - #include "gtk-primary-selection-protocol.h" - #include "util/signal.h" - -+#define DEVICE_MANAGER_VERSION 1 -+ - static const struct gtk_primary_selection_offer_interface offer_impl; - - static struct wlr_primary_selection_offer *offer_from_resource( -@@ -21,12 +23,12 @@ static struct wlr_primary_selection_offer *offer_from_resource( - static void offer_handle_receive(struct wl_client *client, - struct wl_resource *resource, const char *mime_type, int32_t fd) { - struct wlr_primary_selection_offer *offer = offer_from_resource(resource); -- -- if (offer->source && offer == offer->source->offer) { -- offer->source->send(offer->source, mime_type, fd); -- } else { -+ if (offer == NULL) { - close(fd); -+ return; - } -+ -+ offer->source->send(offer->source, mime_type, fd); - } - - static void offer_handle_destroy(struct wl_client *client, -@@ -39,31 +41,26 @@ static const struct gtk_primary_selection_offer_interface offer_impl = { - .destroy = offer_handle_destroy, - }; - --static void offer_resource_handle_destroy(struct wl_resource *resource) { -- struct wlr_primary_selection_offer *offer = offer_from_resource(resource); -- -- if (!offer->source) { -- goto out; -+static void offer_destroy(struct wlr_primary_selection_offer *offer) { -+ if (offer == NULL) { -+ return; - } -- -+ // Make resource inert -+ wl_resource_set_user_data(offer->resource, NULL); - wl_list_remove(&offer->source_destroy.link); -- -- if (offer->source->offer != offer) { -- goto out; -- } -- -- offer->source->offer = NULL; -- --out: - free(offer); - } - -+static void offer_handle_resource_destroy(struct wl_resource *resource) { -+ struct wlr_primary_selection_offer *offer = offer_from_resource(resource); -+ offer_destroy(offer); -+} -+ - static void offer_handle_source_destroy(struct wl_listener *listener, - void *data) { - struct wlr_primary_selection_offer *offer = - wl_container_of(listener, offer, source_destroy); -- -- offer->source = NULL; -+ offer_destroy(offer); - } - - -@@ -85,38 +82,32 @@ static void client_source_cancel( - gtk_primary_selection_source_send_cancelled(source->resource); - } - --static struct wlr_primary_selection_offer *source_send_offer( -- struct wlr_primary_selection_source *source, -- struct wlr_seat_client *target) { -- if (wl_list_empty(&target->primary_selection_devices)) { -- return NULL; -- } -- -+static void source_send_offer(struct wlr_primary_selection_source *source, -+ struct wl_resource *device_resource) { - struct wlr_primary_selection_offer *offer = - calloc(1, sizeof(struct wlr_primary_selection_offer)); - if (offer == NULL) { -- return NULL; -+ wl_resource_post_no_memory(device_resource); -+ return; - } - -- uint32_t version = wl_resource_get_version( -- wl_resource_from_link(target->primary_selection_devices.next)); -- offer->resource = wl_resource_create(target->client, -+ struct wl_client *client = wl_resource_get_client(device_resource); -+ uint32_t version = wl_resource_get_version(device_resource); -+ offer->resource = wl_resource_create(client, - >k_primary_selection_offer_interface, version, 0); - if (offer->resource == NULL) { - free(offer); -- return NULL; -+ wl_resource_post_no_memory(device_resource); -+ return; - } - wl_resource_set_implementation(offer->resource, &offer_impl, offer, -- offer_resource_handle_destroy); -+ offer_handle_resource_destroy); - - offer->source_destroy.notify = offer_handle_source_destroy; - wl_signal_add(&source->events.destroy, &offer->source_destroy); - -- struct wl_resource *target_resource; -- wl_resource_for_each(target_resource, &target->primary_selection_devices) { -- gtk_primary_selection_device_send_data_offer(target_resource, -- offer->resource); -- } -+ gtk_primary_selection_device_send_data_offer(device_resource, -+ offer->resource); - - char **p; - wl_array_for_each(p, &source->mime_types) { -@@ -124,9 +115,9 @@ static struct wlr_primary_selection_offer *source_send_offer( - } - - offer->source = source; -- source->offer = offer; - -- return offer; -+ gtk_primary_selection_device_send_selection(device_resource, -+ offer->resource); - } - - static const struct gtk_primary_selection_source_interface source_impl; -@@ -179,20 +170,13 @@ void wlr_seat_client_send_primary_selection( - return; - } - -- if (seat_client->seat->primary_selection_source) { -- struct wlr_primary_selection_offer *offer = source_send_offer( -- seat_client->seat->primary_selection_source, seat_client); -- if (offer == NULL) { -- return; -- } -- -- struct wl_resource *resource; -- wl_resource_for_each(resource, &seat_client->primary_selection_devices) { -- gtk_primary_selection_device_send_selection(resource, offer->resource); -- } -- } else { -- struct wl_resource *resource; -- wl_resource_for_each(resource, &seat_client->primary_selection_devices) { -+ struct wlr_primary_selection_source *source = -+ seat_client->seat->primary_selection_source; -+ struct wl_resource *resource; -+ wl_resource_for_each(resource, &seat_client->primary_selection_devices) { -+ if (source) { -+ source_send_offer(source, resource); -+ } else { - gtk_primary_selection_device_send_selection(resource, NULL); - } - } -@@ -401,8 +385,8 @@ struct wlr_primary_selection_device_manager * - return NULL; - } - manager->global = wl_global_create(display, -- >k_primary_selection_device_manager_interface, 1, manager, -- primary_selection_device_manager_bind); -+ >k_primary_selection_device_manager_interface, DEVICE_MANAGER_VERSION, -+ manager, primary_selection_device_manager_bind); - if (manager->global == NULL) { - free(manager); - return NULL; diff --git a/pkgconfig_version.patch b/pkgconfig_version.patch deleted file mode 100644 index acf21b6..0000000 --- a/pkgconfig_version.patch +++ /dev/null @@ -1,22 +0,0 @@ -From be6210cf8216c08a91e085dac0ec11d0e34fb217 Mon Sep 17 00:00:00 2001 -From: emersion -Date: Sun, 21 Oct 2018 00:17:22 +0200 -Subject: [PATCH] Update version to 0.1 - ---- - meson.build | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/meson.build b/meson.build -index 9d40dbfcf..9517168a1 100644 ---- a/meson.build -+++ b/meson.build -@@ -1,7 +1,7 @@ - project( - 'wlroots', - 'c', -- version: '0.0.1', -+ version: '0.1.0', - license: 'MIT', - meson_version: '>=0.48.0', - default_options: [ diff --git a/wlroots.spec b/wlroots.spec index 430e048..b85834b 100644 --- a/wlroots.spec +++ b/wlroots.spec @@ -1,4 +1,4 @@ -%global commit 0.1 +%global commit 0.5.0 %global gitdate %{nil} %global gitrel %{nil} %global gitver %{nil} @@ -8,37 +8,25 @@ #global gitver -#{gitdate}git#{scommit} -%global api_ver 0 +%global api_ver 2 Name: wlroots -Version: 0.1 -Release: 5%{?gitrel}%{?dist} +Version: 0.5.0 +Release: 1%{?gitrel}%{?dist} Summary: A modular Wayland compositor library -# All files in the sources are licensed as MIT, but +# Source files/overall project licensed as MIT, but # - LGPL (v2.1 or later) # * protocol/idle.xml # * protocol/server-decoration.xml -# - NTP (legal disclaimer) -# * protocol/gamma-control.xml -# * protocol/text-input-unstable-v3.xml -# * protocol/wlr-gamma-control-unstable-v1.xml -# * protocol/wlr-input-inhibitor-unstable-v1.xml -# * protocol/wlr-layer-shell-unstable-v1.xml -# -# Those files are processed to c-compilable files by the +# Those files are processed to C-compilable files by the # `wayland-scanner` binary during build and don't alter the # main license of the binaries linking with them by the # underlying licenses. License: MIT URL: https://github.com/swaywm/%{name} Source0: %{url}/archive/%{commit}.tar.gz#/%{name}-%{version}%{?gitver}.tar.gz -Patch0: %{url}/commit/be6210cf8216c08a91e085dac0ec11d0e34fb217.patch#/pkgconfig_version.patch -Patch1: %{url}/commit/5d26da9d15d4874c383bbc9948a802fcd605dc8b.patch#/data-device-multiple_per_seat.patch -Patch2: %{url}/commit/4423f88fac1d82756bab451f451b159fa6d0e9f5.patch#/data-device-no_cancel_on_destroy.patch -Patch3: %{url}/commit/b9a2e4ba4c92cd4c19f8cf5ed7e6603731eca9ab.patch#/gtk-primary-selection_multiple_devices.patch -Patch4: %{url}/commit/eaafd65a12d6b15cc8e503ef6e9e99a65bd1e791.patch#/gtk-primary-selection-track_resources.patch BuildRequires: gcc @@ -58,7 +46,7 @@ BuildRequires: wayland-protocols-devel BuildRequires: xcb-util-image-devel BuildRequires: xcb-util-wm-devel # patch application -BuildRequires: git +#BuildRequires: git %description %{summary}. @@ -82,20 +70,17 @@ Development files for %{name}. %prep -%define __scm git_am -%autosetup -n %{name}-%{commit} -p 1 +%setup -q -n %{name}-%{commit} +#global __scm git_am +#__scm_setup_git +#autopatch -p1 %build # Needed since xcb-errors is not packaged (yet?) %global __meson_auto_features auto - -%ifarch %{arm} %{ix86} -export CFLAGS="%{optflags} -Wno-error=format=" -export CXXFLAGS="%{optflags} -Wno-error=format=" -%endif -%meson +%meson -Drootston=false -Dexamples=false %meson_build @@ -106,20 +91,11 @@ export CXXFLAGS="%{optflags} -Wno-error=format=" %{__mkdir} -p %{buildroot}%{_pkgdocdir} %{__cp} -pr README.md examples %{buildroot}%{_pkgdocdir} -# Cleanup. -for f in '.*ignore*' meson.build; do - %{_bindir}/find %{buildroot} -type f -name "$f" -print -delete -done - %check %meson_test -# Needed only for < F28 -%ldconfig_scriptlets - - %files %doc %dir %{_pkgdocdir} %doc %{_pkgdocdir}/README.md @@ -135,6 +111,12 @@ done %changelog +* Thu Mar 14 2019 Jan Pokorný - 0.5.0-1 +- Updated to version 0.5.0 (0.2, 0.3, 0.4, 0.4.1 releases effectively skipped) +- Avoid building some parts that are not shipped in binary form, anyway +- Minor spec cleanup (clarify the licensing comment, licensecheck's NTP ~ MIT, + ldconfig_scriptlets no longer relevant, arch-specific tweak no longer needed) + * Sun Feb 03 2019 Fedora Release Engineering - 0.1-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild