| /* |
| * |
| * Connection Manager |
| * |
| * Copyright (C) 2008 Intel Corporation. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * This program 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 General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| * |
| */ |
| |
| #ifdef HAVE_CONFIG_H |
| #include <config.h> |
| #endif |
| |
| #include <dbus/dbus-glib.h> |
| |
| #include <gtk/gtk.h> |
| |
| #include "instance.h" |
| |
| #define CONNMAN_SERVICE "net.connman" |
| #define CONNMAN_INSTANCE CONNMAN_SERVICE ".Instance" |
| |
| static DBusGConnection *connection; |
| |
| static GtkWindow *instance_window; |
| |
| static gboolean instance_present(GObject *self, GError **error) |
| { |
| gtk_window_present(instance_window); |
| |
| return TRUE; |
| } |
| |
| #include "instance-glue.h" |
| |
| void instance_register(GtkWindow *window) |
| { |
| instance_window = window; |
| |
| dbus_g_object_type_install_info(GTK_TYPE_WINDOW, |
| &dbus_glib_instance_object_info); |
| |
| dbus_g_connection_register_g_object(connection, "/", G_OBJECT(window)); |
| } |
| |
| gboolean instance_init(const gchar *name) |
| { |
| DBusGProxy *proxy; |
| GError *error = NULL; |
| guint result; |
| |
| connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); |
| if (error != NULL) { |
| g_printerr("Can't get session bus: %s", error->message); |
| g_error_free(error); |
| return FALSE; |
| } |
| |
| proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, |
| DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); |
| |
| if (dbus_g_proxy_call(proxy, "RequestName", NULL, |
| G_TYPE_STRING, name, G_TYPE_UINT, 0, G_TYPE_INVALID, |
| G_TYPE_UINT, &result, G_TYPE_INVALID) == FALSE) { |
| g_printerr("Can't get unique name on session bus"); |
| g_object_unref(proxy); |
| dbus_g_connection_unref(connection); |
| return FALSE; |
| } |
| |
| g_object_unref(proxy); |
| |
| if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { |
| proxy = dbus_g_proxy_new_for_name(connection, name, "/", |
| CONNMAN_SERVICE ".Instance"); |
| |
| dbus_g_proxy_call_no_reply(proxy, "Present", |
| G_TYPE_INVALID, G_TYPE_INVALID); |
| |
| g_object_unref(G_OBJECT(proxy)); |
| dbus_g_connection_unref(connection); |
| return FALSE; |
| } |
| |
| return TRUE; |
| } |
| |
| void instance_cleanup(void) |
| { |
| dbus_g_connection_unref(connection); |
| } |