From e7815dff667104e2357ee83cdaafa1e178947439 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 2 Apr 2022 16:12:29 -0300 Subject: [PATCH] linux-pipewire: Explicitly enumerate cursor modes The ScreenCast portal defines 3 cursor modes [1]: * Hidden: no visible cursor (value: 1) * Embedded: cursor is drawn in the frames (value: 2) * Metadata: cursor is sent as stream metadata (value: 4) The values are power-of-two due to be used as flags. Explicitly listing these values in an enum improves legibility of the code, so do that instead of hardcoding 1, 2, and 4. [1] https://github.com/flatpak/xdg-desktop-portal/blob/main/data/org.freedesktop.portal.ScreenCast.xml#L302-L316 --- plugins/linux-pipewire/pipewire.c | 20 ++++++++++++-------- plugins/linux-pipewire/portal.h | 6 ++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 284e4b738..f07f22a13 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -1228,15 +1228,19 @@ static void select_source(obs_pipewire_data *obs_pw) available_cursor_modes = portal_get_available_cursor_modes(); - if (available_cursor_modes & 4) - g_variant_builder_add(&builder, "{sv}", "cursor_mode", - g_variant_new_uint32(4)); - else if ((available_cursor_modes & 2) && obs_pw->cursor.visible) - g_variant_builder_add(&builder, "{sv}", "cursor_mode", - g_variant_new_uint32(2)); + if (available_cursor_modes & PORTAL_CURSOR_MODE_METADATA) + g_variant_builder_add( + &builder, "{sv}", "cursor_mode", + g_variant_new_uint32(PORTAL_CURSOR_MODE_METADATA)); + else if ((available_cursor_modes & PORTAL_CURSOR_MODE_EMBEDDED) && + obs_pw->cursor.visible) + g_variant_builder_add( + &builder, "{sv}", "cursor_mode", + g_variant_new_uint32(PORTAL_CURSOR_MODE_EMBEDDED)); else - g_variant_builder_add(&builder, "{sv}", "cursor_mode", - g_variant_new_uint32(1)); + g_variant_builder_add( + &builder, "{sv}", "cursor_mode", + g_variant_new_uint32(PORTAL_CURSOR_MODE_HIDDEN)); if (portal_get_screencast_version() >= 4) { g_variant_builder_add(&builder, "{sv}", "persist_mode", diff --git a/plugins/linux-pipewire/portal.h b/plugins/linux-pipewire/portal.h index 3badc5de8..8e4456af1 100644 --- a/plugins/linux-pipewire/portal.h +++ b/plugins/linux-pipewire/portal.h @@ -23,6 +23,12 @@ #include #include +enum portal_cursor_mode { + PORTAL_CURSOR_MODE_HIDDEN = 1 << 0, + PORTAL_CURSOR_MODE_EMBEDDED = 1 << 1, + PORTAL_CURSOR_MODE_METADATA = 1 << 2, +}; + uint32_t portal_get_available_capture_types(void); uint32_t portal_get_available_cursor_modes(void); uint32_t portal_get_screencast_version(void);