From 242737c4dc95b0fc4909114afcbf33dbd43044fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Mon, 4 Sep 2023 11:44:48 +0200 Subject: [PATCH] screen-cast/stream: Add 'is-configured' property When this is TRUE, it has a size, position etc. Only virtual streams do this asynchronously, as they go via monitor configuration after being created. Part-of: --- src/backends/meta-screen-cast-area-stream.c | 1 + .../meta-screen-cast-monitor-stream.c | 1 + src/backends/meta-screen-cast-stream.c | 33 +++++++++++++++++++ src/backends/meta-screen-cast-stream.h | 4 +++ .../meta-screen-cast-virtual-stream-src.c | 2 ++ 5 files changed, 41 insertions(+) diff --git a/src/backends/meta-screen-cast-area-stream.c b/src/backends/meta-screen-cast-area-stream.c index ed06a5e74..0f2ff89f7 100644 --- a/src/backends/meta-screen-cast-area-stream.c +++ b/src/backends/meta-screen-cast-area-stream.c @@ -110,6 +110,7 @@ meta_screen_cast_area_stream_new (MetaScreenCastSession *session, "connection", connection, "cursor-mode", cursor_mode, "flags", flags, + "is-configured", TRUE, NULL); if (!area_stream) return NULL; diff --git a/src/backends/meta-screen-cast-monitor-stream.c b/src/backends/meta-screen-cast-monitor-stream.c index 47bdcf3bc..702351b87 100644 --- a/src/backends/meta-screen-cast-monitor-stream.c +++ b/src/backends/meta-screen-cast-monitor-stream.c @@ -134,6 +134,7 @@ meta_screen_cast_monitor_stream_new (MetaScreenCastSession *session, "connection", connection, "cursor-mode", cursor_mode, "flags", flags, + "is-configured", TRUE, "monitor", monitor, NULL); if (!monitor_stream) diff --git a/src/backends/meta-screen-cast-stream.c b/src/backends/meta-screen-cast-stream.c index 17a5dee2e..1e5616d3a 100644 --- a/src/backends/meta-screen-cast-stream.c +++ b/src/backends/meta-screen-cast-stream.c @@ -38,6 +38,7 @@ enum PROP_CONNECTION, PROP_CURSOR_MODE, PROP_FLAGS, + PROP_IS_CONFIGURED, N_PROPS }; @@ -62,6 +63,7 @@ typedef struct _MetaScreenCastStreamPrivate MetaScreenCastCursorMode cursor_mode; MetaScreenCastFlag flags; + gboolean is_configured; MetaScreenCastStreamSrc *src; @@ -233,6 +235,25 @@ meta_screen_cast_stream_get_mapping_id (MetaScreenCastStream *stream) return priv->mapping_id; } +gboolean +meta_screen_cast_stream_is_configured (MetaScreenCastStream *stream) +{ + MetaScreenCastStreamPrivate *priv = + meta_screen_cast_stream_get_instance_private (stream); + + return priv->is_configured; +} + +void +meta_screen_cast_stream_notify_is_configured (MetaScreenCastStream *stream) +{ + MetaScreenCastStreamPrivate *priv = + meta_screen_cast_stream_get_instance_private (stream); + + priv->is_configured = TRUE; + g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_IS_CONFIGURED]); +} + static void meta_screen_cast_stream_set_property (GObject *object, guint prop_id, @@ -257,6 +278,9 @@ meta_screen_cast_stream_set_property (GObject *object, case PROP_FLAGS: priv->flags = g_value_get_flags (value); break; + case PROP_IS_CONFIGURED: + priv->is_configured = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -286,6 +310,9 @@ meta_screen_cast_stream_get_property (GObject *object, case PROP_FLAGS: g_value_set_flags (value, priv->flags); break; + case PROP_IS_CONFIGURED: + g_value_set_boolean (value, priv->is_configured); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -459,6 +486,12 @@ meta_screen_cast_stream_class_init (MetaScreenCastStreamClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + obj_props[PROP_IS_CONFIGURED] = + g_param_spec_boolean ("is-configured", NULL, NULL, + FALSE, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, N_PROPS, obj_props); signals[CLOSED] = g_signal_new ("closed", diff --git a/src/backends/meta-screen-cast-stream.h b/src/backends/meta-screen-cast-stream.h index dd85b069f..59a0bed3f 100644 --- a/src/backends/meta-screen-cast-stream.h +++ b/src/backends/meta-screen-cast-stream.h @@ -69,3 +69,7 @@ MetaScreenCastCursorMode meta_screen_cast_stream_get_cursor_mode (MetaScreenCast MetaScreenCastFlag meta_screen_cast_stream_get_flags (MetaScreenCastStream *stream); const char * meta_screen_cast_stream_get_mapping_id (MetaScreenCastStream *stream); + +gboolean meta_screen_cast_stream_is_configured (MetaScreenCastStream *stream); + +void meta_screen_cast_stream_notify_is_configured (MetaScreenCastStream *stream); diff --git a/src/backends/meta-screen-cast-virtual-stream-src.c b/src/backends/meta-screen-cast-virtual-stream-src.c index b98436a5f..94e5425b6 100644 --- a/src/backends/meta-screen-cast-virtual-stream-src.c +++ b/src/backends/meta-screen-cast-virtual-stream-src.c @@ -283,6 +283,8 @@ init_record_callbacks (MetaScreenCastVirtualStreamSrc *virtual_src) break; } + meta_screen_cast_stream_notify_is_configured (stream); + if (meta_screen_cast_stream_get_cursor_mode (stream) == META_SCREEN_CAST_CURSOR_MODE_EMBEDDED) inhibit_hw_cursor (virtual_src);