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-07-28 21:23:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr (Old)
and /work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.2004 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xdg-desktop-portal-wlr"
Tue Jul 28 21:23:28 2026 rev:14 rq:1368241 version:0.8.4
Changes:
--------
---
/work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr/xdg-desktop-portal-wlr.changes
2026-06-18 19:21:33.075472858 +0200
+++
/work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.2004/xdg-desktop-portal-wlr.changes
2026-07-28 21:23:30.317935729 +0200
@@ -1,0 +2,8 @@
+Tue Jul 28 17:33:42 UTC 2026 - Arnav Singh <[email protected]>
+
+- Update to 0.8.4:
+ * Fix source selection not working when portal client does not specify
+ source type.
+ * Fix stream freezing on PipeWire buffer starvation.
+
+-------------------------------------------------------------------
Old:
----
xdg-desktop-portal-wlr-0.8.3.tar.gz
xdg-desktop-portal-wlr-0.8.3.tar.gz.sig
New:
----
xdg-desktop-portal-wlr-0.8.4.tar.gz
xdg-desktop-portal-wlr-0.8.4.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xdg-desktop-portal-wlr.spec ++++++
--- /var/tmp/diff_new_pack.g7CTaL/_old 2026-07-28 21:23:31.329971440 +0200
+++ /var/tmp/diff_new_pack.g7CTaL/_new 2026-07-28 21:23:31.333971581 +0200
@@ -17,7 +17,7 @@
Name: xdg-desktop-portal-wlr
-Version: 0.8.3
+Version: 0.8.4
Release: 0
Summary: An xdg-desktop-portal backend for wlroots
License: MIT
++++++ xdg-desktop-portal-wlr-0.8.3.tar.gz ->
xdg-desktop-portal-wlr-0.8.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.3/include/screencast_common.h
new/xdg-desktop-portal-wlr-0.8.4/include/screencast_common.h
--- old/xdg-desktop-portal-wlr-0.8.3/include/screencast_common.h
2026-06-18 17:23:58.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.8.4/include/screencast_common.h
2026-07-28 18:58:20.000000000 +0200
@@ -198,6 +198,7 @@
uint32_t node_id;
bool pwr_stream_state;
uint32_t framerate;
+ struct xdpw_timer *process_retry;
// wlroots
union {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.8.3/meson.build
new/xdg-desktop-portal-wlr-0.8.4/meson.build
--- old/xdg-desktop-portal-wlr-0.8.3/meson.build 2026-06-18
17:23:58.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.8.4/meson.build 2026-07-28
18:58:20.000000000 +0200
@@ -1,7 +1,7 @@
project(
'xdg-desktop-portal-wlr',
'c',
- version: '0.8.3',
+ version: '0.8.4',
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.3/src/screencast/pipewire_screencast.c
new/xdg-desktop-portal-wlr-0.8.4/src/screencast/pipewire_screencast.c
--- old/xdg-desktop-portal-wlr-0.8.3/src/screencast/pipewire_screencast.c
2026-06-18 17:23:58.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.8.4/src/screencast/pipewire_screencast.c
2026-07-28 18:58:20.000000000 +0200
@@ -233,6 +233,7 @@
if (cast->current_frame.y_invert) {
//TODO: Flip buffer or set stride negative
+ logprint(ERROR, "pipewire: Y-invert flag is not supported");
xdpw_screencast_instance_destroy(cast);
return;
}
@@ -347,6 +348,11 @@
wl_array_release(¶ms);
}
+static void pwr_disarm_process_retry(struct xdpw_screencast_instance *cast) {
+ xdpw_destroy_timer(cast->process_retry);
+ cast->process_retry = NULL;
+}
+
static void pwr_handle_stream_state_changed(void *data,
enum pw_stream_state old, enum pw_stream_state state, const
char *error) {
struct xdpw_screencast_instance *cast = data;
@@ -363,12 +369,13 @@
xdpw_wlr_frame_capture(cast);
break;
case PW_STREAM_STATE_PAUSED:
- if (old == PW_STREAM_STATE_STREAMING) {
+ if (old == PW_STREAM_STATE_STREAMING &&
cast->current_frame.pw_buffer) {
xdpw_pwr_enqueue_buffer(cast);
}
// fall through
default:
cast->pwr_stream_state = false;
+ pwr_disarm_process_retry(cast);
break;
}
}
@@ -588,6 +595,38 @@
buffer->user_data = NULL;
}
+static uint64_t pwr_process_retry_delay(struct xdpw_screencast_instance *cast)
{
+ // max_framerate is only valid when framerate is (0/1) (variable rate
negotiated)
+ struct spa_fraction *rate = &cast->pwr_format.framerate;
+ if (rate->num == 0) {
+ rate = &cast->pwr_format.max_framerate;
+ }
+ if (rate->num > 0 && rate->denom > 0) {
+ return (uint64_t)SPA_NSEC_PER_SEC * rate->denom / rate->num;
+ }
+ return SPA_NSEC_PER_SEC / 60; // ~16ms/60fps fallback
+}
+
+static void pwr_process_retry(void *data);
+
+static void pwr_arm_process_retry(struct xdpw_screencast_instance *cast) {
+ if (cast->process_retry) {
+ return;
+ }
+ cast->process_retry = xdpw_add_timer(cast->ctx->state,
+ pwr_process_retry_delay(cast), pwr_process_retry, cast);
+ if (!cast->process_retry) {
+ logprint(ERROR, "pipewire: failed to arm process retry timer,
stream may stall");
+ }
+}
+
+static void pwr_process_retry(void *data) {
+ struct xdpw_screencast_instance *cast = data;
+ cast->process_retry = NULL; // timer destroyed in event loop
+ pwr_arm_process_retry(cast);
+ pw_stream_trigger_process(cast->stream);
+}
+
static void pwr_handle_stream_on_process(void *data) {
struct xdpw_screencast_instance *cast = data;
@@ -605,13 +644,15 @@
xdpw_pwr_dequeue_buffer(cast);
if (!cast->current_frame.pw_buffer) {
- logprint(WARN, "pipewire: unable to export buffer");
+ logprint(WARN, "pipewire: unable to export buffer, dropping
frame");
+ pwr_arm_process_retry(cast);
return;
}
+
+ pwr_disarm_process_retry(cast);
xdpw_wlr_frame_capture(cast);
}
-
static const struct pw_stream_events pwr_stream_events = {
PW_VERSION_STREAM_EVENTS,
.state_changed = pwr_handle_stream_state_changed,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-wlr-0.8.3/src/screencast/screencast.c
new/xdg-desktop-portal-wlr-0.8.4/src/screencast/screencast.c
--- old/xdg-desktop-portal-wlr-0.8.3/src/screencast/screencast.c
2026-06-18 17:23:58.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.8.4/src/screencast/screencast.c
2026-07-28 18:58:20.000000000 +0200
@@ -371,7 +371,7 @@
char *key;
int innerRet = 0;
- uint32_t type_mask = 0;
+ uint32_t type_mask = MONITOR;
struct xdpw_screencast_restore_data restore_data = {0};
while ((ret = sd_bus_message_enter_container(msg, 'e', "sv")) > 0) {
innerRet = sd_bus_message_read(msg, "s", &key);