From 89c7955f3d7e00c3e2e2570c7d91d4e2280832b8 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 22 Apr 2015 16:58:36 +0200 Subject: [PATCH] source: implement more properties --- src/client/pv-source-output.c | 24 ++++++++++++++++++++++++ src/client/pv-source.c | 23 ++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/client/pv-source-output.c b/src/client/pv-source-output.c index 88c8729b4..bc9281553 100644 --- a/src/client/pv-source-output.c +++ b/src/client/pv-source-output.c @@ -31,6 +31,7 @@ struct _PvSourceOutputPrivate GDBusObjectManagerServer *server_manager; gchar *object_path; + gchar *source; GSocket *socket; }; @@ -45,6 +46,7 @@ enum PROP_0, PROP_MANAGER, PROP_OBJECT_PATH, + PROP_SOURCE, PROP_SOCKET, }; @@ -66,6 +68,10 @@ pv_source_output_get_property (GObject *_object, g_value_set_string (value, priv->object_path); break; + case PROP_SOURCE: + g_value_set_string (value, priv->source); + break; + case PROP_SOCKET: g_value_set_object (value, priv->socket); break; @@ -94,6 +100,10 @@ pv_source_output_set_property (GObject *_object, priv->object_path = g_value_dup_string (value); break; + case PROP_SOURCE: + priv->source = g_value_dup_string (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (output, prop_id, pspec); break; @@ -185,6 +195,7 @@ output_register_object (PvSourceOutput *output, const gchar *prefix) PvSourceOutput1 *iface; iface = pv_source_output1_skeleton_new (); + g_object_set (iface, "source", priv->source, NULL); g_signal_connect (iface, "handle-start", (GCallback) handle_start, output); g_signal_connect (iface, "handle-stop", (GCallback) handle_stop, output); g_signal_connect (iface, "handle-remove", (GCallback) handle_remove, output); @@ -214,11 +225,14 @@ pv_source_output_finalize (GObject * object) PvSourceOutputPrivate *priv = output->priv; output_unregister_object (output); + g_object_unref (priv->server_manager); g_free (priv->object_path); + g_free (priv->source); G_OBJECT_CLASS (pv_source_output_parent_class)->finalize (object); } + static void pv_source_output_constructed (GObject * object) { @@ -262,6 +276,16 @@ pv_source_output_class_init (PvSourceOutputClass * klass) G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, + PROP_SOURCE, + g_param_spec_string ("source", + "Source", + "The source object path", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_SOCKET, g_param_spec_object ("socket", diff --git a/src/client/pv-source.c b/src/client/pv-source.c index 43a75c78c..90de27fc8 100644 --- a/src/client/pv-source.c +++ b/src/client/pv-source.c @@ -143,6 +143,24 @@ handle_create_source_output (PvSource1 *interface, return TRUE; } +static gboolean +handle_get_capabilities (PvSource1 *interface, + GDBusMethodInvocation *invocation, + GVariant *arg_properties, + gpointer user_data) +{ + PvSource *source = user_data; + GVariant *out_caps; + + out_caps = pv_source_get_capabilities (source, arg_properties); + + pv_source1_complete_get_capabilities (interface, + invocation, + out_caps); + return TRUE; +} + + static void source_register_object (PvSource *source) { @@ -159,6 +177,7 @@ source_register_object (PvSource *source) "properties", priv->properties, NULL); g_signal_connect (iface, "handle-create-source-output", (GCallback) handle_create_source_output, source); + g_signal_connect (iface, "handle-get-capabilities", (GCallback) handle_get_capabilities, source); pv_object_skeleton_set_source1 (skel, iface); g_object_unref (iface); } @@ -200,7 +219,9 @@ default_create_source_output (PvSource *source, GVariant *props, const gchar *pr { PvSourcePrivate *priv = source->priv; - return g_object_new (PV_TYPE_SOURCE_OUTPUT, "manager", priv->server_manager, "object-path", prefix, NULL); + return g_object_new (PV_TYPE_SOURCE_OUTPUT, "manager", priv->server_manager, + "object-path", prefix, + "source", priv->object_path, NULL); } static gboolean