PipeWire capturer: request mouse cursor to be part of the stream
We need to specify that the cursor should be included in the stream as
by default xdg-desktop-portal defaults to hidden cursor.
Bug: chromium:1202526
Change-Id: Ic4742da2e51f7ed28cb9d7b6b0c069c1fa7d0cee
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/214782
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34137}
diff --git a/modules/desktop_capture/linux/base_capturer_pipewire.cc b/modules/desktop_capture/linux/base_capturer_pipewire.cc
index 919415e..e5d001e 100644
--- a/modules/desktop_capture/linux/base_capturer_pipewire.cc
+++ b/modules/desktop_capture/linux/base_capturer_pipewire.cc
@@ -1026,6 +1026,23 @@
// We don't want to allow selection of multiple sources.
g_variant_builder_add(&builder, "{sv}", "multiple",
g_variant_new_boolean(false));
+
+ Scoped<GVariant> variant(
+ g_dbus_proxy_get_cached_property(proxy_, "AvailableCursorModes"));
+ if (variant.get()) {
+ uint32_t modes = 0;
+ g_variant_get(variant.get(), "u", &modes);
+ // Request mouse cursor to be embedded as part of the stream, otherwise it
+ // is hidden by default. Make request only if this mode is advertised by
+ // the portal implementation.
+ if (modes &
+ static_cast<uint32_t>(BaseCapturerPipeWire::CursorMode::kEmbedded)) {
+ g_variant_builder_add(&builder, "{sv}", "cursor_mode",
+ g_variant_new_uint32(static_cast<uint32_t>(
+ BaseCapturerPipeWire::CursorMode::kEmbedded)));
+ }
+ }
+
variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT));
g_variant_builder_add(&builder, "{sv}", "handle_token",
g_variant_new_string(variant_string.get()));
diff --git a/modules/desktop_capture/linux/base_capturer_pipewire.h b/modules/desktop_capture/linux/base_capturer_pipewire.h
index 75d20db..5226418 100644
--- a/modules/desktop_capture/linux/base_capturer_pipewire.h
+++ b/modules/desktop_capture/linux/base_capturer_pipewire.h
@@ -47,6 +47,12 @@
kAny = 0b11
};
+ enum class CursorMode : uint32_t {
+ kHidden = 0b01,
+ kEmbedded = 0b10,
+ kMetadata = 0b100
+ };
+
explicit BaseCapturerPipeWire(CaptureSourceType source_type);
~BaseCapturerPipeWire() override;