tlscertificate: add support for certificate chains
[platform/upstream/glib.git] / gio / gdbusactiongroup.c
index 4e08d10..57454ed 100644 (file)
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
  *
  * Authors: Ryan Lortie <desrt@desrt.ca>
  */
 
 #include "config.h"
 
-#include "gdbusactiongroup.h"
+#include "gdbusactiongroup-private.h"
 
+#include "gremoteactiongroup.h"
 #include "gdbusconnection.h"
 #include "gactiongroup.h"
 
@@ -31,7 +30,8 @@
  * SECTION:gdbusactiongroup
  * @title: GDBusActionGroup
  * @short_description: A D-Bus GActionGroup implementation
- * @see_also: <link linkend="gio-GActionGroup-exporter">GActionGroup exporter</link>
+ * @include: gio/gio.h
+ * @see_also: [GActionGroup exporter][gio-GActionGroup-exporter]
  *
  * #GDBusActionGroup is an implementation of the #GActionGroup
  * interface that can be used as a proxy for an action group
@@ -91,7 +91,7 @@ action_info_free (gpointer user_data)
   g_slice_free (ActionInfo, info);
 }
 
-ActionInfo *
+static ActionInfo *
 action_info_new_from_iter (GVariantIter *iter)
 {
   const gchar *param_str;
@@ -122,9 +122,11 @@ action_info_new_from_iter (GVariantIter *iter)
   return info;
 }
 
-static void g_dbus_action_group_iface_init (GActionGroupInterface *);
+static void g_dbus_action_group_remote_iface_init (GRemoteActionGroupInterface *iface);
+static void g_dbus_action_group_iface_init        (GActionGroupInterface       *iface);
 G_DEFINE_TYPE_WITH_CODE (GDBusActionGroup, g_dbus_action_group, G_TYPE_OBJECT,
-  G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, g_dbus_action_group_iface_init))
+  G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, g_dbus_action_group_iface_init)
+  G_IMPLEMENT_INTERFACE (G_TYPE_REMOTE_ACTION_GROUP, g_dbus_action_group_remote_iface_init))
 
 static void
 g_dbus_action_group_changed (GDBusConnection *connection,
@@ -265,6 +267,8 @@ g_dbus_action_group_describe_all_done (GObject      *source,
       g_variant_iter_free (iter);
       g_variant_unref (reply);
     }
+
+  g_object_unref (group);
 }
 
 
@@ -280,7 +284,7 @@ g_dbus_action_group_async_init (GDBusActionGroup *group)
 
   g_dbus_connection_call (group->connection, group->bus_name, group->object_path, "org.gtk.Actions", "DescribeAll", NULL,
                           G_VARIANT_TYPE ("(a{s(bgav)})"), G_DBUS_CALL_FLAGS_NONE, -1, NULL,
-                          g_dbus_action_group_describe_all_done, group);
+                          g_dbus_action_group_describe_all_done, g_object_ref (group));
 }
 
 static gchar **
@@ -357,29 +361,60 @@ g_dbus_action_group_query_action (GActionGroup        *g_group,
   else
     {
       g_dbus_action_group_async_init (group);
+      group->strict = TRUE;
 
       return FALSE;
     }
 }
 
 static void
-g_dbus_action_group_change_state (GActionGroup *g_group,
+g_dbus_action_group_activate_action_full (GRemoteActionGroup *remote,
+                                          const gchar        *action_name,
+                                          GVariant           *parameter,
+                                          GVariant           *platform_data)
+{
+  GDBusActionGroup *group = G_DBUS_ACTION_GROUP (remote);
+  GVariantBuilder builder;
+
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("av"));
+
+  if (parameter)
+    g_variant_builder_add (&builder, "v", parameter);
+
+  g_dbus_connection_call (group->connection, group->bus_name, group->object_path, "org.gtk.Actions", "Activate",
+                          g_variant_new ("(sav@a{sv})", action_name, &builder, platform_data),
+                          NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+}
+
+static void
+g_dbus_action_group_change_action_state_full (GRemoteActionGroup *remote,
+                                              const gchar        *action_name,
+                                              GVariant           *value,
+                                              GVariant           *platform_data)
+{
+  GDBusActionGroup *group = G_DBUS_ACTION_GROUP (remote);
+
+  g_dbus_connection_call (group->connection, group->bus_name, group->object_path, "org.gtk.Actions", "SetState",
+                          g_variant_new ("(sv@a{sv})", action_name, value, platform_data),
+                          NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+}
+
+static void
+g_dbus_action_group_change_state (GActionGroup *group,
                                   const gchar  *action_name,
                                   GVariant     *value)
 {
-  GDBusActionGroup *group = G_DBUS_ACTION_GROUP (g_group);
-
-  g_dbus_action_group_change_action_state_full (group, action_name, value, g_variant_new ("a{sv}", NULL));
+  g_dbus_action_group_change_action_state_full (G_REMOTE_ACTION_GROUP (group),
+                                                action_name, value, g_variant_new ("a{sv}", NULL));
 }
 
 static void
-g_dbus_action_group_activate (GActionGroup *g_group,
+g_dbus_action_group_activate (GActionGroup *group,
                               const gchar  *action_name,
                               GVariant     *parameter)
 {
-  GDBusActionGroup *group = G_DBUS_ACTION_GROUP (g_group);
-
-  g_dbus_action_group_activate_action_full (group, action_name, parameter, g_variant_new ("a{sv}", NULL));
+  g_dbus_action_group_activate_action_full (G_REMOTE_ACTION_GROUP (group),
+                                            action_name, parameter, g_variant_new ("a{sv}", NULL));
 }
 
 static void
@@ -415,6 +450,13 @@ g_dbus_action_group_class_init (GDBusActionGroupClass *class)
 }
 
 static void
+g_dbus_action_group_remote_iface_init (GRemoteActionGroupInterface *iface)
+{
+  iface->activate_action_full = g_dbus_action_group_activate_action_full;
+  iface->change_action_state_full = g_dbus_action_group_change_action_state_full;
+}
+
+static void
 g_dbus_action_group_iface_init (GActionGroupInterface *iface)
 {
   iface->list_actions = g_dbus_action_group_list_actions;
@@ -462,7 +504,7 @@ g_dbus_action_group_get (GDBusConnection *connection,
   return group;
 }
 
-G_GNUC_INTERNAL gboolean
+gboolean
 g_dbus_action_group_sync (GDBusActionGroup  *group,
                           GCancellable      *cancellable,
                           GError           **error)
@@ -496,81 +538,3 @@ g_dbus_action_group_sync (GDBusActionGroup  *group,
 
   return reply != NULL;
 }
-
-/**
- * g_dbus_action_group_activate_action_full:
- * @action_group: a #GDBusActionGroup
- * @action_name: the name of the action to activate
- * @parameter: (allow none): the optional parameter to the activation
- * @platform_data: the platform data to send
- *
- * Activates the remote action.
- *
- * This is the same as g_action_group_activate_action() except that it
- * allows for provision of "platform data" to be sent along with the
- * activation request.  This typically contains details such as the user
- * interaction timestamp or startup notification information.
- *
- * @platform_data must be non-%NULL and must have the type
- * %G_VARIANT_TYPE_VARDICT.  If it is floating, it will be consumed.
- *
- * Since: 2.32
- **/
-void
-g_dbus_action_group_activate_action_full (GDBusActionGroup *action_group,
-                                          const gchar      *action_name,
-                                          GVariant         *parameter,
-                                          GVariant         *platform_data)
-{
-  GVariantBuilder builder;
-
-  g_return_if_fail (G_IS_DBUS_ACTION_GROUP (action_group));
-  g_return_if_fail (action_name != NULL);
-  g_return_if_fail (platform_data != NULL);
-
-  g_variant_builder_init (&builder, G_VARIANT_TYPE ("av"));
-
-  if (parameter)
-    g_variant_builder_add (&builder, "v", parameter);
-
-  g_dbus_connection_call (action_group->connection, action_group->bus_name, action_group->object_path,
-                          "org.gtk.Actions", "Activate",
-                          g_variant_new ("(sav@a{sv})", action_name, &builder, platform_data),
-                          NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
-}
-
-/**
- * g_dbus_action_group_activate_action_full:
- * @action_group: a #GDBusActionGroup
- * @action_name: the name of the action to change the state of
- * @value: the new requested value for the state
- * @platform_data: the platform data to send
- *
- * Changes the state of a remote action.
- *
- * This is the same as g_action_group_change_action_state() except that
- * it allows for provision of "platform data" to be sent along with the
- * state change request.  This typically contains details such as the
- * user interaction timestamp or startup notification information.
- *
- * @platform_data must be non-%NULL and must have the type
- * %G_VARIANT_TYPE_VARDICT.  If it is floating, it will be consumed.
- *
- * Since: 2.32
- **/
-void
-g_dbus_action_group_change_action_state_full (GDBusActionGroup *action_group,
-                                              const gchar      *action_name,
-                                              GVariant         *value,
-                                              GVariant         *platform_data)
-{
-  g_return_if_fail (G_IS_DBUS_ACTION_GROUP (action_group));
-  g_return_if_fail (action_name != NULL);
-  g_return_if_fail (value != NULL);
-  g_return_if_fail (platform_data != NULL);
-
-  g_dbus_connection_call (action_group->connection, action_group->bus_name, action_group->object_path,
-                          "org.gtk.Actions", "SetState",
-                          g_variant_new ("(sv@a{sv})", action_name, value, platform_data),
-                          NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
-}