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-11-13 18:32:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr (Old)
 and      /work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.1251 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xdg-desktop-portal-wlr"

Fri Nov 13 18:32:47 2026 rev:16 rq:1397125 version:0.9.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr/xdg-desktop-portal-wlr.changes
    2026-10-29 22:33:22.486404231 +0100
+++ 
/work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.1251/xdg-desktop-portal-wlr.changes
  2026-11-13 18:37:01.859617364 +0100
@@ -1,0 +2,7 @@
+Thu Nov 12 15:15:28 UTC 2026 - Arnav Singh <[email protected]>
+
+- Update to 0.9.0:
+  * Fix crash when starting a screencast.
+  * Fix screenshot action not prompting for permission.
+
+-------------------------------------------------------------------

Old:
----
  xdg-desktop-portal-wlr-0.8.5.tar.gz
  xdg-desktop-portal-wlr-0.8.5.tar.gz.sig

New:
----
  xdg-desktop-portal-wlr-0.9.0.tar.gz
  xdg-desktop-portal-wlr-0.9.0.tar.gz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xdg-desktop-portal-wlr.spec ++++++
--- /var/tmp/diff_new_pack.1lddiJ/_old  2026-11-13 18:37:03.699695268 +0100
+++ /var/tmp/diff_new_pack.1lddiJ/_new  2026-11-13 18:37:03.704695480 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           xdg-desktop-portal-wlr
-Version:        0.8.5
+Version:        0.9.0
 Release:        0
 Summary:        An xdg-desktop-portal backend for wlroots
 License:        MIT
@@ -32,7 +32,7 @@
 BuildRequires:  pkgconfig(gbm) >= 21.3
 BuildRequires:  pkgconfig(inih)
 BuildRequires:  pkgconfig(libdrm) >= 2.4.109
-BuildRequires:  pkgconfig(libpipewire-0.3) >= 0.3.62
+BuildRequires:  pkgconfig(libpipewire-0.3) >= 0.3.64
 BuildRequires:  pkgconfig(libsystemd)
 BuildRequires:  pkgconfig(systemd)
 BuildRequires:  pkgconfig(wayland-client)
@@ -60,7 +60,7 @@
 
 %files
 %license LICENSE
-%doc README.md CONTRIBUTING.md
+%doc README.md
 %{_libexecdir}/%{name}
 %{_userunitdir}/%{name}.service
 %{_datadir}/dbus-1/services/org.freedesktop.impl.portal.desktop.wlr.service

++++++ xdg-desktop-portal-wlr-0.8.5.tar.gz -> 
xdg-desktop-portal-wlr-0.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/CONTRIBUTING.md 
new/xdg-desktop-portal-wlr-0.9.0/CONTRIBUTING.md
--- old/xdg-desktop-portal-wlr-0.8.5/CONTRIBUTING.md    2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/CONTRIBUTING.md    1970-01-01 
01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-# Contributing
-
-We closely follow the wlroots [contributing] guidelines where possible. Please
-see that document for more information.
-
-## Tooling
-
-Useful tools include `dbus-monitor` to watch requests being made,
-and `dbus-send` and the similar `busctl call` for manual dbus calls.
-
-You can test the integration with the [portal-test] Flatpak app.
-
-Alternatively you can trigger it with [trigger-screen-shot.py] and
-[xdp-screen-cast.py].
-
-[contributing]: https://github.com/swaywm/wlroots/blob/master/CONTRIBUTING.md
-[portal-test]: https://github.com/matthiasclasen/portal-test
-[trigger-screen-shot.py]: 
https://gist.github.com/danshick/3446dac24c64ce6172eced4ac255ac3d
-[xdp-screen-cast.py]: https://gitlab.gnome.org/snippets/19
-
-## Alternate *.portal Location
-
-xdg-desktop-portal will read the XDG_DESKTOP_PORTAL_DIR environment variable 
for an
-alternate path for *.portal files. This can be useful when testing changes to 
that
-portal file, or for testing xdpw without installing it. This feature is 
undocumented
-and shouldn't be relied on, but may be helpful in some circumstances.
-
-https://github.com/flatpak/xdg-desktop-portal/blob/e7f78640e35debb68fef891fc233c449006d9724/src/portal-impl.c#L124
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/README.md 
new/xdg-desktop-portal-wlr-0.9.0/README.md
--- old/xdg-desktop-portal-wlr-0.8.5/README.md  2026-10-29 16:54:48.000000000 
+0100
+++ new/xdg-desktop-portal-wlr-0.9.0/README.md  2026-11-12 12:42:18.000000000 
+0100
@@ -79,7 +79,7 @@
 ## Contributing
 
 If you're interested in testing or development, check out
-[CONTRIBUTING.md] for more information.
+[CONTRIBUTING.md] for more information. We follow the [wlroots code style].
 
 ## License
 
@@ -88,4 +88,5 @@
 [xdg-desktop-portal]: https://github.com/flatpak/xdg-desktop-portal
 [FAQ]: https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ
 [screencast compatibility]: 
https://github.com/emersion/xdg-desktop-portal-wlr/wiki/Screencast-Compatibility
-[CONTRIBUTING.md]: CONTRIBUTING.md
+[CONTRIBUTING.md]: 
https://github.com/emersion/.github/blob/main/CONTRIBUTING.md
+[wlroots code style]: 
https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/CONTRIBUTING.md?ref_type=heads#style-reference
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/include/ext_image_copy.h 
new/xdg-desktop-portal-wlr-0.9.0/include/ext_image_copy.h
--- old/xdg-desktop-portal-wlr-0.8.5/include/ext_image_copy.h   2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/include/ext_image_copy.h   2026-11-12 
12:42:18.000000000 +0100
@@ -4,6 +4,7 @@
 #include "screencast_common.h"
 
 void xdpw_ext_ic_frame_capture(struct xdpw_screencast_instance *cast);
+void xdpw_ext_ic_frame_cancel(struct xdpw_screencast_instance *cast);
 int xdpw_ext_ic_session_init(struct xdpw_screencast_instance *cast);
 void xdpw_ext_ic_session_close(struct xdpw_screencast_instance *cast);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/include/screencast_common.h 
new/xdg-desktop-portal-wlr-0.9.0/include/screencast_common.h
--- old/xdg-desktop-portal-wlr-0.8.5/include/screencast_common.h        
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/include/screencast_common.h        
2026-11-12 12:42:18.000000000 +0100
@@ -9,9 +9,13 @@
 
 #include "fps_limit.h"
 
-// this seems to be right based on
-// 
https://github.com/flatpak/xdg-desktop-portal/blob/309a1fc0cf2fb32cceb91dbc666d20cf0a3202c2/src/screen-cast.c#L955
-#define XDP_CAST_PROTO_VER 4
+// Backend implements ScreenCast v6:
+//   v4 restore tokens, v5 mapping_id, v6 pipewire-serial.
+// The xdg-desktop-portal frontend exposes MIN(backend_version, 6) to
+// apps (see flatpak/xdg-desktop-portal#1942), so apps see v6 only when
+// this backend is loaded and supplies pipewire-serial in the stream
+// dict.
+#define XDP_CAST_PROTO_VER 6
 #define XDP_CAST_DATA_VER 1
 
 enum cursor_modes {
@@ -196,6 +200,7 @@
        struct spa_video_info_raw pwr_format;
        uint32_t seq;
        uint32_t node_id;
+       uint64_t pipewire_serial;
        bool pwr_stream_state;
        uint32_t framerate;
        struct xdpw_timer *process_retry;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/include/screenshot_common.h 
new/xdg-desktop-portal-wlr-0.9.0/include/screenshot_common.h
--- old/xdg-desktop-portal-wlr-0.8.5/include/screenshot_common.h        
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/include/screenshot_common.h        
2026-11-12 12:42:18.000000000 +0100
@@ -1,6 +1,6 @@
 #ifndef SCREENSHOT_COMMON_H
 #define SCREENSHOT_COMMON_H
 
-#define XDP_SHOT_PROTO_VER 1
+#define XDP_SHOT_PROTO_VER 2
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/include/wlr_screencast.h 
new/xdg-desktop-portal-wlr-0.9.0/include/wlr_screencast.h
--- old/xdg-desktop-portal-wlr-0.8.5/include/wlr_screencast.h   2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/include/wlr_screencast.h   2026-11-12 
12:42:18.000000000 +0100
@@ -25,6 +25,7 @@
                struct xdpw_screencast_restore_data *data);
 
 void xdpw_wlr_frame_capture(struct xdpw_screencast_instance *cast);
+void xdpw_wlr_frame_cancel(struct xdpw_screencast_instance *cast);
 int xdpw_wlr_session_init(struct xdpw_screencast_instance *cast);
 void xdpw_wlr_session_close(struct xdpw_screencast_instance *cast);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/include/wlr_screencopy.h 
new/xdg-desktop-portal-wlr-0.9.0/include/wlr_screencopy.h
--- old/xdg-desktop-portal-wlr-0.8.5/include/wlr_screencopy.h   2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/include/wlr_screencopy.h   2026-11-12 
12:42:18.000000000 +0100
@@ -7,6 +7,7 @@
 #define SC_MANAGER_VERSION_MIN 2
 
 void xdpw_wlr_sc_frame_capture(struct xdpw_screencast_instance *cast);
+void xdpw_wlr_sc_frame_cancel(struct xdpw_screencast_instance *cast);
 int xdpw_wlr_sc_session_init(struct xdpw_screencast_instance *cast);
 void xdpw_wlr_sc_session_close(struct xdpw_screencast_instance *cast);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/meson.build 
new/xdg-desktop-portal-wlr-0.9.0/meson.build
--- old/xdg-desktop-portal-wlr-0.8.5/meson.build        2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/meson.build        2026-11-12 
12:42:18.000000000 +0100
@@ -1,7 +1,7 @@
 project(
        'xdg-desktop-portal-wlr',
        'c',
-       version: '0.8.5',
+       version: '0.9.0',
        license: 'MIT',
        meson_version: '>=0.60.0',
        default_options: ['c_std=c11', 'warning_level=2', 'werror=true'],
@@ -25,7 +25,7 @@
 inc = include_directories('include')
 
 rt = cc.find_library('rt')
-pipewire = dependency('libpipewire-0.3', version: '>= 0.3.62')
+pipewire = dependency('libpipewire-0.3', version: '>= 0.3.64')
 wayland_client = dependency('wayland-client')
 wayland_protos = dependency('wayland-protocols', version: '>=1.24')
 iniparser = dependency('inih')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/src/core/logger.c 
new/xdg-desktop-portal-wlr-0.9.0/src/core/logger.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/core/logger.c  2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/core/logger.c  2026-11-12 
12:42:18.000000000 +0100
@@ -62,15 +62,18 @@
        va_list args;
 
        char timestr[200];
-       time_t t = time(NULL);
-       struct tm *tmp = localtime(&t);
+       struct timespec ts = {0};
+       clock_gettime(CLOCK_REALTIME, &ts);
+       struct tm *tmp = localtime(&ts.tv_sec);
 
        if (strftime(timestr, sizeof(timestr), "%Y/%m/%d %H:%M:%S", tmp) == 0) {
                fprintf(stderr, "strftime returned 0");
                abort();
        }
 
-       fprintf(logprops.dst, "%s", timestr);
+       int msec = ts.tv_nsec / (1000 * 1000);
+
+       fprintf(logprops.dst, "%s:%03d", timestr, msec);
        fprintf(logprops.dst, " ");
        fprintf(logprops.dst, "[%s]", print_loglevel(level));
        fprintf(logprops.dst, " - ");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/src/core/main.c 
new/xdg-desktop-portal-wlr-0.9.0/src/core/main.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/core/main.c    2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/core/main.c    2026-11-12 
12:42:18.000000000 +0100
@@ -175,7 +175,7 @@
        wl_list_init(&state.timers);
 
        struct pollfd pollfds[] = {
-               [EVENT_LOOP_DBUS] = {0}, // Filled in later
+               [EVENT_LOOP_DBUS] = { .fd = -1 }, // Filled in later
                [EVENT_LOOP_WAYLAND] = {
                        .fd = wl_display_get_fd(state.wl_display),
                        .events = POLLIN,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/src/core/request.c 
new/xdg-desktop-portal-wlr-0.9.0/src/core/request.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/core/request.c 2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/core/request.c 2026-11-12 
12:42:18.000000000 +0100
@@ -28,7 +28,7 @@
 
        xdpw_request_destroy(req);
 
-       return 0;
+       return 1;
 }
 
 static const sd_bus_vtable request_vtable[] = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.5/src/core/session.c 
new/xdg-desktop-portal-wlr-0.9.0/src/core/session.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/core/session.c 2026-10-29 
16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/core/session.c 2026-11-12 
12:42:18.000000000 +0100
@@ -31,7 +31,7 @@
        sess->closed = true;
        xdpw_session_destroy(sess);
 
-       return 0;
+       return 1;
 }
 
 static const sd_bus_vtable session_vtable[] = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/src/screencast/ext_image_copy.c 
new/xdg-desktop-portal-wlr-0.9.0/src/screencast/ext_image_copy.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/screencast/ext_image_copy.c    
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/screencast/ext_image_copy.c    
2026-11-12 12:42:18.000000000 +0100
@@ -321,11 +321,15 @@
        ext_register_frame_cb(cast);
 }
 
-void xdpw_ext_ic_session_close(struct xdpw_screencast_instance *cast) {
+void xdpw_ext_ic_frame_cancel(struct xdpw_screencast_instance *cast) {
        if (cast->ext_session.frame) {
                
ext_image_copy_capture_frame_v1_destroy(cast->ext_session.frame);
                cast->ext_session.frame = NULL;
        }
+}
+
+void xdpw_ext_ic_session_close(struct xdpw_screencast_instance *cast) {
+       xdpw_ext_ic_frame_cancel(cast);
        if (cast->ext_session.capture_session) {
                
ext_image_copy_capture_session_v1_destroy(cast->ext_session.capture_session);
                cast->ext_session.capture_session = NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/src/screencast/pipewire_screencast.c 
new/xdg-desktop-portal-wlr-0.9.0/src/screencast/pipewire_screencast.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/screencast/pipewire_screencast.c       
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/screencast/pipewire_screencast.c       
2026-11-12 12:42:18.000000000 +0100
@@ -10,6 +10,9 @@
 #include <sys/mman.h>
 #include <unistd.h>
 #include <assert.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
 #include <libdrm/drm_fourcc.h>
 
 #include "screencast.h"
@@ -205,17 +208,18 @@
        return false;
 }
 
-static void xdpw_pwr_dequeue_buffer(struct xdpw_screencast_instance *cast) {
+static bool xdpw_pwr_dequeue_buffer(struct xdpw_screencast_instance *cast) {
        logprint(TRACE, "pipewire: dequeueing buffer");
 
        assert(!cast->current_frame.pw_buffer);
        if ((cast->current_frame.pw_buffer = 
pw_stream_dequeue_buffer(cast->stream)) == NULL) {
                logprint(WARN, "pipewire: out of buffers");
-               return;
+               return false;
        }
 
        cast->current_frame.xdpw_buffer = 
cast->current_frame.pw_buffer->user_data;
        cast->current_frame.completed = false;
+       return true;
 }
 
 void xdpw_pwr_enqueue_buffer(struct xdpw_screencast_instance *cast) {
@@ -327,6 +331,7 @@
 done:
        cast->current_frame.xdpw_buffer = NULL;
        cast->current_frame.pw_buffer = NULL;
+       xdpw_wlr_frame_cancel(cast);
 }
 
 void pwr_update_stream_param(struct xdpw_screencast_instance *cast) {
@@ -348,6 +353,24 @@
        wl_array_release(&params);
 }
 
+static uint64_t read_object_serial(struct pw_stream *stream) {
+       const struct pw_properties *props = pw_stream_get_properties(stream);
+       if (!props) {
+               return 0;
+       }
+       const char *serial_str = pw_properties_get(props, PW_KEY_OBJECT_SERIAL);
+       if (!serial_str) {
+               return 0;
+       }
+       char *end = NULL;
+       errno = 0;
+       uint64_t serial = strtoull(serial_str, &end, 10);
+       if (errno != 0 || end == serial_str || end[0] != '\0') {
+               return 0;
+       }
+       return serial;
+}
+
 static void pwr_disarm_process_retry(struct xdpw_screencast_instance *cast) {
        xdpw_destroy_timer(cast->process_retry);
        cast->process_retry = NULL;
@@ -357,16 +380,17 @@
                enum pw_stream_state old, enum pw_stream_state state, const 
char *error) {
        struct xdpw_screencast_instance *cast = data;
        cast->node_id = pw_stream_get_node_id(cast->stream);
+       cast->pipewire_serial = read_object_serial(cast->stream);
 
        logprint(INFO, "pipewire: stream state changed to \"%s\"",
                pw_stream_state_as_string(state));
-       logprint(INFO, "pipewire: node id is %d", (int)cast->node_id);
+       logprint(INFO, "pipewire: node id is %d, object.serial is %" PRIu64,
+               (int)cast->node_id, cast->pipewire_serial);
 
        switch (state) {
        case PW_STREAM_STATE_STREAMING:
                cast->pwr_stream_state = true;
-               xdpw_pwr_dequeue_buffer(cast);
-               xdpw_wlr_frame_capture(cast);
+               pw_stream_trigger_process(cast->stream);
                break;
        case PW_STREAM_STATE_PAUSED:
                if (old == PW_STREAM_STATE_STREAMING && 
cast->current_frame.pw_buffer) {
@@ -586,8 +610,10 @@
                xdpw_buffer_destroy(xdpw_buffer);
        }
        if (cast->current_frame.pw_buffer == buffer) {
+               logprint(DEBUG, "pipewire: current buffer has been removed");
                cast->current_frame.pw_buffer = NULL;
                cast->current_frame.xdpw_buffer = NULL;
+               xdpw_wlr_frame_cancel(cast);
        }
        for (uint32_t plane = 0; plane < buffer->buffer->n_datas; plane++) {
                buffer->buffer->datas[plane].fd = -1;
@@ -613,8 +639,9 @@
        if (cast->process_retry) {
                return;
        }
-       cast->process_retry = xdpw_add_timer(cast->ctx->state,
-               pwr_process_retry_delay(cast), pwr_process_retry, cast);
+       uint64_t delay_ns = pwr_process_retry_delay(cast);
+       logprint(DEBUG, "pipewire: retrying buffer dequeue in %"PRIu64" ms", 
delay_ns / (1000 * 1000));
+       cast->process_retry = xdpw_add_timer(cast->ctx->state, delay_ns, 
pwr_process_retry, cast);
        if (!cast->process_retry) {
                logprint(ERROR, "pipewire: failed to arm process retry timer, 
stream may stall");
        }
@@ -638,13 +665,12 @@
        }
 
        if (cast->current_frame.pw_buffer) {
-               logprint(DEBUG, "pipewire: buffer already exported");
+               logprint(DEBUG, "pipewire: buffer already dequeued");
                return;
        }
 
-       xdpw_pwr_dequeue_buffer(cast);
-       if (!cast->current_frame.pw_buffer) {
-               logprint(WARN, "pipewire: unable to export buffer, dropping 
frame");
+       if (!xdpw_pwr_dequeue_buffer(cast)) {
+               logprint(WARN, "pipewire: unable to dequeue buffer, dropping 
frame");
                pwr_arm_process_retry(cast);
                return;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/src/screencast/screencast.c 
new/xdg-desktop-portal-wlr-0.9.0/src/screencast/screencast.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/screencast/screencast.c        
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/screencast/screencast.c        
2026-11-12 12:42:18.000000000 +0100
@@ -324,7 +324,7 @@
        }
 
        sd_bus_message_unref(reply);
-       return 0;
+       return 1;
 }
 
 static int method_screencast_select_sources(sd_bus_message *msg, void *data,
@@ -511,7 +511,7 @@
                return ret;
        }
        sd_bus_message_unref(reply);
-       return 0;
+       return 1;
 
 error:
        if (sess) {
@@ -531,7 +531,7 @@
                return ret;
        }
        sd_bus_message_unref(reply);
-       return -1;
+       return 1;
 }
 
 static int method_screencast_start(sd_bus_message *msg, void *data,
@@ -666,6 +666,20 @@
        if (ret < 0) {
                return ret;
        }
+       if (cast->target->output && cast->target->output->name) {
+               ret = sd_bus_message_append(reply, "{sv}",
+                       "mapping_id", "s", cast->target->output->name);
+               if (ret < 0) {
+                       return ret;
+               }
+       }
+       if (cast->pipewire_serial != 0) {
+               ret = sd_bus_message_append(reply, "{sv}",
+                       "pipewire-serial", "t", cast->pipewire_serial);
+               if (ret < 0) {
+                       return ret;
+               }
+       }
        ret = sd_bus_message_close_container(reply);
        if (ret < 0) {
                return ret;
@@ -714,7 +728,7 @@
        }
        sd_bus_message_unref(reply);
 
-       return 0;
+       return 1;
 }
 
 static const sd_bus_vtable screencast_vtable[] = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/src/screencast/wlr_screencast.c 
new/xdg-desktop-portal-wlr-0.9.0/src/screencast/wlr_screencast.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/screencast/wlr_screencast.c    
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/screencast/wlr_screencast.c    
2026-11-12 12:42:18.000000000 +0100
@@ -43,12 +43,22 @@
 void xdpw_wlr_frame_capture(struct xdpw_screencast_instance *cast) {
        uint64_t delay_ns = fps_limit_measure_end(&cast->fps_limit, 
cast->framerate);
        if (delay_ns > 0) {
+               logprint(TRACE, "pipewire: scheduling capture in %"PRIu64" ms", 
delay_ns / (1000 * 1000));
                xdpw_add_timer(cast->ctx->state, delay_ns, 
wlr_frame_capture_timer, cast);
        } else {
                wlr_frame_capture_start(cast);
        }
 }
 
+void xdpw_wlr_frame_cancel(struct xdpw_screencast_instance *cast) {
+       if (cast->ctx->ext_image_copy_capture_manager
+                       && cast->ctx->ext_output_image_capture_source_manager) {
+               xdpw_ext_ic_frame_cancel(cast);
+       } else if (cast->ctx->screencopy_manager) {
+               xdpw_wlr_sc_frame_cancel(cast);
+       }
+}
+
 void xdpw_wlr_session_close(struct xdpw_screencast_instance *cast) {
        if (cast->ctx->ext_image_copy_capture_manager
                        && cast->ctx->ext_output_image_capture_source_manager) {
@@ -445,7 +455,7 @@
                uint32_t id, const char *interface, uint32_t ver) {
        struct xdpw_screencast_context *ctx = data;
 
-       logprint(DEBUG, "wlroots: interface to register %s  (Version: 
%u)",interface, ver);
+       logprint(TRACE, "wlroots: interface to register %s  (Version: 
%u)",interface, ver);
        if (!strcmp(interface, wl_output_interface.name)) {
                struct xdpw_wlr_output *output = calloc(1, sizeof(*output));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/src/screencast/wlr_screencopy.c 
new/xdg-desktop-portal-wlr-0.9.0/src/screencast/wlr_screencopy.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/screencast/wlr_screencopy.c    
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/screencast/wlr_screencopy.c    
2026-11-12 12:42:18.000000000 +0100
@@ -248,10 +248,14 @@
        wlr_register_cb(cast);
 }
 
-void xdpw_wlr_sc_session_close(struct xdpw_screencast_instance *cast) {
+void xdpw_wlr_sc_frame_cancel(struct xdpw_screencast_instance *cast) {
        wlr_frame_finish(cast);
 }
 
+void xdpw_wlr_sc_session_close(struct xdpw_screencast_instance *cast) {
+       xdpw_wlr_sc_frame_cancel(cast);
+}
+
 int xdpw_wlr_sc_session_init(struct xdpw_screencast_instance *cast) {
        wlr_register_cb(cast);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.8.5/src/screenshot/screenshot.c 
new/xdg-desktop-portal-wlr-0.9.0/src/screenshot/screenshot.c
--- old/xdg-desktop-portal-wlr-0.8.5/src/screenshot/screenshot.c        
2026-10-29 16:54:48.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.9.0/src/screenshot/screenshot.c        
2026-11-12 12:42:18.000000000 +0100
@@ -143,6 +143,7 @@
        if (ret < 0) {
                goto unref_reply;
        }
+       ret = 1;
 
 unref_reply:
        sd_bus_message_unref(reply);
@@ -280,6 +281,7 @@
        if (ret < 0) {
                goto unref_reply;
        }
+       ret = 1;
 
 unref_reply:
        sd_bus_message_unref(reply);

Reply via email to