diff options
Diffstat (limited to 'src/gpm-phone.c')
-rw-r--r-- | src/gpm-phone.c | 75 |
1 files changed, 28 insertions, 47 deletions
diff --git a/src/gpm-phone.c b/src/gpm-phone.c index 0732c91..e31c72b 100644 --- a/src/gpm-phone.c +++ b/src/gpm-phone.c @@ -24,14 +24,13 @@ #include <string.h> #include <glib.h> #include <glib/gi18n.h> +#include <gio/gio.h> #include <dbus/dbus-glib.h> #include "gpm-phone.h" #include "egg-debug.h" #include "gpm-marshal.h" -#include "egg-dbus-monitor.h" - static void gpm_phone_finalize (GObject *object); #define GPM_PHONE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GPM_TYPE_PHONE, GpmPhonePrivate)) @@ -40,7 +39,7 @@ struct GpmPhonePrivate { DBusGProxy *proxy; DBusGConnection *connection; - EggDbusMonitor *monitor; + guint watch_id; gboolean present; guint percentage; gboolean onac; @@ -225,15 +224,16 @@ gpm_phone_class_init (GpmPhoneClass *klass) } /** - * gpm_phone_dbus_connect: - **/ -static gboolean -gpm_phone_dbus_connect (GpmPhone *phone) + * gpm_phone_service_appeared_cb: + */ +static void +gpm_phone_service_appeared_cb (GDBusConnection *connection, + const gchar *name, const gchar *name_owner, + GpmPhone *phone) { GError *error = NULL; - g_return_val_if_fail (phone != NULL, FALSE); - g_return_val_if_fail (GPM_IS_PHONE (phone), FALSE); + g_return_if_fail (GPM_IS_PHONE (phone)); if (phone->priv->connection == NULL) { egg_debug ("get connection"); @@ -243,7 +243,7 @@ gpm_phone_dbus_connect (GpmPhone *phone) egg_warning ("Could not connect to DBUS daemon: %s", error->message); g_error_free (error); phone->priv->connection = NULL; - return FALSE; + return; } } if (phone->priv->proxy == NULL) { @@ -258,7 +258,7 @@ gpm_phone_dbus_connect (GpmPhone *phone) egg_warning ("Cannot connect, maybe the daemon is not running: %s", error->message); g_error_free (error); phone->priv->proxy = NULL; - return FALSE; + return; } /* complicated type. ick */ @@ -281,17 +281,17 @@ gpm_phone_dbus_connect (GpmPhone *phone) phone, NULL); } - return TRUE; } /** - * gpm_phone_dbus_disconnect: - **/ -static gboolean -gpm_phone_dbus_disconnect (GpmPhone *phone) + * gpm_phone_service_vanished_cb: + */ +static void +gpm_phone_service_vanished_cb (GDBusConnection *connection, + const gchar *name, + GpmPhone *phone) { - g_return_val_if_fail (phone != NULL, FALSE); - g_return_val_if_fail (GPM_IS_PHONE (phone), FALSE); + g_return_if_fail (GPM_IS_PHONE (phone)); if (phone->priv->proxy != NULL) { egg_debug ("removing proxy"); @@ -304,24 +304,7 @@ gpm_phone_dbus_disconnect (GpmPhone *phone) g_signal_emit (phone, signals [DEVICE_REMOVED], 0, 0); } } - return TRUE; -} - -/** - * monitor_connection_cb: - * @proxy: The dbus raw proxy - * @status: The status of the service, where TRUE is connected - * @screensaver: This class instance - **/ -static void -monitor_connection_cb (EggDbusMonitor *monitor, - gboolean status, - GpmPhone *phone) -{ - if (status) - gpm_phone_dbus_connect (phone); - else - gpm_phone_dbus_disconnect (phone); + return; } /** @@ -331,7 +314,6 @@ monitor_connection_cb (EggDbusMonitor *monitor, static void gpm_phone_init (GpmPhone *phone) { - DBusGConnection *connection; phone->priv = GPM_PHONE_GET_PRIVATE (phone); phone->priv->connection = NULL; @@ -340,12 +322,12 @@ gpm_phone_init (GpmPhone *phone) phone->priv->percentage = 0; phone->priv->onac = FALSE; - phone->priv->monitor = egg_dbus_monitor_new (); - g_signal_connect (phone->priv->monitor, "connection-changed", - G_CALLBACK (monitor_connection_cb), phone); - connection = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); - egg_dbus_monitor_assign (phone->priv->monitor, connection, MATE_PHONE_MANAGER_DBUS_SERVICE); - gpm_phone_dbus_connect (phone); + phone->priv->watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION, + MATE_PHONE_MANAGER_DBUS_SERVICE, + G_BUS_NAME_WATCHER_FLAGS_NONE, + (GBusNameAppearedCallback) gpm_phone_service_appeared_cb, + (GBusNameVanishedCallback) gpm_phone_service_vanished_cb, + phone, NULL); } /** @@ -356,15 +338,14 @@ static void gpm_phone_finalize (GObject *object) { GpmPhone *phone; - g_return_if_fail (object != NULL); g_return_if_fail (GPM_IS_PHONE (object)); phone = GPM_PHONE (object); phone->priv = GPM_PHONE_GET_PRIVATE (phone); - gpm_phone_dbus_disconnect (phone); - if (phone->priv->monitor != NULL) - g_object_unref (phone->priv->monitor); + if (phone->priv->proxy != NULL) + g_object_unref (phone->priv->proxy); + g_bus_unwatch_name (phone->priv->watch_id); G_OBJECT_CLASS (gpm_phone_parent_class)->finalize (object); } |