Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package xdg-desktop-portal-wlr for
openSUSE:Factory checked in at 2026-04-17 21:05:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr (Old)
and /work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xdg-desktop-portal-wlr"
Fri Apr 17 21:05:20 2026 rev:12 rq:1347741 version:0.8.2
Changes:
--------
---
/work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr/xdg-desktop-portal-wlr.changes
2025-12-05 16:56:02.946911124 +0100
+++
/work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.11940/xdg-desktop-portal-wlr.changes
2026-04-17 21:05:34.909097195 +0200
@@ -1,0 +2,7 @@
+Fri Apr 17 14:34:39 UTC 2026 - Arnav Singh <[email protected]>
+
+- Update to 0.8.2:
+ * Add fuzzel and mew to the default list of choosers.
+ * Various bugfixes and improvements.
+
+-------------------------------------------------------------------
Old:
----
xdg-desktop-portal-wlr-0.8.1.tar.gz
xdg-desktop-portal-wlr-0.8.1.tar.gz.sig
New:
----
xdg-desktop-portal-wlr-0.8.2.tar.gz
xdg-desktop-portal-wlr-0.8.2.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xdg-desktop-portal-wlr.spec ++++++
--- /var/tmp/diff_new_pack.rjOmoZ/_old 2026-04-17 21:05:35.409117775 +0200
+++ /var/tmp/diff_new_pack.rjOmoZ/_new 2026-04-17 21:05:35.409117775 +0200
@@ -1,7 +1,7 @@
#
# spec file for package xdg-desktop-portal-wlr
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: xdg-desktop-portal-wlr
-Version: 0.8.1
+Version: 0.8.2
Release: 0
Summary: An xdg-desktop-portal backend for wlroots
License: MIT
++++++ xdg-desktop-portal-wlr-0.8.1.tar.gz ->
xdg-desktop-portal-wlr-0.8.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/include/screencast_common.h
new/xdg-desktop-portal-wlr-0.8.2/include/screencast_common.h
--- old/xdg-desktop-portal-wlr-0.8.1/include/screencast_common.h
2025-12-04 11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/include/screencast_common.h
2026-04-17 15:09:51.000000000 +0200
@@ -63,6 +63,7 @@
uint32_t transformation;
struct xdpw_buffer *xdpw_buffer;
struct pw_buffer *pw_buffer;
+ struct wl_array damage;
};
struct xdpw_buffer {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.1/meson.build
new/xdg-desktop-portal-wlr-0.8.2/meson.build
--- old/xdg-desktop-portal-wlr-0.8.1/meson.build 2025-12-04
11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/meson.build 2026-04-17
15:09:51.000000000 +0200
@@ -1,7 +1,7 @@
project(
'xdg-desktop-portal-wlr',
'c',
- version: '0.8.1',
+ version: '0.8.2',
license: 'MIT',
meson_version: '>=0.60.0',
default_options: ['c_std=c11', 'warning_level=2', 'werror=true'],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/src/screencast/chooser.c
new/xdg-desktop-portal-wlr-0.8.2/src/screencast/chooser.c
--- old/xdg-desktop-portal-wlr-0.8.1/src/screencast/chooser.c 2025-12-04
11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/src/screencast/chooser.c 2026-04-17
15:09:51.000000000 +0200
@@ -226,6 +226,8 @@
{XDPW_CHOOSER_DMENU, "wofi -d -n --prompt='Select a source to
share:'"},
{XDPW_CHOOSER_DMENU, "rofi -dmenu -p 'Select a source to
share:'"},
{XDPW_CHOOSER_DMENU, "bemenu --prompt='Select a source to
share:'"},
+ {XDPW_CHOOSER_DMENU, "mew -l 10 -p 'Select a source to
share:'"},
+ {XDPW_CHOOSER_DMENU, "fuzzel -d -l 10 -p 'Select a source to
share:'"},
};
size_t N = sizeof(default_chooser)/sizeof(default_chooser[0]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/src/screencast/ext_image_copy.c
new/xdg-desktop-portal-wlr-0.8.2/src/screencast/ext_image_copy.c
--- old/xdg-desktop-portal-wlr-0.8.1/src/screencast/ext_image_copy.c
2025-12-04 11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/src/screencast/ext_image_copy.c
2026-04-17 15:09:51.000000000 +0200
@@ -180,6 +180,9 @@
struct xdpw_frame_damage *damage =
wl_array_add(&buffer->damage, sizeof(*damage));
*damage = (struct xdpw_frame_damage){ .x = x, .y = y, .width =
width, .height = height };
}
+
+ struct xdpw_frame_damage *damage =
wl_array_add(&cast->current_frame.damage, sizeof(*damage));
+ *damage = (struct xdpw_frame_damage){ .x = x, .y = y, .width = width,
.height = height };
}
static void ext_frame_presentation_time(void *data,
@@ -210,6 +213,7 @@
// Clear damage for the buffer that was just submitted
buffer->damage.size = 0;
}
+ cast->current_frame.damage.size = 0;
}
static void ext_frame_failed(void *data,
@@ -248,15 +252,23 @@
.failed = ext_frame_failed,
};
-static void ext_register_session_cb(struct xdpw_screencast_instance *cast) {
+static int ext_register_session_cb(struct xdpw_screencast_instance *cast) {
struct ext_image_capture_source_v1 *source = NULL;
switch (cast->target->type) {
case MONITOR:
+ if (cast->ctx->ext_output_image_capture_source_manager == NULL)
{
+ logprint(INFO, "ext: screencast output: unsupported");
+ return -1;
+ }
source =
ext_output_image_capture_source_manager_v1_create_source(
cast->ctx->ext_output_image_capture_source_manager,
cast->target->output->output);
break;
case WINDOW:
+ if
(cast->ctx->ext_foreign_toplevel_image_capture_source_manager == NULL) {
+ logprint(INFO, "ext: screencast window: unsupported");
+ return -1;
+ }
source =
ext_foreign_toplevel_image_capture_source_manager_v1_create_source(
cast->ctx->ext_foreign_toplevel_image_capture_source_manager,
cast->target->toplevel->handle);
@@ -270,11 +282,15 @@
ext_image_copy_capture_session_v1_add_listener(cast->ext_session.capture_session,
&ext_session_listener, cast);
logprint(TRACE, "ext: session callbacks registered");
+ return 0;
}
static void ext_register_frame_cb(struct xdpw_screencast_instance *cast) {
if (!cast->ext_session.capture_session) {
- ext_register_session_cb(cast);
+ if (ext_register_session_cb(cast) != 0) {
+ logprint(ERROR, "ext: failed to register session");
+ return;
+ }
}
cast->ext_session.frame =
ext_image_copy_capture_session_v1_create_frame(
cast->ext_session.capture_session);
@@ -283,13 +299,10 @@
ext_image_copy_capture_frame_v1_attach_buffer(cast->ext_session.frame,
cast->current_frame.xdpw_buffer->buffer);
- struct xdpw_buffer *buffer;
- wl_list_for_each(buffer, &cast->buffer_list, link) {
- struct xdpw_frame_damage *damage;
- wl_array_for_each(damage, &buffer->damage) {
- ext_image_copy_capture_frame_v1_damage_buffer(
- cast->ext_session.frame, damage->x,
damage->y, damage->width, damage->height);
- }
+ struct xdpw_frame_damage *damage;
+ wl_array_for_each(damage, &cast->current_frame.xdpw_buffer->damage) {
+ ext_image_copy_capture_frame_v1_damage_buffer(
+ cast->ext_session.frame, damage->x, damage->y,
damage->width, damage->height);
}
ext_image_copy_capture_frame_v1_capture(cast->ext_session.frame);
@@ -318,12 +331,13 @@
}
int xdpw_ext_ic_session_init(struct xdpw_screencast_instance *cast) {
- if (cast->ctx->ext_image_copy_capture_manager == NULL ||
- cast->ctx->ext_output_image_capture_source_manager ==
NULL) {
+ if (cast->ctx->ext_image_copy_capture_manager == NULL) {
logprint(INFO, "ext: unsupported");
return -1;
}
- ext_register_session_cb(cast);
+ if (ext_register_session_cb(cast) != 0) {
+ return -1;
+ }
// process at least one frame so that we know
// some of the metadata required for the pipewire
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/src/screencast/pipewire_screencast.c
new/xdg-desktop-portal-wlr-0.8.2/src/screencast/pipewire_screencast.c
--- old/xdg-desktop-portal-wlr-0.8.1/src/screencast/pipewire_screencast.c
2025-12-04 11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/src/screencast/pipewire_screencast.c
2026-04-17 15:09:51.000000000 +0200
@@ -69,12 +69,14 @@
// variable framerate
spa_pod_builder_add(b, SPA_FORMAT_VIDEO_framerate,
SPA_POD_Fraction(&SPA_FRACTION(0, 1)), 0);
- spa_pod_builder_add(b, SPA_FORMAT_VIDEO_maxFramerate,
- SPA_POD_CHOICE_RANGE_Fraction(
- &SPA_FRACTION(framerate, 1),
- &SPA_FRACTION(1, 1),
- &SPA_FRACTION(framerate, 1)),
- 0);
+ if (framerate > 0) {
+ spa_pod_builder_add(b, SPA_FORMAT_VIDEO_maxFramerate,
+ SPA_POD_CHOICE_RANGE_Fraction(
+ &SPA_FRACTION(framerate, 1),
+ &SPA_FRACTION(1, 1),
+ &SPA_FRACTION(framerate, 1)),
+ 0);
+ }
return spa_pod_builder_pop(b, &f[0]);
}
@@ -117,12 +119,14 @@
// variable framerate
spa_pod_builder_add(b, SPA_FORMAT_VIDEO_framerate,
SPA_POD_Fraction(&SPA_FRACTION(0, 1)), 0);
- spa_pod_builder_add(b, SPA_FORMAT_VIDEO_maxFramerate,
- SPA_POD_CHOICE_RANGE_Fraction(
- &SPA_FRACTION(framerate, 1),
- &SPA_FRACTION(1, 1),
- &SPA_FRACTION(framerate, 1)),
- 0);
+ if (framerate > 0) {
+ spa_pod_builder_add(b, SPA_FORMAT_VIDEO_maxFramerate,
+ SPA_POD_CHOICE_RANGE_Fraction(
+ &SPA_FRACTION(framerate, 1),
+ &SPA_FRACTION(1, 1),
+ &SPA_FRACTION(framerate, 1)),
+ 0);
+ }
return spa_pod_builder_pop(b, &f[0]);
}
@@ -221,7 +225,6 @@
logprint(WARN, "pipewire: no buffer to queue");
goto done;
}
- struct xdpw_buffer *xdpw_buf = cast->current_frame.xdpw_buffer;
struct pw_buffer *pw_buf = cast->current_frame.pw_buffer;
struct spa_buffer *spa_buf = pw_buf->buffer;
struct spa_data *d = spa_buf->datas;
@@ -256,32 +259,41 @@
uint32_t damage_counter = 0;
struct xdpw_frame_damage *fdamage;
bool stopped_for_spa = false;
- wl_array_for_each(fdamage, &xdpw_buf->damage) {
+ wl_array_for_each(fdamage, &cast->current_frame.damage) {
+ *d_region = SPA_REGION(fdamage->x, fdamage->y,
fdamage->width, fdamage->height);
+ logprint(TRACE, "pipewire: damage %u %u,%u (%ux%u)",
damage_counter,
+ d_region->position.x,
d_region->position.y, d_region->size.width, d_region->size.height);
+ damage_counter++;
+
if (!spa_meta_check(d_region + 1, damage)) {
stopped_for_spa = true;
break;
}
d_region++;
-
- *d_region = SPA_REGION(fdamage->x, fdamage->y,
fdamage->width, fdamage->height);
- logprint(TRACE, "pipewire: damage %u %u,%u (%ux%u)",
damage_counter,
- d_region->position.x,
d_region->position.y, d_region->size.width, d_region->size.height);
- damage_counter++;
}
if (stopped_for_spa) {
struct xdpw_frame_damage new_fdamage =
{d_region->position.x, d_region->position.y,
d_region->size.width, d_region->size.height};
- wl_array_for_each(fdamage, &xdpw_buf->damage) {
- if (damage_counter-- > 0) {
+ uint32_t combined_damage_counter = 0;
+ wl_array_for_each(fdamage, &cast->current_frame.damage)
{
+ if (combined_damage_counter++ < damage_counter)
{
continue;
}
new_fdamage = merge_damage(&new_fdamage,
fdamage);
}
*d_region = SPA_REGION(new_fdamage.x, new_fdamage.y,
new_fdamage.width, new_fdamage.height);
- logprint(TRACE, "pipewire: collected damage %u %u,%u
(%ux%u)", damage_counter,
+ logprint(TRACE, "pipewire: collected damage %u %u,%u
(%ux%u)", combined_damage_counter,
d_region->position.x,
d_region->position.y, d_region->size.width, d_region->size.height);
+ } else {
+ while (spa_meta_check(d_region, damage)) {
+ *d_region = SPA_REGION(0, 0, 0, 0);
+ logprint(TRACE, "pipewire: end damage %u %u,%u
(%ux%u)", damage_counter,
+ d_region->position.x,
d_region->position.y, d_region->size.width, d_region->size.height);
+ damage_counter++;
+ d_region++;
+ }
}
}
@@ -379,7 +391,11 @@
spa_pod_dynamic_builder_init(&builder, params_buffer,
sizeof(params_buffer), 2048);
spa_format_video_raw_parse(param, &cast->pwr_format);
- cast->framerate = (uint32_t)(cast->pwr_format.max_framerate.num /
cast->pwr_format.max_framerate.denom);
+ if (cast->pwr_format.max_framerate.denom > 0) {
+ cast->framerate = cast->pwr_format.max_framerate.num /
cast->pwr_format.max_framerate.denom;
+ } else {
+ cast->framerate = 0;
+ }
const struct spa_pod_prop *prop_modifier;
if ((prop_modifier = spa_pod_find_prop(param, NULL,
SPA_FORMAT_VIDEO_modifier)) != NULL) {
@@ -498,6 +514,7 @@
struct xdpw_screencast_instance *cast = data;
struct spa_data *d;
enum spa_data_type t;
+ uint32_t flags = SPA_DATA_FLAG_READABLE;
logprint(DEBUG, "pipewire: add buffer event handle");
@@ -507,6 +524,9 @@
if ((d[0].type & (1u << SPA_DATA_MemFd)) > 0) {
assert(cast->buffer_type == WL_SHM);
t = SPA_DATA_MemFd;
+#ifdef SPA_DATA_FLAG_MAPPABLE
+ flags = flags | SPA_DATA_FLAG_MAPPABLE;
+#endif
} else if ((d[0].type & (1u << SPA_DATA_DmaBuf)) > 0) {
assert(cast->buffer_type == DMABUF);
t = SPA_DATA_DmaBuf;
@@ -535,7 +555,7 @@
d[plane].chunk->size = xdpw_buffer->size[plane];
d[plane].chunk->stride = xdpw_buffer->stride[plane];
d[plane].chunk->offset = xdpw_buffer->offset[plane];
- d[plane].flags = 0;
+ d[plane].flags = flags;
d[plane].fd = xdpw_buffer->fd[plane];
d[plane].data = NULL;
// clients have implemented to check chunk->size if the buffer
is valid instead
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/src/screencast/screencast.c
new/xdg-desktop-portal-wlr-0.8.2/src/screencast/screencast.c
--- old/xdg-desktop-portal-wlr-0.8.1/src/screencast/screencast.c
2025-12-04 11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/src/screencast/screencast.c
2026-04-17 15:09:51.000000000 +0200
@@ -78,6 +78,7 @@
cast->refcount = 1;
cast->node_id = SPA_ID_INVALID;
cast->avoid_dmabufs = false;
+ wl_array_init(&cast->current_frame.damage);
wl_list_init(&cast->buffer_list);
logprint(INFO, "xdpw: screencast instance %p has %d references", cast,
cast->refcount);
wl_list_insert(&ctx->screencast_instances, &cast->link);
@@ -121,6 +122,7 @@
wl_list_remove(&cast->link);
xdpw_pwr_stream_destroy(cast);
assert(wl_list_length(&cast->buffer_list) == 0);
+ wl_array_release(&cast->current_frame.damage);
xdpw_buffer_constraints_finish(&cast->current_constraints);
xdpw_buffer_constraints_finish(&cast->pending_constraints);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/src/screencast/wlr_screencopy.c
new/xdg-desktop-portal-wlr-0.8.2/src/screencast/wlr_screencopy.c
--- old/xdg-desktop-portal-wlr-0.8.1/src/screencast/wlr_screencopy.c
2025-12-04 11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/src/screencast/wlr_screencopy.c
2026-04-17 15:09:51.000000000 +0200
@@ -153,8 +153,7 @@
cast->current_frame.transformation =
cast->target->output->transformation;
logprint(TRACE, "wlroots: transformation %u",
cast->current_frame.transformation);
- struct xdpw_buffer *buffer = cast->current_frame.xdpw_buffer;
- buffer->damage.size = 0;
+ cast->current_frame.damage.size = 0;
zwlr_screencopy_frame_v1_copy_with_damage(frame,
cast->current_frame.xdpw_buffer->buffer);
logprint(TRACE, "wlroots: frame copied");
@@ -180,9 +179,9 @@
logprint(TRACE, "wlroots: damage event handler");
- struct xdpw_buffer *buffer = cast->current_frame.xdpw_buffer;
- logprint(TRACE, "wlroots: damage %"PRIu32":
%"PRIu32",%"PRIu32"x%"PRIu32",%"PRIu32, buffer->damage.size, x, y, width,
height);
- struct xdpw_frame_damage *damage = wl_array_add(&buffer->damage,
sizeof(*damage));
+ logprint(TRACE, "wlroots: damage %"PRIu32":
%"PRIu32",%"PRIu32"x%"PRIu32",%"PRIu32,
+ cast->current_frame.damage.size, x, y, width, height);
+ struct xdpw_frame_damage *damage =
wl_array_add(&cast->current_frame.damage, sizeof(*damage));
*damage = (struct xdpw_frame_damage){ .x = x, .y = y, .width = width,
.height = height };
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.1/xdg-desktop-portal-wlr.5.scd
new/xdg-desktop-portal-wlr-0.8.2/xdg-desktop-portal-wlr.5.scd
--- old/xdg-desktop-portal-wlr-0.8.1/xdg-desktop-portal-wlr.5.scd
2025-12-04 11:07:33.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.8.2/xdg-desktop-portal-wlr.5.scd
2026-04-17 15:09:51.000000000 +0200
@@ -64,7 +64,7 @@
The supported types are:
- default: xdpw will try to use the first chooser found in the list of
hardcoded choosers
- (slurp, wmenu, wofi, rofi, bemenu) and will fallback to an arbitrary
output if none of those were found.
+ (slurp, wmenu, wofi, rofi, bemenu, mew, fuzzel) and will fallback to
an arbitrary output if none of those were found.
- none: xdpw will allow screencast either on the output given by
**output_name**, or if empty
an arbitrary output without further interaction.
- simple, dmenu: xdpw will launch the chooser given by **chooser_cmd**.
For more details