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(¶ms);
}
+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);