Exemple #1
0
static GDBusInterfaceInfo *
org_gtk_Menus_get_interface (void)
{
  static GDBusInterfaceInfo *interface_info;

  if (interface_info == NULL)
    {
      GError *error = NULL;
      GDBusNodeInfo *info;

      info = g_dbus_node_info_new_for_xml ("<node>"
                                           "  <interface name='org.gtk.Menus'>"
                                           "    <method name='Start'>"
                                           "      <arg type='au' name='groups' direction='in'/>"
                                           "      <arg type='a(uuaa{sv})' name='content' direction='out'/>"
                                           "    </method>"
                                           "    <method name='End'>"
                                           "      <arg type='au' name='groups' direction='in'/>"
                                           "    </method>"
                                           "    <signal name='Changed'>"
                                           "      arg type='a(uuuuaa{sv})' name='changes'/>"
                                           "    </signal>"
                                           "  </interface>"
                                           "</node>", &error);
      if (info == NULL)
        g_error ("%s\n", error->message);
      interface_info = g_dbus_node_info_lookup_interface (info, "org.gtk.Menus");
      g_assert (interface_info != NULL);
      g_dbus_interface_info_ref (interface_info);
      g_dbus_node_info_unref (info);
    }

  return interface_info;
}
static void
daemon_maybe_add_extension_interface (GHashTable         *ifaces,
                                      GDBusInterfaceInfo *iface)
{
        gint i;

        /* We visit the XDG data dirs in precedence order, so if we
         * already have this one, we should not add it again.
         */
        if (g_hash_table_contains (ifaces, iface->name))
                return;

        /* Only accept interfaces with only properties */
        if ((iface->methods && iface->methods[0]) || (iface->signals && iface->signals[0]))
                return;

        /* Add it only if we can find the annotation */
        for (i = 0; iface->annotations && iface->annotations[i]; i++) {
                if (g_str_equal (iface->annotations[i]->key, "org.freedesktop.Accounts.VendorExtension")) {
                        g_hash_table_insert (ifaces, g_strdup (iface->name), g_dbus_interface_info_ref (iface));
                        return;
                }
        }
}
Exemple #3
0
guint
evd_dbus_agent_register_object (GObject             *object,
                                guint                connection_id,
                                const gchar         *object_path,
                                GDBusInterfaceInfo  *interface_info,
                                GError             **error)
{
  GDBusConnection *dbus_conn;
  guint reg_id = 0;

  g_return_val_if_fail (G_IS_OBJECT (object), 0);
  g_return_val_if_fail (connection_id > 0, 0);
  g_return_val_if_fail (object_path != NULL, 0);
  g_return_val_if_fail (interface_info != NULL, 0);

  if ( (dbus_conn = evd_dbus_agent_get_connection (object,
                                                   connection_id,
                                                   error)) == NULL)
    {
      return 0;
    }

  reg_id = g_dbus_connection_register_object (dbus_conn,
                                              object_path,
                                              interface_info,
                                              &evd_dbus_agent_iface_vtable,
                                              object,
                                              NULL,
                                              error);
  if (reg_id > 0)
    {
      gchar *key;
      ObjectData *data;
      RegObjData *reg_obj_data;

      data = evd_dbus_agent_get_object_data (object);
      g_assert (data != NULL);

      key = g_strdup_printf ("%p-%s<%s>",
                             dbus_conn,
                             object_path,
                             interface_info->name);

      reg_obj_data = g_slice_new (RegObjData);
      reg_obj_data->obj_path = g_strdup (object_path);
      reg_obj_data->dbus_conn = dbus_conn;
      g_object_ref (dbus_conn);
      reg_obj_data->reg_id = reg_id;
      reg_obj_data->serial = 0;
      reg_obj_data->reg_str_id = key;
      reg_obj_data->obj_data = data;
      reg_obj_data->conn_id = connection_id;
      reg_obj_data->iface_info = g_dbus_interface_info_ref (interface_info);
      reg_obj_data->invocations = g_hash_table_new_full (g_int64_hash,
                                                         g_int64_equal,
                                                         NULL,
                                                         NULL);

      g_hash_table_insert (data->reg_objs, key, reg_obj_data);
      g_hash_table_insert (data->reg_objs_by_id,
                           &reg_obj_data->reg_id,
                           reg_obj_data);
    }

  return reg_id;
}