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

Reply via email to