sm-commit AT lists.ibiblio.org
Subject: Source Mage code commit list
List archive
[[SM-Commit] ] GIT changes to master grimoire by Ismael Luceno (bf6f8d63b28f9c2b2ef3c6c2b188cdd09d166067)
- From: Ismael Luceno <scm AT sourcemage.org>
- To: sm-commit AT lists.ibiblio.org, sm-commit AT lists.sourcemage.org
- Subject: [[SM-Commit] ] GIT changes to master grimoire by Ismael Luceno (bf6f8d63b28f9c2b2ef3c6c2b188cdd09d166067)
- Date: Thu, 24 Sep 2026 04:21:10 +0000
GIT changes to master grimoire by Ismael Luceno <ismael AT sourcemage.org>:
utils/xdg-desktop-portal-wlr/DETAILS
| 1
utils/xdg-desktop-portal-wlr/HISTORY
| 6
utils/xdg-desktop-portal-wlr/PRE_BUILD
| 3
utils/xdg-desktop-portal-wlr/patches/0001-screencast-warn-when-no-PipeWire-session-manager-is-.patch
| 145 ++++++++++
utils/xdg-desktop-portal-wlr/patches/0002-screencast-notify-when-no-PipeWire-session-manager-i.patch
| 99 ++++++
video/obs-studio/DETAILS
| 4
video/obs-studio/HISTORY
| 3
7 files changed, 259 insertions(+), 2 deletions(-)
New commits:
commit bf6f8d63b28f9c2b2ef3c6c2b188cdd09d166067
Author: Ismael Luceno <ismael AT sourcemage.org>
Commit: Ismael Luceno <ismael AT sourcemage.org>
obs-studio 32.2.2
commit 1fb70e314f065ced43c13ebb9955d5d13fb31744
Author: Ismael Luceno <ismael AT sourcemage.org>
Commit: Ismael Luceno <ismael AT sourcemage.org>
xdg-desktop-portal-wlr: Add no-session-manager warnings
diff --git a/utils/xdg-desktop-portal-wlr/DETAILS
b/utils/xdg-desktop-portal-wlr/DETAILS
index 435c6ed..25660fb 100755
--- a/utils/xdg-desktop-portal-wlr/DETAILS
+++ b/utils/xdg-desktop-portal-wlr/DETAILS
@@ -1,6 +1,7 @@
. ${GRIMOIRE}/MESON_FUNCTIONS
SPELL=xdg-desktop-portal-wlr
VERSION=0.8.4
+ PATCHLEVEL=1
SOURCE=${SPELL}-${VERSION}.tar.gz
SOURCE_DIRECTORY="$BUILD_DIRECTORY/${SPELL}-${VERSION}"
SOURCE_URL[0]=https://www.github.com/emersion/${SPELL}/releases/download/v${VERSION}/$SOURCE
diff --git a/utils/xdg-desktop-portal-wlr/HISTORY
b/utils/xdg-desktop-portal-wlr/HISTORY
index 3fa96a0..25885b8 100644
--- a/utils/xdg-desktop-portal-wlr/HISTORY
+++ b/utils/xdg-desktop-portal-wlr/HISTORY
@@ -1,3 +1,9 @@
+2026-09-24 Ismael Luceno <ismael AT sourcemage.org>
+ * PRE_BUILD,
patches/0001-screencast-warn-when-no-PipeWire-session-manager-is-.patch,
+
patches/0002-screencast-notify-when-no-PipeWire-session-manager-i.patch:
+ added no-session-manager warnings to aid debugging
+ * DETAILS: PATCHLEVEL++
+
2026-08-11 Ismael Luceno <ismael AT sourcemage.org>
* DETAILS: updated spell to 0.8.4
diff --git a/utils/xdg-desktop-portal-wlr/PRE_BUILD
b/utils/xdg-desktop-portal-wlr/PRE_BUILD
new file mode 100755
index 0000000..c230ad1
--- /dev/null
+++ b/utils/xdg-desktop-portal-wlr/PRE_BUILD
@@ -0,0 +1,3 @@
+default_pre_build &&
+cd "$SOURCE_DIRECTORY" &&
+apply_patch_dir patches
diff --git
a/utils/xdg-desktop-portal-wlr/patches/0001-screencast-warn-when-no-PipeWire-session-manager-is-.patch
b/utils/xdg-desktop-portal-wlr/patches/0001-screencast-warn-when-no-PipeWire-session-manager-is-.patch
new file mode 100644
index 0000000..80e6d15
--- /dev/null
+++
b/utils/xdg-desktop-portal-wlr/patches/0001-screencast-warn-when-no-PipeWire-session-manager-is-.patch
@@ -0,0 +1,145 @@
+From 29140608b5ac2842941ab684749f1a97b4d6c5f7 Mon Sep 17 00:00:00 2001
+From: Ismael Luceno <iluceno AT suse.de>
+Date: Wed, 23 Sep 2026 12:31:10 +0200
+Subject: [PATCH 1/2] screencast: warn when no PipeWire session manager is
+ running
+
+Without a session manager, the stream is never linked or activated, it
+stays in the "paused" state and clients silently fail to capture, while
+the log looks perfectly healthy. This is hard to diagnose.
+
+Watch the PipeWire registry for the "default" metadata object that the
+session manager publishes. If it is missing when a stream is created,
+log a warning pointing at the likely cause. Also log at INFO level when
+the session manager appears, and warn if it goes away.
+
+Upstream-Status: Submitted
+ [https://github.com/emersion/xdg-desktop-portal-wlr/pull/402]
+Signed-off-by: Ismael Luceno <ismael AT sourcemage.org>
+---
+ include/screencast_common.h | 4 ++
+ src/screencast/pipewire_screencast.c | 58 ++++++++++++++++++++++++++++
+ 2 files changed, 62 insertions(+)
+
+diff --git a/include/screencast_common.h b/include/screencast_common.h
+index 113c44f..6f2b7f5 100644
+--- a/include/screencast_common.h
++++ b/include/screencast_common.h
+@@ -109,6 +109,10 @@ struct xdpw_screencast_context {
+ // pipewire
+ struct pw_context *pwr_context;
+ struct pw_core *core;
++ struct pw_registry *pwr_registry;
++ struct spa_hook pwr_registry_listener;
++ uint32_t pwr_metadata_id;
++ bool pwr_session_manager;
+
+ // wlroots
+ struct wl_list output_list;
+diff --git a/src/screencast/pipewire_screencast.c
b/src/screencast/pipewire_screencast.c
+index 1f24760..2adf668 100644
+--- a/src/screencast/pipewire_screencast.c
++++ b/src/screencast/pipewire_screencast.c
+@@ -1,6 +1,7 @@
+ #include "pipewire_screencast.h"
+
+ #include <pipewire/pipewire.h>
++#include <pipewire/extensions/metadata.h>
+ #include <spa/buffer/meta.h>
+ #include <spa/utils/result.h>
+ #include <spa/param/props.h>
+@@ -10,6 +11,7 @@
+ #include <sys/mman.h>
+ #include <unistd.h>
+ #include <assert.h>
++#include <string.h>
+ #include <libdrm/drm_fourcc.h>
+
+ #include "screencast.h"
+@@ -668,6 +670,12 @@ void xdpw_pwr_stream_create(struct
xdpw_screencast_instance *cast) {
+
+ pw_loop_enter(state->pw_loop);
+
++ if (!ctx->pwr_session_manager) {
++ logprint(WARN, "pipewire: no session manager detected (no
'default' "
++ "metadata found); the stream will most likely stay
paused and "
++ "clients will fail to capture. Is WirePlumber
running?");
++ }
++
+ uint8_t buffer[2 * 1024];
+ struct spa_pod_dynamic_builder builder;;
+ spa_pod_dynamic_builder_init(&builder, buffer, sizeof(buffer), 2048);
+@@ -731,6 +739,38 @@ static const struct pw_core_events core_events = {
+
+ static struct spa_hook core_listener;
+
++// A session manager (e.g. WirePlumber) is what links and activates streams.
++// Without one the stream stays paused and no error is reported anywhere, so
++// track the "default" metadata object it publishes to be able to say so.
++static void pwr_registry_global(void *data, uint32_t id, uint32_t
permissions,
++ const char *type, uint32_t version, const struct spa_dict
*props) {
++ struct xdpw_screencast_context *ctx = data;
++ if (props == NULL || strcmp(type, PW_TYPE_INTERFACE_Metadata) != 0) {
++ return;
++ }
++ const char *name = spa_dict_lookup(props, PW_KEY_METADATA_NAME);
++ if (name == NULL || strcmp(name, "default") != 0) {
++ return;
++ }
++ ctx->pwr_metadata_id = id;
++ ctx->pwr_session_manager = true;
++ logprint(INFO, "pipewire: session manager detected ('default'
metadata, id %u)", id);
++}
++
++static void pwr_registry_global_remove(void *data, uint32_t id) {
++ struct xdpw_screencast_context *ctx = data;
++ if (ctx->pwr_session_manager && id == ctx->pwr_metadata_id) {
++ ctx->pwr_session_manager = false;
++ logprint(WARN, "pipewire: session manager went away
('default' metadata removed)");
++ }
++}
++
++static const struct pw_registry_events registry_events = {
++ PW_VERSION_REGISTRY_EVENTS,
++ .global = pwr_registry_global,
++ .global_remove = pwr_registry_global_remove,
++};
++
+ int xdpw_pwr_context_create(struct xdpw_state *state) {
+ struct xdpw_screencast_context *ctx = &state->screencast;
+
+@@ -755,6 +795,17 @@ int xdpw_pwr_context_create(struct xdpw_state *state) {
+ // (i.e. in case the pipewire daemon is restarted).
+ spa_zero(core_listener);
+ pw_core_add_listener(ctx->core, &core_listener, &core_events,
state);
++
++ ctx->pwr_session_manager = false;
++ ctx->pwr_registry = pw_core_get_registry(ctx->core,
PW_VERSION_REGISTRY, 0);
++ if (ctx->pwr_registry) {
++ spa_zero(ctx->pwr_registry_listener);
++ pw_registry_add_listener(ctx->pwr_registry,
++ &ctx->pwr_registry_listener,
®istry_events, ctx);
++ } else {
++ logprint(WARN, "pipewire: failed to get registry, "
++ "can't detect a missing session manager");
++ }
+ }
+ return 0;
+ }
+@@ -764,6 +815,13 @@ void xdpw_pwr_context_destroy(struct xdpw_state *state)
{
+
+ logprint(DEBUG, "pipewire: disconnecting fom core");
+
++ if (ctx->pwr_registry) {
++ spa_hook_remove(&ctx->pwr_registry_listener);
++ pw_proxy_destroy((struct pw_proxy *)ctx->pwr_registry);
++ ctx->pwr_registry = NULL;
++ ctx->pwr_session_manager = false;
++ }
++
+ if (ctx->core) {
+ pw_core_disconnect(ctx->core);
+ ctx->core = NULL;
+--
+2.43.0
+
diff --git
a/utils/xdg-desktop-portal-wlr/patches/0002-screencast-notify-when-no-PipeWire-session-manager-i.patch
b/utils/xdg-desktop-portal-wlr/patches/0002-screencast-notify-when-no-PipeWire-session-manager-i.patch
new file mode 100644
index 0000000..c1dc911
--- /dev/null
+++
b/utils/xdg-desktop-portal-wlr/patches/0002-screencast-notify-when-no-PipeWire-session-manager-i.patch
@@ -0,0 +1,99 @@
+From 4c221edbf8a2ee3e0073713f5c39cfd91feabcbe Mon Sep 17 00:00:00 2001
+From: Ismael Luceno <iluceno AT suse.de>
+Date: Wed, 23 Sep 2026 12:32:37 +0200
+Subject: [PATCH 2/2] screencast: notify when no PipeWire session manager is
+ running
+
+Send desktop notifications too; the warning added previously only shows
+up in the log and most users will just see an application that captures
+nothing.
+
+Upstream-Status: Submitted
+ [https://github.com/emersion/xdg-desktop-portal-wlr/pull/402]
+Signed-off-by: Ismael Luceno <ismael AT sourcemage.org>
+---
+ include/screencast_common.h | 1 +
+ src/screencast/pipewire_screencast.c | 41 ++++++++++++++++++++++++++++
+ 2 files changed, 42 insertions(+)
+
+diff --git a/include/screencast_common.h b/include/screencast_common.h
+index 6f2b7f5..d298bbb 100644
+--- a/include/screencast_common.h
++++ b/include/screencast_common.h
+@@ -113,6 +113,7 @@ struct xdpw_screencast_context {
+ struct spa_hook pwr_registry_listener;
+ uint32_t pwr_metadata_id;
+ bool pwr_session_manager;
++ bool pwr_session_manager_notified;
+
+ // wlroots
+ struct wl_list output_list;
+diff --git a/src/screencast/pipewire_screencast.c
b/src/screencast/pipewire_screencast.c
+index 2adf668..32bfa2b 100644
+--- a/src/screencast/pipewire_screencast.c
++++ b/src/screencast/pipewire_screencast.c
+@@ -664,6 +664,45 @@ static const struct pw_stream_events pwr_stream_events
= {
+ .process = pwr_handle_stream_on_process,
+ };
+
++// Show a desktop notification (best effort, fire and forget), since the
++// failure otherwise shows up only as a client that captures nothing.
++static void pwr_notify_no_session_manager(struct xdpw_screencast_context
*ctx) {
++ if (ctx->pwr_session_manager_notified) {
++ return;
++ }
++ ctx->pwr_session_manager_notified = true;
++
++ sd_bus_message *msg = NULL;
++ int ret = sd_bus_message_new_method_call(ctx->state->bus, &msg,
++ "org.freedesktop.Notifications",
"/org/freedesktop/Notifications",
++ "org.freedesktop.Notifications", "Notify");
++ if (ret < 0) {
++ goto err;
++ }
++ ret = sd_bus_message_append(msg, "susss", "xdg-desktop-portal-wlr",
0u,
++ "dialog-warning", "Screen sharing will not work",
++ "PipeWire has no session manager running (is WirePlumber
started?). "
++ "Screencast streams will stay paused and the sharing
application "
++ "will show nothing.");
++ if (ret < 0) {
++ goto err;
++ }
++ ret = sd_bus_message_append(msg, "asa{sv}i", 0, 0, 15000);
++ if (ret < 0) {
++ goto err;
++ }
++ ret = sd_bus_send(ctx->state->bus, msg, NULL);
++ if (ret < 0) {
++ goto err;
++ }
++ sd_bus_message_unref(msg);
++ return;
++
++err:
++ logprint(DEBUG, "pipewire: failed to send notification: %s",
strerror(-ret));
++ sd_bus_message_unref(msg);
++}
++
+ void xdpw_pwr_stream_create(struct xdpw_screencast_instance *cast) {
+ struct xdpw_screencast_context *ctx = cast->ctx;
+ struct xdpw_state *state = ctx->state;
+@@ -674,6 +713,7 @@ void xdpw_pwr_stream_create(struct
xdpw_screencast_instance *cast) {
+ logprint(WARN, "pipewire: no session manager detected (no
'default' "
+ "metadata found); the stream will most likely stay
paused and "
+ "clients will fail to capture. Is WirePlumber
running?");
++ pwr_notify_no_session_manager(ctx);
+ }
+
+ uint8_t buffer[2 * 1024];
+@@ -754,6 +794,7 @@ static void pwr_registry_global(void *data, uint32_t id,
uint32_t permissions,
+ }
+ ctx->pwr_metadata_id = id;
+ ctx->pwr_session_manager = true;
++ ctx->pwr_session_manager_notified = false;
+ logprint(INFO, "pipewire: session manager detected ('default'
metadata, id %u)", id);
+ }
+
+--
+2.43.0
+
diff --git a/video/obs-studio/DETAILS b/video/obs-studio/DETAILS
index 4294f6d..1fa0d06 100755
--- a/video/obs-studio/DETAILS
+++ b/video/obs-studio/DETAILS
@@ -1,9 +1,9 @@
. "$GRIMOIRE"/CMAKE_FUNCTIONS
SPELL=obs-studio
- VERSION=32.2.1
+ VERSION=32.2.2
SOURCE="$SPELL-$VERSION.tar.gz"
SOURCE_URL[0]=https://github.com/obsproject/$SPELL/archive/refs/tags/$VERSION.tar.gz
-
SOURCE_HASH=sha512:04ebad0debfa179d9a9023d6589f49640aa1cc20003349c80f20db20b831b299be7e4f8bbf5bf7017dfbd1bc99a8579f0a0f050e000aa0a4c66a7d49587faa5a
+
SOURCE_HASH=sha512:3ea88c32f8c0564295cb15ab6d93376d878c26b4dc27d36872905d940f8855bb6ce36fcf71a3980382ab186c8325d31147b444f30761b92831ef9e50453cc6eb
SOURCE_DIRECTORY="$BUILD_DIRECTORY/$SPELL-$VERSION"
SOURCE2="obs-browser-a76b4d8810a0a33e91ac5b76a0b1af2f22bf8efd.tar.gz"
SOURCE2_URL[0]=https://github.com/obsproject/obs-browser/archive/${SOURCE2##*-}
diff --git a/video/obs-studio/HISTORY b/video/obs-studio/HISTORY
index 2ba77b0..49949a3 100644
--- a/video/obs-studio/HISTORY
+++ b/video/obs-studio/HISTORY
@@ -1,3 +1,6 @@
+2026-09-24 Ismael Luceno <ismael AT sourcemage.org>
+ * DETAILS: updated spell to 32.2.2
+
2026-08-11 Ismael Luceno <ismael AT sourcemage.org>
* DEPENDS, DETAILS: updated spell to 32.2.1
- [[SM-Commit] ] GIT changes to master grimoire by Ismael Luceno (bf6f8d63b28f9c2b2ef3c6c2b188cdd09d166067), Ismael Luceno, 09/24/2026
Archive powered by MHonArc 2.6.24.