/* GDBus Binding Tool * * Copyright (C) 2008-2010 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 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. * * Author: David Zeuthen */ #include "test-generated.h" /* ---------------------------------------------------------------------------------------------------- */ static GType get_proxy_type (GDBusObjectManagerClient *manager, const gchar *object_path, const gchar *interface_name, gpointer user_data) { GType type; type = G_TYPE_DBUS_PROXY; if (g_strcmp0 (interface_name, "org.project.Bar") == 0) type = FOO_TYPE_BAR_PROXY; else if (g_strcmp0 (interface_name, "com.acme.Coyote") == 0) type = FOO_TYPE_COM_ACME_COYOTE_PROXY; return type; } static void on_object_added (GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { gchar *owner; owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager)); g_debug ("added object at %s (owner %s)", g_dbus_object_get_object_path (object), owner); g_free (owner); } static void on_object_removed (GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { gchar *owner; owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager)); g_debug ("removed object at %s (owner %s)", g_dbus_object_get_object_path (object), owner); g_free (owner); } static void on_notify_name_owner (GObject *object, GParamSpec *pspec, gpointer user_data) { GDBusObjectManagerClient *manager = G_DBUS_OBJECT_MANAGER_CLIENT (object); gchar *name_owner; name_owner = g_dbus_object_manager_client_get_name_owner (manager); g_debug ("name-owner: %s", name_owner); g_free (name_owner); } gint main (gint argc, gchar *argv[]) { GDBusObjectManager *manager; GMainLoop *loop; GError *error; gchar *name_owner; GList *objects; GList *l; manager = NULL; loop = NULL; g_type_init (); loop = g_main_loop_new (NULL, FALSE); error = NULL; manager = g_dbus_object_manager_client_new_for_bus_sync (G_BUS_TYPE_SESSION, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, "org.gtk.GDBus.TestObjectManager", "/org/gtk/GDBus/TestObjectManager", get_proxy_type, NULL, /* get_proxy_type_user_data */ NULL, /* GCancellable */ &error); if (manager == NULL) { g_printerr ("Error getting object manager client: %s", error->message); g_error_free (error); goto out; } name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager)); g_debug ("name-owner: %s", name_owner); g_free (name_owner); objects = g_dbus_object_manager_get_objects (manager); for (l = objects; l != NULL; l = l->next) { GDBusObject *object = G_DBUS_OBJECT (l->data); g_debug ("proxy has object at %s", g_dbus_object_get_object_path (object)); } g_list_foreach (objects, (GFunc) g_object_unref, NULL); g_list_free (objects); g_signal_connect (manager, "notify::name-owner", G_CALLBACK (on_notify_name_owner), NULL); g_signal_connect (manager, "object-added", G_CALLBACK (on_object_added), NULL); g_signal_connect (manager, "object-removed", G_CALLBACK (on_object_removed), NULL); g_main_loop_run (loop); out: if (manager != NULL) g_object_unref (manager); if (loop != NULL) g_main_loop_unref (loop); return 0; }