From 67c120284917690287d56d2d495600d1ec1a212a Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 13 Dec 2023 17:07:29 -0300 Subject: [PATCH] linux-pipewire: Add screencast cursor_visible prop This commit adds the screencast-specific 'cursor_visible' field in an anonymous struct within the constructor struct. This slightly improves the connection code by properly treating construction-time information in a constructor struct. It allows removing the extra function call that sets cursor visibility from the Screencast portal code. Admittedly that's not much, but again, this will be an important distinction when introducing the Camera portal code, since some camera properties will need to trigger renegotiation. --- plugins/linux-pipewire/pipewire.c | 1 + plugins/linux-pipewire/pipewire.h | 3 +++ plugins/linux-pipewire/screencast-portal.c | 6 ++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 928da4e7c..1a133a255 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -1237,6 +1237,7 @@ obs_pipewire_stream *obs_pipewire_connect_stream( obs_pw_stream = bzalloc(sizeof(obs_pipewire_stream)); obs_pw_stream->obs_pw = obs_pw; obs_pw_stream->source = source; + obs_pw_stream->cursor.visible = connect_info->screencast.cursor_visible; init_format_info(obs_pw_stream); diff --git a/plugins/linux-pipewire/pipewire.h b/plugins/linux-pipewire/pipewire.h index 24d20db78..8b2663a23 100644 --- a/plugins/linux-pipewire/pipewire.h +++ b/plugins/linux-pipewire/pipewire.h @@ -31,6 +31,9 @@ typedef struct _obs_pipewire_stream obs_pipewire_stream; struct obs_pipwire_connect_stream_info { const char *stream_name; struct pw_properties *stream_properties; + struct { + bool cursor_visible; + } screencast; }; obs_pipewire *obs_pipewire_create(int pipewire_fd); diff --git a/plugins/linux-pipewire/screencast-portal.c b/plugins/linux-pipewire/screencast-portal.c index d4b360ba2..a311543b5 100644 --- a/plugins/linux-pipewire/screencast-portal.c +++ b/plugins/linux-pipewire/screencast-portal.c @@ -198,13 +198,15 @@ static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res, .stream_properties = pw_properties_new( PW_KEY_MEDIA_TYPE, "Video", PW_KEY_MEDIA_CATEGORY, "Capture", PW_KEY_MEDIA_ROLE, "Screen", NULL), + .screencast = + { + .cursor_visible = capture->cursor_visible, + }, }; capture->obs_pw_stream = obs_pipewire_connect_stream( capture->obs_pw, capture->source, capture->pipewire_node, &connect_info); - obs_pipewire_stream_set_cursor_visible(capture->obs_pw_stream, - capture->cursor_visible); } static void open_pipewire_remote(struct screencast_portal_capture *capture)