Compare commits
No commits in common. "rawhide" and "f30" have entirely different histories.
11 changed files with 902 additions and 490 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,2 +1 @@
|
|||
/wlroots-*.tar.gz
|
||||
/wlroots-*.tar.gz.sig
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
From e021326f7de0505fcae85f5732885848b21edf9c Mon Sep 17 00:00:00 2001
|
||||
From: Aleksei Bavshin <alebastr89@gmail.com>
|
||||
Date: Sat, 25 Jun 2022 21:22:08 -0700
|
||||
Subject: [PATCH] Revert "layer-shell: error on 0 dimension without anchors"
|
||||
|
||||
This reverts commit 8dec751a6d84335fb04288b8efab6dd5c90288d3.
|
||||
---
|
||||
types/wlr_layer_shell_v1.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/types/wlr_layer_shell_v1.c b/types/wlr_layer_shell_v1.c
|
||||
index 2d838498..c3c50d78 100644
|
||||
--- a/types/wlr_layer_shell_v1.c
|
||||
+++ b/types/wlr_layer_shell_v1.c
|
||||
@@ -358,6 +358,7 @@ static void layer_surface_role_client_commit(struct wlr_surface *wlr_surface) {
|
||||
|
||||
uint32_t anchor = surface->pending.anchor;
|
||||
|
||||
+#if 0
|
||||
const uint32_t horiz = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
|
||||
ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
|
||||
if (surface->pending.desired_width == 0 && (anchor & horiz) != horiz) {
|
||||
@@ -375,6 +376,7 @@ static void layer_surface_role_client_commit(struct wlr_surface *wlr_surface) {
|
||||
"height 0 requested without setting top and bottom anchors");
|
||||
return;
|
||||
}
|
||||
+#endif
|
||||
|
||||
if ((anchor & surface->pending.exclusive_edge) != surface->pending.exclusive_edge) {
|
||||
wlr_surface_reject_pending(wlr_surface, surface->resource,
|
||||
--
|
||||
2.49.0
|
||||
|
||||
464
data-device-multiple_per_seat.patch
Normal file
464
data-device-multiple_per_seat.patch
Normal file
|
|
@ -0,0 +1,464 @@
|
|||
From 5d26da9d15d4874c383bbc9948a802fcd605dc8b Mon Sep 17 00:00:00 2001
|
||||
From: emersion <contact@emersion.fr>
|
||||
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 <wayland-server.h>
|
||||
#include <wlr/types/wlr_seat.h>
|
||||
|
||||
-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,
|
||||
24
data-device-no_cancel_on_destroy.patch
Normal file
24
data-device-no_cancel_on_destroy.patch
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
From 4423f88fac1d82756bab451f451b159fa6d0e9f5 Mon Sep 17 00:00:00 2001
|
||||
From: emersion <contact@emersion.fr>
|
||||
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:
|
||||
|
|
@ -1,139 +0,0 @@
|
|||
# Client examples are now available from a separate repository,
|
||||
# https://gitlab.freedesktop.org/wlroots/wlr-clients
|
||||
project(
|
||||
'wlroots-examples',
|
||||
'c',
|
||||
meson_version: '>=0.58.0',
|
||||
default_options: [
|
||||
'c_std=c11',
|
||||
'warning_level=2',
|
||||
'werror=false',
|
||||
],
|
||||
)
|
||||
|
||||
add_project_arguments([
|
||||
'-D_POSIX_C_SOURCE=200809L',
|
||||
'-DWLR_USE_UNSTABLE',
|
||||
], language: 'c')
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
add_project_arguments(cc.get_supported_arguments([
|
||||
'-Wno-missing-braces',
|
||||
'-Wno-missing-field-initializers',
|
||||
'-Wno-unused-parameter'
|
||||
]), language: 'c')
|
||||
|
||||
cairo = dependency('cairo')
|
||||
drm = dependency('libdrm')
|
||||
egl = dependency('egl')
|
||||
glesv2 = dependency('glesv2')
|
||||
# Only needed for drm_fourcc.h
|
||||
libdrm = dependency('libdrm').partial_dependency(compile_args: true, includes: true)
|
||||
wayland_client = dependency('wayland-client')
|
||||
wayland_egl = dependency('wayland-egl')
|
||||
wayland_protos = dependency('wayland-protocols', version: '>=1.27')
|
||||
wayland_scanner_dep = dependency('wayland-scanner', native: true)
|
||||
wayland_scanner = find_program(
|
||||
wayland_scanner_dep.get_variable('wayland_scanner'),
|
||||
native: true,
|
||||
)
|
||||
wayland_server = dependency('wayland-server')
|
||||
wlroots = dependency('wlroots-0.20')
|
||||
xkbcommon = dependency('xkbcommon')
|
||||
|
||||
wl_protocol_dir = wayland_protos.get_variable('pkgdatadir')
|
||||
|
||||
protocols = {
|
||||
# Stable upstream protocols
|
||||
'xdg-shell': wl_protocol_dir / 'stable/xdg-shell/xdg-shell.xml',
|
||||
}
|
||||
|
||||
protocols_code = {}
|
||||
protocols_server_header = {}
|
||||
protocols_client_header = {}
|
||||
|
||||
foreach name, path : protocols
|
||||
code = custom_target(
|
||||
name.underscorify() + '_c',
|
||||
input: path,
|
||||
output: '@BASENAME@-protocol.c',
|
||||
command: [wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'],
|
||||
)
|
||||
|
||||
server_header = custom_target(
|
||||
name.underscorify() + '_server_h',
|
||||
input: path,
|
||||
output: '@BASENAME@-protocol.h',
|
||||
command: [wayland_scanner, 'server-header', '@INPUT@', '@OUTPUT@'],
|
||||
)
|
||||
|
||||
client_header = custom_target(
|
||||
name.underscorify() + '_client_h',
|
||||
input: path,
|
||||
output: '@BASENAME@-client-protocol.h',
|
||||
command: [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'],
|
||||
build_by_default: false,
|
||||
)
|
||||
|
||||
protocols_code += { name: code }
|
||||
protocols_server_header += { name: server_header }
|
||||
protocols_client_header += { name: client_header }
|
||||
endforeach
|
||||
|
||||
|
||||
compositors = {
|
||||
'simple': {
|
||||
'src': 'simple.c',
|
||||
},
|
||||
'pointer': {
|
||||
'src': 'pointer.c',
|
||||
},
|
||||
'touch': {
|
||||
'src': ['touch.c', 'cat.c'],
|
||||
},
|
||||
'tablet': {
|
||||
'src': 'tablet.c',
|
||||
},
|
||||
'rotation': {
|
||||
'src': ['rotation.c', 'cat.c'],
|
||||
},
|
||||
'output-layout': {
|
||||
'src': ['output-layout.c', 'cat.c'],
|
||||
},
|
||||
'scene-graph': {
|
||||
'src': 'scene-graph.c',
|
||||
'proto': ['xdg-shell'],
|
||||
},
|
||||
'output-layers': {
|
||||
'src': 'output-layers.c',
|
||||
'proto': [
|
||||
'xdg-shell',
|
||||
],
|
||||
},
|
||||
'cairo-buffer': {
|
||||
'src': 'cairo-buffer.c',
|
||||
'dep': cairo,
|
||||
},
|
||||
'embedded': {
|
||||
'src': [
|
||||
'embedded.c',
|
||||
protocols_code['xdg-shell'],
|
||||
protocols_client_header['xdg-shell'],
|
||||
],
|
||||
'dep': [wayland_client, wayland_egl, egl, glesv2],
|
||||
},
|
||||
}
|
||||
|
||||
foreach name, info : compositors
|
||||
extra_src = []
|
||||
foreach p : info.get('proto', [])
|
||||
extra_src += protocols_server_header[p]
|
||||
endforeach
|
||||
|
||||
executable(
|
||||
name,
|
||||
[info.get('src'), extra_src],
|
||||
dependencies: [libdrm, wlroots, wayland_server, xkbcommon, info.get('dep', [])],
|
||||
)
|
||||
endforeach
|
||||
Binary file not shown.
84
gtk-primary-selection-track_resources.patch
Normal file
84
gtk-primary-selection-track_resources.patch
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
From eaafd65a12d6b15cc8e503ef6e9e99a65bd1e791 Mon Sep 17 00:00:00 2001
|
||||
From: emersion <contact@emersion.fr>
|
||||
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);
|
||||
}
|
||||
215
gtk-primary-selection_multiple_devices.patch
Normal file
215
gtk-primary-selection_multiple_devices.patch
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
From b9a2e4ba4c92cd4c19f8cf5ed7e6603731eca9ab Mon Sep 17 00:00:00 2001
|
||||
From: emersion <contact@emersion.fr>
|
||||
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;
|
||||
22
pkgconfig_version.patch
Normal file
22
pkgconfig_version.patch
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
From be6210cf8216c08a91e085dac0ec11d0e34fb217 Mon Sep 17 00:00:00 2001
|
||||
From: emersion <contact@emersion.fr>
|
||||
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: [
|
||||
3
sources
3
sources
|
|
@ -1,2 +1 @@
|
|||
SHA512 (wlroots-0.20.2.tar.gz) = 634345e23d0b6c28cb501c0dd0ef9c50d529a92ae5c8455e99e876f3f37ee244ac19dd097f76416b2ae4fd7c3f02e39a92a9322cf5a0caf8da21c31cd900e508
|
||||
SHA512 (wlroots-0.20.2.tar.gz.sig) = e74dc0abfabed7f40ba4f0e5edfc30ef92b95ebcf4a6aca3b2a605b04b5f2345a6a842cdf56819ce1f050c6181b646eae19dbef835354df7b09562cebbdaa474
|
||||
SHA512 (wlroots-0.1.tar.gz) = 43897ac5a512ea26ad9703182dab5de9c714a087449b108472f638148538a632a67cfc778edf3e77940fdd7bdba91d64a4dc4e4ed1903a150f13ca59237ce01e
|
||||
|
|
|
|||
407
wlroots.spec
407
wlroots.spec
|
|
@ -1,88 +1,64 @@
|
|||
# Version of the .so library
|
||||
%global abi_ver 0.20
|
||||
# libliftoff does not bump soname on API changes
|
||||
%global liftoff_ver 0.5.0
|
||||
%global commit 0.1
|
||||
%global gitdate %{nil}
|
||||
%global gitrel %{nil}
|
||||
%global gitver %{nil}
|
||||
# Keep the below around for possible snapshot times (was a must prior to 0.1)
|
||||
#global scommit #(c=#{commit}; echo ${c:0:7})
|
||||
#global gitrel .#{gitdate}git#{scommit}
|
||||
#global gitver -#{gitdate}git#{scommit}
|
||||
|
||||
|
||||
%global api_ver 0
|
||||
|
||||
|
||||
Name: wlroots
|
||||
Version: 0.20.2
|
||||
Release: 2%{?dist}
|
||||
Version: 0.1
|
||||
Release: 5%{?gitrel}%{?dist}
|
||||
Summary: A modular Wayland compositor library
|
||||
|
||||
%global tag %{gsub %{version} ~ -}
|
||||
|
||||
# Source files/overall project licensed as MIT, but
|
||||
# - HPND-sell-variant
|
||||
# * protocol/drm.xml
|
||||
# * protocol/wlr-data-control-unstable-v1.xml
|
||||
# * protocol/wlr-foreign-toplevel-management-unstable-v1.xml
|
||||
# All files in the sources are 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
|
||||
# * protocol/wlr-output-management-unstable-v1.xml
|
||||
# - LGPL-2.1-or-later
|
||||
# * protocol/server-decoration.xml
|
||||
# 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.
|
||||
#
|
||||
# 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://gitlab.freedesktop.org/wlroots/wlroots
|
||||
Source0: %{url}/-/releases/%{tag}/downloads/%{name}-%{tag}.tar.gz
|
||||
Source1: %{url}/-/releases/%{tag}/downloads/%{name}-%{tag}.tar.gz.sig
|
||||
# 0FDE7BE0E88F5E48: emersion <contact@emersion.fr>
|
||||
Source2: https://emersion.fr/.well-known/openpgpkey/hu/dj3498u4hyyarh35rkjfnghbjxug6b19#/gpgkey-0FDE7BE0E88F5E48.gpg
|
||||
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
|
||||
|
||||
# this file is a modification of examples/meson.build so as to:
|
||||
# - make it self-contained
|
||||
# - only has targets for examples known to compile well (cf. "examples) global)
|
||||
Source3: examples.meson.build
|
||||
|
||||
# Upstream patches
|
||||
|
||||
# Fedora patches
|
||||
# Following patch is required for phoc.
|
||||
Patch: Revert-layer-shell-error-on-0-dimension-without-anch.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: glslang
|
||||
BuildRequires: gnupg2
|
||||
BuildRequires: meson >= 1.3
|
||||
|
||||
BuildRequires: (pkgconfig(libliftoff) >= %{liftoff_ver} with pkgconfig(libliftoff) < 0.6)
|
||||
BuildRequires: pkgconfig(egl)
|
||||
BuildRequires: pkgconfig(gbm) >= 21.1
|
||||
BuildRequires: pkgconfig(glesv2)
|
||||
BuildRequires: pkgconfig(hwdata)
|
||||
BuildRequires: pkgconfig(lcms2)
|
||||
BuildRequires: pkgconfig(libdisplay-info) >= 0.2.0
|
||||
BuildRequires: pkgconfig(libdrm) >= 2.4.129
|
||||
BuildRequires: pkgconfig(libinput) >= 1.21.0
|
||||
BuildRequires: pkgconfig(libseat)
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
BuildRequires: pkgconfig(pixman-1) >= 0.46.0
|
||||
BuildRequires: pkgconfig(vulkan) >= 1.2.182
|
||||
BuildRequires: pkgconfig(wayland-client)
|
||||
BuildRequires: pkgconfig(wayland-protocols) >= 1.47
|
||||
BuildRequires: pkgconfig(wayland-scanner)
|
||||
BuildRequires: pkgconfig(wayland-server) >= 1.24.0
|
||||
BuildRequires: pkgconfig(x11-xcb)
|
||||
BuildRequires: pkgconfig(xcb)
|
||||
BuildRequires: pkgconfig(xcb-composite)
|
||||
BuildRequires: pkgconfig(xcb-dri3)
|
||||
BuildRequires: pkgconfig(xcb-errors)
|
||||
BuildRequires: pkgconfig(xcb-ewmh)
|
||||
BuildRequires: pkgconfig(xcb-icccm)
|
||||
BuildRequires: pkgconfig(xcb-present)
|
||||
BuildRequires: pkgconfig(xcb-render)
|
||||
BuildRequires: pkgconfig(xcb-renderutil)
|
||||
BuildRequires: pkgconfig(xcb-res)
|
||||
BuildRequires: pkgconfig(xcb-shm)
|
||||
BuildRequires: pkgconfig(xcb-xfixes) >= 1.15
|
||||
BuildRequires: pkgconfig(xcb-xinput)
|
||||
BuildRequires: pkgconfig(xkbcommon) >= 1.8.0
|
||||
BuildRequires: pkgconfig(xwayland)
|
||||
# libliftoff does not bump soname on API changes
|
||||
Requires: libliftoff%{?_isa} >= %{liftoff_ver}
|
||||
BuildRequires: libcap-devel
|
||||
BuildRequires: libinput-devel
|
||||
BuildRequires: libpng
|
||||
BuildRequires: libxkbcommon-devel
|
||||
BuildRequires: mesa-libEGL-devel
|
||||
BuildRequires: mesa-libGLES-devel
|
||||
BuildRequires: mesa-libgbm-devel
|
||||
BuildRequires: mesa-libwayland-egl-devel
|
||||
BuildRequires: meson
|
||||
BuildRequires: pixman-devel
|
||||
BuildRequires: systemd-devel
|
||||
BuildRequires: wayland-devel
|
||||
BuildRequires: wayland-protocols-devel
|
||||
BuildRequires: xcb-util-image-devel
|
||||
BuildRequires: xcb-util-wm-devel
|
||||
# patch application
|
||||
BuildRequires: git
|
||||
|
||||
%description
|
||||
%{summary}.
|
||||
|
|
@ -90,274 +66,75 @@ Requires: libliftoff%{?_isa} >= %{liftoff_ver}
|
|||
|
||||
%package devel
|
||||
Summary: Development files for %{name}
|
||||
|
||||
Requires: %{name}%{?_isa} == %{version}-%{release}
|
||||
# not required per se, so not picked up automatically by RPM
|
||||
Recommends: pkgconfig(xcb-icccm)
|
||||
# for examples
|
||||
Suggests: gcc
|
||||
Suggests: meson >= 0.58.0
|
||||
Suggests: pkgconfig(wayland-egl)
|
||||
Requires: libinput-devel%{?_isa}
|
||||
Requires: libxcb-devel%{?_isa}
|
||||
Requires: libxkbcommon-devel%{?_isa}
|
||||
Requires: mesa-libEGL-devel%{?_isa}
|
||||
Requires: pixman-devel%{?_isa}
|
||||
Requires: systemd-devel%{?_isa}
|
||||
Requires: wayland-devel%{?_isa}
|
||||
Requires: xcb-util-wm-devel%{?_isa}
|
||||
|
||||
%description devel
|
||||
Development files for %{name}.
|
||||
|
||||
|
||||
%prep
|
||||
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
|
||||
%autosetup -N -n %{name}-%{tag}
|
||||
# apply unconditional patches (0..99)
|
||||
%autopatch -p1 -M99
|
||||
# apply conditional patches (100..)
|
||||
%define __scm git_am
|
||||
%autosetup -n %{name}-%{commit} -p 1
|
||||
|
||||
|
||||
%build
|
||||
MESON_OPTIONS=(
|
||||
# Disable options requiring extra/unpackaged dependencies
|
||||
-Dexamples=false
|
||||
)
|
||||
|
||||
%{meson} "${MESON_OPTIONS[@]}"
|
||||
%{meson_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_build
|
||||
|
||||
|
||||
%install
|
||||
%{meson_install}
|
||||
install -pm0644 -Dt '%{buildroot}/%{_pkgdocdir}/examples' examples/*.[ch]
|
||||
install -pm0644 -D '%{SOURCE3}' '%{buildroot}/%{_pkgdocdir}/examples/meson.build'
|
||||
%meson_install
|
||||
|
||||
# %%doc && examples.
|
||||
%{__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}
|
||||
%meson_test
|
||||
|
||||
|
||||
# Needed only for < F28
|
||||
%ldconfig_scriptlets
|
||||
|
||||
|
||||
%files
|
||||
%doc %dir %{_pkgdocdir}
|
||||
%doc %{_pkgdocdir}/README.md
|
||||
%license LICENSE
|
||||
%doc README.md
|
||||
%{_libdir}/libwlroots-%{abi_ver}.so
|
||||
%{_libdir}/lib%{name}.so.%{api_ver}*
|
||||
|
||||
|
||||
%files devel
|
||||
%files devel
|
||||
%doc %{_pkgdocdir}/examples
|
||||
%{_includedir}/wlroots-%{abi_ver}/wlr
|
||||
%{_libdir}/pkgconfig/wlroots-%{abi_ver}.pc
|
||||
%{_includedir}/wlr
|
||||
%{_libdir}/lib%{name}.so
|
||||
%{_libdir}/pkgconfig/%{name}.pc
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.20.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
|
||||
|
||||
* Tue Jul 07 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.20.2-1
|
||||
- Update to 0.20.2 (#2497891)
|
||||
|
||||
* Tue May 19 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.20.1-1
|
||||
- Update to 0.20.1 (#2480014)
|
||||
|
||||
* Thu Mar 26 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.20.0-1
|
||||
- Update to 0.20.0 (#2435845)
|
||||
|
||||
* Thu Mar 19 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.20.0~rc5-1
|
||||
- Update to 0.20.0-rc5
|
||||
|
||||
* Sat Feb 14 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.20.0~rc2-1
|
||||
- Update to 0.20.0-rc2
|
||||
|
||||
* Thu Feb 12 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.19.2-4
|
||||
- Apply upstream patch for libinput 1.31 compatibility
|
||||
|
||||
* Sat Jan 24 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.19.2-3
|
||||
- Rebuild for libdisplay-info 0.3.0
|
||||
|
||||
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.19.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||
|
||||
* Tue Oct 21 2025 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.19.2-1
|
||||
- Update to 0.19.2 (#2405567)
|
||||
|
||||
* Sun Sep 28 2025 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.19.1-2
|
||||
- Apply upstream patch for crash on disabling outputs
|
||||
|
||||
* Sun Sep 21 2025 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.19.1-1
|
||||
- Update to 0.19.1 (#2397203)
|
||||
|
||||
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.19.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Fri May 16 2025 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.19.0-1
|
||||
- Update to 0.19.0 (#2359256)
|
||||
|
||||
* Sat Feb 15 2025 Sam Day <me@samcday.com> - 0.18.2-4
|
||||
- Add wlroots!4985 patch needed by phoc 0.45.0
|
||||
|
||||
* Mon Feb 10 2025 Neal Gompa <ngompa@fedoraproject.org> - 0.18.2-3
|
||||
- Rebuild for libdisplay-info 0.2.0
|
||||
|
||||
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.18.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Wed Dec 11 2024 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.18.2-1
|
||||
- Update to 0.18.2 (#2331871)
|
||||
|
||||
* Fri Sep 20 2024 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.18.1-1
|
||||
- Update to 0.18.1 (#2313753)
|
||||
|
||||
* Thu Aug 08 2024 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.18.0-1
|
||||
- Update to 0.18.0 (#2297921)
|
||||
|
||||
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.17.4-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Sat Jun 29 2024 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.17.4-1
|
||||
- Update to 0.17.4 (#2294793)
|
||||
|
||||
* Fri Apr 26 2024 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.17.3-1
|
||||
- Update to 0.17.3
|
||||
|
||||
* Mon Mar 11 2024 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.17.2-1
|
||||
- Update to 0.17.2 (#2269046)
|
||||
|
||||
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.17.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Thu Dec 21 2023 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.17.1-1
|
||||
- Update to 0.17.1 (#2255547)
|
||||
|
||||
* Tue Nov 21 2023 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.17.0-1
|
||||
- Update to 0.17.0 (#2250885)
|
||||
- Use xcb-errors util library
|
||||
- Apply patches from 0.17.x bugfix branch
|
||||
|
||||
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.16.2-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Sun Apr 16 2023 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.16.2-2
|
||||
- Apply upstream patch to remove hardcoded Vulkan validation layers
|
||||
|
||||
* Fri Feb 10 2023 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.16.2-1
|
||||
- Update to 0.16.2 (#2168992)
|
||||
|
||||
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.16.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Sun Dec 25 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.16.1-1
|
||||
- Update to 0.16.1
|
||||
|
||||
* Fri Dec 02 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.16.0-1
|
||||
- Update to 0.16.0 (#2142159)
|
||||
- Add patch for compatibility with older libdrm
|
||||
- Sync examples.meson.build with upstream, include all available examples
|
||||
|
||||
* Mon Nov 14 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.1-5
|
||||
- Backport upstream crash fix (#2142447)
|
||||
- Convert license to SPDX
|
||||
|
||||
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.15.1-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Sun Jun 26 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.1-3
|
||||
- Add patches required for phoc 0.20
|
||||
|
||||
* Wed Jun 01 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.1-2
|
||||
- Drop patches for wayland 1.19 compatibility
|
||||
|
||||
* Sat Feb 05 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.1-1
|
||||
- Update to 0.15.1 (#2050408)
|
||||
|
||||
* Tue Jan 25 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.0-3
|
||||
- Backport fix for permission popups in Firefox
|
||||
|
||||
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.15.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Sun Jan 16 2022 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.0-1
|
||||
- Update to 0.15.0 (#2033651)
|
||||
- Update upstream URL to gitlab.freedesktop.org
|
||||
- Backport some patches from 0.15.1 milestone
|
||||
|
||||
* Mon Dec 13 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.14.1-3
|
||||
- Add patch for disappearing cursor issue (#2027431)
|
||||
|
||||
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.14.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Thu Jul 08 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.14.1-1
|
||||
- Update to wlroots 0.14.1
|
||||
|
||||
* Wed Jul 07 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.14.0-2
|
||||
- Add patch for a few more issues with cursors, multi-GPUs and nouveau
|
||||
|
||||
* Wed Jun 23 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.14.0-1
|
||||
- Update to 0.14.0
|
||||
- Add upstream patch for cursor issues on scaled outputs
|
||||
|
||||
* Tue Jun 01 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.13.0-2
|
||||
- Enable libseat session backend
|
||||
|
||||
* Wed Apr 07 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.13.0-1
|
||||
- Update to 0.13.0 (#1947218)
|
||||
|
||||
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.12.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Sun Nov 08 2020 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.12.0-1
|
||||
- Updated to version 0.12.0
|
||||
|
||||
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Wed Jul 15 2020 Aleksei Bavshin <alebastr89@gmail.com> - 0.11.0-1
|
||||
- Updated to version 0.11.0
|
||||
|
||||
* Sat May 09 2020 Till Hofmann <thofmann@fedoraproject.org> - 0.10.1-2
|
||||
- Add patch from upstream #2167 to fix #1829212
|
||||
|
||||
* Tue Mar 24 2020 Nikhil Jha <hi@nikhiljha.com> - 0.10.1-1
|
||||
- Updated to version 0.10.1 (https://github.com/swaywm/wlroots/releases/tag/0.10.1)
|
||||
|
||||
* Mon Feb 10 2020 Jan Staněk <jstanek@redhat.com> - 0.10.0-6
|
||||
- Propagate mesa-libEGL-devel workaround to -devel requirements
|
||||
|
||||
* Sat Feb 08 2020 Simone Caronni <negativo17@gmail.com> - 0.10.0-5
|
||||
- RDP backend is no longer in wlroots 0.10.
|
||||
|
||||
* Fri Feb 07 2020 Simone Caronni <negativo17@gmail.com> - 0.10.0-4
|
||||
- Rebuild for updated FreeRDP.
|
||||
|
||||
* Tue Feb 04 2020 Jan Staněk <jstanek@redhat.com> - 0.10.0-3
|
||||
- Disable -Werror compilation flag on s390x
|
||||
(https://github.com/swaywm/wlroots/issues/2018)
|
||||
|
||||
* Wed Jan 29 2020 Jan Staněk <jstanek@redhat.com> - 0.10.0-2
|
||||
- Backport fix for compilation with GCC 10
|
||||
|
||||
* Tue Jan 28 2020 Joe Walker <grumpey0@gmail.com> - 0.10.0
|
||||
- Updated to version 0.10.0 (https://github.com/swaywm/wlroots/releases/tag/0.10.0)
|
||||
|
||||
Mon Jan 20 2020 Jan Staněk <jstanek@redhat.com> - 0.9.1-1
|
||||
- Upgrade to version 0.9.1 (https://github.com/swaywm/wlroots/releases/tag/0.9.1)
|
||||
|
||||
* Thu Sep 12 2019 Jan Staněk <jstanek@redhat.com> - 0.7.0-2
|
||||
- Spec file cleanup
|
||||
|
||||
* Thu Aug 29 2019 Jeff Peeler <jpeeler@redhat.com> - 0.7.0-1
|
||||
- Updated to version 0.7.0
|
||||
|
||||
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Thu May 09 2019 Jan Pokorný <jpokorny+rpm-wlroots@fedoraproject.org> - 0.6.0-1
|
||||
- Updated to version 0.6.0
|
||||
(see https://github.com/swaywm/wlroots/releases/tag/0.6.0)
|
||||
- Overhaul dependencies and shipped examples in -devel
|
||||
|
||||
* Tue Apr 16 2019 Adam Williamson <awilliam@redhat.com> - 0.5.0-2
|
||||
- Rebuild with Meson fix for #1699099
|
||||
|
||||
* Thu Mar 14 2019 Jan Pokorný <jpokorny+rpm-wlroots@fedoraproject.org> - 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 <releng@fedoraproject.org> - 0.1-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue