[mutter] screen-cast-stream: Add stream parameters
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] screen-cast-stream: Add stream parameters
- Date: Wed, 20 Sep 2017 10:29:20 +0000 (UTC)
commit a35274ddb7afce19674b54b7659c8730d298ceae
Author: Jonas Ådahl <jadahl gmail com>
Date: Tue Sep 12 09:19:51 2017 +0800
screen-cast-stream: Add stream parameters
For monitor streams, add position and size (in compositor coordinate
space) parameters.
https://bugzilla.gnome.org/show_bug.cgi?id=787715
src/backends/meta-screen-cast-monitor-stream.c | 91 ++++++++++++++++++++++--
src/backends/meta-screen-cast-stream.c | 17 +++++
src/backends/meta-screen-cast-stream.h | 2 +
src/org.gnome.Mutter.ScreenCast.xml | 13 ++++
4 files changed, 118 insertions(+), 5 deletions(-)
---
diff --git a/src/backends/meta-screen-cast-monitor-stream.c b/src/backends/meta-screen-cast-monitor-stream.c
index 1630b8e..ece7efc 100644
--- a/src/backends/meta-screen-cast-monitor-stream.c
+++ b/src/backends/meta-screen-cast-monitor-stream.c
@@ -27,6 +27,13 @@
#include "backends/meta-logical-monitor.h"
#include "backends/meta-screen-cast-monitor-stream-src.h"
+enum
+{
+ PROP_0,
+
+ PROP_MONITOR,
+};
+
struct _MetaScreenCastMonitorStream
{
MetaScreenCastStream parent;
@@ -105,10 +112,8 @@ meta_screen_cast_monitor_stream_new (GDBusConnection *connection,
GError **error)
{
MetaScreenCastMonitorStream *monitor_stream;
- MetaLogicalMonitor *logical_monitor;
- logical_monitor = meta_monitor_get_logical_monitor (monitor);
- if (!logical_monitor)
+ if (!meta_monitor_is_active (monitor))
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Monitor not active");
return NULL;
@@ -118,12 +123,11 @@ meta_screen_cast_monitor_stream_new (GDBusConnection *connection,
NULL,
error,
"connection", connection,
+ "monitor", monitor,
NULL);
if (!monitor_stream)
return NULL;
- g_set_object (&monitor_stream->monitor, monitor);
- g_set_object (&monitor_stream->logical_monitor, logical_monitor);
monitor_stream->stage = stage;
g_signal_connect_object (monitor_manager, "monitors-changed",
@@ -150,6 +154,70 @@ meta_screen_cast_monitor_stream_create_src (MetaScreenCastStream *stream,
}
static void
+meta_screen_cast_monitor_stream_set_parameters (MetaScreenCastStream *stream,
+ GVariantBuilder *parameters_builder)
+{
+ MetaScreenCastMonitorStream *monitor_stream =
+ META_SCREEN_CAST_MONITOR_STREAM (stream);
+ MetaRectangle logical_monitor_layout;
+
+ logical_monitor_layout =
+ meta_logical_monitor_get_layout (monitor_stream->logical_monitor);
+
+ g_variant_builder_add (parameters_builder, "{sv}",
+ "position",
+ g_variant_new ("(ii)",
+ logical_monitor_layout.x,
+ logical_monitor_layout.y));
+ g_variant_builder_add (parameters_builder, "{sv}",
+ "size",
+ g_variant_new ("(ii)",
+ logical_monitor_layout.width,
+ logical_monitor_layout.height));
+}
+
+static void
+meta_screen_cast_monitor_stream_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MetaScreenCastMonitorStream *monitor_stream =
+ META_SCREEN_CAST_MONITOR_STREAM (object);
+ MetaLogicalMonitor *logical_monitor;
+
+ switch (prop_id)
+ {
+ case PROP_MONITOR:
+ g_set_object (&monitor_stream->monitor, g_value_get_object (value));
+ logical_monitor = meta_monitor_get_logical_monitor (monitor_stream->monitor);
+ g_set_object (&monitor_stream->logical_monitor, logical_monitor);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+meta_screen_cast_monitor_stream_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MetaScreenCastMonitorStream *monitor_stream =
+ META_SCREEN_CAST_MONITOR_STREAM (object);
+
+ switch (prop_id)
+ {
+ case PROP_MONITOR:
+ g_value_set_object (value, monitor_stream->monitor);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
meta_screen_cast_monitor_stream_finalize (GObject *object)
{
MetaScreenCastMonitorStream *monitor_stream =
@@ -173,7 +241,20 @@ meta_screen_cast_monitor_stream_class_init (MetaScreenCastMonitorStreamClass *kl
MetaScreenCastStreamClass *stream_class =
META_SCREEN_CAST_STREAM_CLASS (klass);
+ object_class->set_property = meta_screen_cast_monitor_stream_set_property;
+ object_class->get_property = meta_screen_cast_monitor_stream_get_property;
object_class->finalize = meta_screen_cast_monitor_stream_finalize;
stream_class->create_src = meta_screen_cast_monitor_stream_create_src;
+ stream_class->set_parameters = meta_screen_cast_monitor_stream_set_parameters;
+
+ g_object_class_install_property (object_class,
+ PROP_MONITOR,
+ g_param_spec_object ("monitor",
+ "monitor",
+ "MetaMonitor",
+ META_TYPE_MONITOR,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/src/backends/meta-screen-cast-stream.c b/src/backends/meta-screen-cast-stream.c
index 1a8ef6b..1c96135 100644
--- a/src/backends/meta-screen-cast-stream.c
+++ b/src/backends/meta-screen-cast-stream.c
@@ -69,6 +69,14 @@ meta_screen_cast_stream_create_src (MetaScreenCastStream *stream,
}
static void
+meta_screen_cast_stream_set_parameters (MetaScreenCastStream *stream,
+ GVariantBuilder *parameters_builder)
+{
+ META_SCREEN_CAST_STREAM_GET_CLASS (stream)->set_parameters (stream,
+ parameters_builder);
+}
+
+static void
on_stream_src_closed (MetaScreenCastStreamSrc *src,
MetaScreenCastStream *stream)
{
@@ -189,10 +197,19 @@ meta_screen_cast_stream_initable_init (GInitable *initable,
GError **error)
{
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (initable);
+ MetaDBusScreenCastStream *skeleton = META_DBUS_SCREEN_CAST_STREAM (stream);
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
+ GVariantBuilder parameters_builder;
+ GVariant *parameters_variant;
static unsigned int global_stream_number = 0;
+ g_variant_builder_init (¶meters_builder, G_VARIANT_TYPE_VARDICT);
+ meta_screen_cast_stream_set_parameters (stream, ¶meters_builder);
+
+ parameters_variant = g_variant_builder_end (¶meters_builder);
+ meta_dbus_screen_cast_stream_set_parameters (skeleton, parameters_variant);
+
priv->object_path =
g_strdup_printf (META_SCREEN_CAST_STREAM_DBUS_PATH "/u%u",
++global_stream_number);
diff --git a/src/backends/meta-screen-cast-stream.h b/src/backends/meta-screen-cast-stream.h
index 1ed1a83..36706ee 100644
--- a/src/backends/meta-screen-cast-stream.h
+++ b/src/backends/meta-screen-cast-stream.h
@@ -39,6 +39,8 @@ struct _MetaScreenCastStreamClass
MetaScreenCastStreamSrc * (* create_src) (MetaScreenCastStream *stream,
GError **error);
+ void (* set_parameters) (MetaScreenCastStream *stream,
+ GVariantBuilder *parameters_builder);
};
gboolean meta_screen_cast_stream_start (MetaScreenCastStream *stream,
diff --git a/src/org.gnome.Mutter.ScreenCast.xml b/src/org.gnome.Mutter.ScreenCast.xml
index f774091..409247b 100644
--- a/src/org.gnome.Mutter.ScreenCast.xml
+++ b/src/org.gnome.Mutter.ScreenCast.xml
@@ -102,6 +102,19 @@
<arg name="node_id" type="u" direction="out" />
</signal>
+ <!--
+ Parameters:
+ @short_description: Optional stream parameters
+
+ Available parameters include:
+
+ * "position" (ii): Position of the source of the stream in the
+ compositor coordinate space.
+ * "size" (ii): Size of the source of the stream in the compositor
+ coordinate space.
+ -->
+ <property name="Parameters" type="a{sv}" access="read" />
+
</interface>
</node>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]