Compare commits

..

78 commits

Author SHA1 Message Date
Fedora Release Engineering
e479909c1d Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-17 08:52:15 +00:00
b7b643804e
Update to 0.20.2 (#2497891) 2026-07-07 20:03:34 -07:00
9e3cf5a0cf
Update to 0.20.1 (#2480014) 2026-05-19 22:46:13 -07:00
460ac43350
Update to 0.20.0 (#2435845) 2026-03-26 19:27:15 -07:00
07351d6b73
Update to 0.20.0~rc5 2026-03-19 19:10:08 -07:00
75918f6d7d
Update to 0.20.0-rc2 2026-02-16 01:02:35 -08:00
5035af13d4
Apply upstream patch for libinput 1.31 compatibility 2026-02-12 19:15:32 -08:00
2ea14ebe8e
Rebuild for libdisplay-info 0.3.0 2026-01-24 16:45:59 -08:00
Fedora Release Engineering
6d290402fb Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-17 20:18:14 +00:00
Yaakov Selkowitz
4b409cc451 Fix discarded const qualifier warnings with GCC 15
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5203
2025-12-22 23:45:46 -05:00
69922850bd
Update to 0.19.2 (#2405567) 2025-10-21 23:14:08 -07:00
a034b0be85
Apply upstream patch for crash on disabling outputs 2025-09-28 14:39:43 -07:00
00b7c19be8
Update to 0.19.1 (#2397203) 2025-09-21 14:52:42 -07:00
Fedora Release Engineering
b11c779550 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 20:29:00 +00:00
6442a76f36
Update to 0.19.0 (#2359256) 2025-05-16 18:32:23 -07:00
Sam Day
6eb9ee5920 Add MR!4985 backport patch needed by phoc 0.45
This patch has already merged into mainline and the 0.18 branch
upstream, but has not yet been released. It can be dropped in 0.18.3

Signed-off-by: Sam Day <me@samcday.com>
2025-02-15 16:17:03 +01:00
f55f4ba70e Rebuild for libdisplay-info 0.2.0
Rebuild for libdisplay-info 0.2.0
2025-02-10 09:59:49 -05:00
Fedora Release Engineering
373ca6b1b1 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-19 15:08:37 +00:00
8826828a2a
Update to 0.18.2 (#2331871) 2024-12-11 16:55:49 -08:00
ebd7df88f6
Update to 0.18.1 (#2313753) 2024-09-20 07:37:51 -07:00
a00f488860
Update to 0.18.0 (#2297921) 2024-08-08 21:06:11 -07:00
Fedora Release Engineering
135263e28d Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-20 09:26:58 +00:00
17b823e3fa
Update to 0.17.4 (#2294793) 2024-06-30 20:56:17 -07:00
06e8851845
Update to 0.17.3 2024-04-26 12:07:13 -07:00
82fa7cf455
Update to 0.17.2 (#2269046) 2024-03-11 18:25:01 -07:00
Fedora Release Engineering
5167a5eda8 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-27 08:58:43 +00:00
bf56e9526c
Apply patch for GCC 14 -Werror=calloc-transposed-args 2024-01-18 00:20:43 -08:00
99aa7067f0
Update to 0.17.1 (#2255547) 2023-12-21 17:04:14 -08:00
bb0224f81e
Apply patches from 0.17.x bugfix branch 2023-12-07 21:06:32 -08:00
000c5dbb93
Update to 0.17.0 (#2250885) 2023-12-02 22:24:52 -08:00
0a1c111cc7
Use xcb-errors util library 2023-12-02 22:24:26 -08:00
Fedora Release Engineering
23ecf089bf Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-22 18:17:22 +00:00
1a73f49d48
Apply upstream patch to remove hardcoded Vulkan validation layers 2023-04-16 17:30:02 -07:00
592cea998f
Update to 0.16.2 (#2168992) 2023-02-10 18:04:40 -08:00
Fedora Release Engineering
6bef925b32 Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-21 06:54:22 +00:00
b32c37f87e
Update to 0.16.1 2022-12-25 08:14:54 -08:00
4a23fc87a5
Sync examples.meson.build with upstream
Include all available examples
2022-12-02 22:27:24 -08:00
83a52a2862
Add patch for compatibility with older libdrm 2022-12-02 22:06:59 -08:00
3993c57fb9
Update to 0.16.0 (#2142159) 2022-12-02 22:06:32 -08:00
b335d4dcb8
Backport upstream crash fix (#2142447)
Convert license to SPDX
2022-11-14 22:12:28 -08:00
Fedora Release Engineering
1a00ea2887 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-23 12:31:39 +00:00
7d27b16e6f
Add patches required for phoc 0.20 2022-06-25 21:36:34 -07:00
f6055261c4
Drop patches for wayland 1.19 compatibility 2022-06-01 23:03:15 -07:00
dd99a05c7c
Update to 0.15.1 (#2050408) 2022-02-05 12:14:54 -08:00
85be0c54f5
Backport fix for permission popups in Firefox 2022-01-25 21:58:24 -08:00
Fedora Release Engineering
1cfc160ee9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-22 04:34:11 +00:00
bb8828c42e
Update to 0.15.0 (#2033651)
Update upstream URL to gitlab.freedesktop.org
Backport some patches from 0.15.1 milestone
2022-01-16 12:15:13 -08:00
6e6fd8595c
Add patch for disappearing cursor issue (#2027431) 2021-12-12 23:23:09 -08:00
Fedora Release Engineering
efcd328a64 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-23 21:02:27 +00:00
56f8584382
Update to 0.14.1 2021-07-08 18:30:03 -07:00
308144da42
Add patch for a few more issues with cursors, multi-GPUs and nouveau 2021-07-06 20:51:39 -07:00
951089d063
Add upstream patch for cursor issues on scaled outputs 2021-07-02 19:31:12 -07:00
cce4bb6f04
Update to 0.14.0 2021-06-23 13:10:01 +00:00
73a757baf6
Update upstream gpg key.
Verified key from <contact@emersion.fr>.
2021-06-23 12:52:17 +00:00
78482a2e9b
Enable libseat session backend 2021-06-02 04:23:58 +00:00
3f0980914c
Update to 0.13.0 2021-04-08 02:59:49 +00:00
Fedora Release Engineering
e0af634394 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-27 23:35:08 +00:00
b71becc897
Updated to version 0.12.0 2020-11-08 22:40:59 +00:00
Fedora Release Engineering
7acdd30c66 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-29 14:14:01 +00:00
Aleksei Bavshin
d95a381cb9
Updated to version 0.11.0 2020-07-15 23:04:59 +00:00
Aleksei Bavshin
a31064cd7f
Add source verification and update build dependencies 2020-07-09 02:24:07 +00:00
Till Hofmann
740b663d5f Add patch from upstream #2167 to fix #1829212 2020-05-31 09:40:35 +02:00
Nikhil Jha
174059980c Updated to version 0.10.1 (https://github.com/swaywm/wlroots/releases/tag/0.10.1) 2020-03-25 09:37:29 -07:00
Jan Staněk
7b0365d35c
Propagate mesa-libEGL-devel workaround to -devel requirements
The manual BR for mesa-libEGL-devel does not propagate by default
to Requires of the devel subpackage.
As a result, the worked-around issue manifests again
in the wlroots dependents,
unless the Requires is also added manually.
2020-02-10 12:26:28 +01:00
Simone Caronni
413632768e RDP backend is no longer in wlroots 0.10 2020-02-08 16:35:23 +01:00
Simone Caronni
0ac0c0b9ab Rebuild for updated FreeRDP 2020-02-07 18:32:21 +01:00
Jan Staněk
d9f0c321d1
Disable -Werror compilation flag on s390x
Upstream issue: https://github.com/swaywm/wlroots/issues/2018
2020-02-04 16:25:47 +01:00
Jan Staněk
43813c3a3d
Backport fix for compilation with GCC 10
- Remove extra whitespace from sources
2020-01-29 12:37:19 +01:00
grumpey
728e4bb7c6 Correcting Date and removing roootson option 2020-01-28 21:12:34 -05:00
grumpey
a351d847fd update to version 0.10.0 2020-01-28 07:12:27 -05:00
grumpey
1b7871d6fe update to version 0.10.0 2020-01-28 06:41:08 -05:00
Jan Staněk
d700f0340f
Clean spec file
- Remove remnants of packaging arbitrary git checkouts
- Rename api_ver to abi_ver (since SONAME tracks ABI changes)
- Use simpler GitHub release URL
- Remove dependency-resolution comments from BR, sort BR
- Replace hard devel dependency for xcb-icccm with softer Recommends
- Replace as much macro-magic as possible
2019-09-12 10:47:14 +02:00
Jeff Peeler
16b0257175 0.7.0-1 - Update to 0.7.0
BZ#1747057
2019-08-29 20:40:42 -04:00
Fedora Release Engineering
a01fb9f94f - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-07-27 03:35:46 +00:00
Jan Pokorný
1a4ed19cb5 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

Signed-off-by: Jan Pokorný <jpokorny@fedoraproject.org>
2019-06-23 11:02:05 +02:00
Adam Williamson
807d42174d Rebuild with Meson fix for #1699099 2019-04-16 13:13:53 -07:00
Jan Pokorný
2f20d880c8
0.5.0-1 (rev.1) - forgotten tarball refresh
Signed-off-by: Jan Pokorný <jpokorny@fedoraproject.org>
2019-03-14 02:47:20 +01:00
Jan Pokorný
ee3c8dd7c5
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ý <jpokorny@fedoraproject.org>
2019-03-14 02:43:24 +01:00
11 changed files with 490 additions and 902 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
/wlroots-*.tar.gz
/wlroots-*.tar.gz.sig

View file

@ -0,0 +1,33 @@
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

View file

@ -1,464 +0,0 @@
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,

View file

@ -1,24 +0,0 @@
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:

139
examples.meson.build Normal file
View file

@ -0,0 +1,139 @@
# 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

BIN
gpgkey-0FDE7BE0E88F5E48.gpg Normal file

Binary file not shown.

View file

@ -1,84 +0,0 @@
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);
}

View file

@ -1,215 +0,0 @@
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,
&gtk_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,
- &gtk_primary_selection_device_manager_interface, 1, manager,
- primary_selection_device_manager_bind);
+ &gtk_primary_selection_device_manager_interface, DEVICE_MANAGER_VERSION,
+ manager, primary_selection_device_manager_bind);
if (manager->global == NULL) {
free(manager);
return NULL;

View file

@ -1,22 +0,0 @@
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: [

View file

@ -1 +1,2 @@
SHA512 (wlroots-0.1.tar.gz) = 43897ac5a512ea26ad9703182dab5de9c714a087449b108472f638148538a632a67cfc778edf3e77940fdd7bdba91d64a4dc4e4ed1903a150f13ca59237ce01e
SHA512 (wlroots-0.20.2.tar.gz) = 634345e23d0b6c28cb501c0dd0ef9c50d529a92ae5c8455e99e876f3f37ee244ac19dd097f76416b2ae4fd7c3f02e39a92a9322cf5a0caf8da21c31cd900e508
SHA512 (wlroots-0.20.2.tar.gz.sig) = e74dc0abfabed7f40ba4f0e5edfc30ef92b95ebcf4a6aca3b2a605b04b5f2345a6a842cdf56819ce1f050c6181b646eae19dbef835354df7b09562cebbdaa474

View file

@ -1,64 +1,88 @@
%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
# Version of the .so library
%global abi_ver 0.20
# libliftoff does not bump soname on API changes
%global liftoff_ver 0.5.0
Name: wlroots
Version: 0.1
Release: 5%{?gitrel}%{?dist}
Version: 0.20.2
Release: 2%{?dist}
Summary: A modular Wayland compositor library
# 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
%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
# * 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
# `wayland-scanner` binary during build and don't alter the
# main license of the binaries linking with them by the
# underlying licenses.
# * 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.
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
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
# 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: 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
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}
%description
%{summary}.
@ -66,75 +90,274 @@ BuildRequires: git
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} == %{version}-%{release}
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}
# 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)
%description devel
Development files for %{name}.
%prep
%define __scm git_am
%autosetup -n %{name}-%{commit} -p 1
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%autosetup -N -n %{name}-%{tag}
# apply unconditional patches (0..99)
%autopatch -p1 -M99
# apply conditional patches (100..)
%build
MESON_OPTIONS=(
# Disable options requiring extra/unpackaged dependencies
-Dexamples=false
)
# 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
%{meson} "${MESON_OPTIONS[@]}"
%{meson_build}
%install
%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
%{meson_install}
install -pm0644 -Dt '%{buildroot}/%{_pkgdocdir}/examples' examples/*.[ch]
install -pm0644 -D '%{SOURCE3}' '%{buildroot}/%{_pkgdocdir}/examples/meson.build'
%check
%meson_test
# Needed only for < F28
%ldconfig_scriptlets
%{meson_test}
%files
%doc %dir %{_pkgdocdir}
%doc %{_pkgdocdir}/README.md
%license LICENSE
%{_libdir}/lib%{name}.so.%{api_ver}*
%doc README.md
%{_libdir}/libwlroots-%{abi_ver}.so
%files devel
%files devel
%doc %{_pkgdocdir}/examples
%{_includedir}/wlr
%{_libdir}/lib%{name}.so
%{_libdir}/pkgconfig/%{name}.pc
%{_includedir}/wlroots-%{abi_ver}/wlr
%{_libdir}/pkgconfig/wlroots-%{abi_ver}.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