suspend: port upower backend to GDBus

This commit is contained in:
Aleksander Morgado
2015-01-15 12:51:26 +01:00
parent a92b6f286b
commit 132fbb0a7f

View File

@@ -16,6 +16,9 @@
* *
* (C) Copyright 2012 Red Hat, Inc. * (C) Copyright 2012 Red Hat, Inc.
* Author: Matthias Clasen <mclasen@redhat.com> * Author: Matthias Clasen <mclasen@redhat.com>
*
* Port to GDBus:
* (C) Copyright 2015 Aleksander Morgado <aleksander@aleksander.es>
*/ */
#include "config.h" #include "config.h"
@@ -23,19 +26,20 @@
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <dbus/dbus-glib.h>
#include <gio/gio.h> #include <gio/gio.h>
#include "mm-log.h" #include "mm-log.h"
#include "mm-utils.h" #include "mm-utils.h"
#include "mm-sleep-monitor.h" #include "mm-sleep-monitor.h"
#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower" #define UPOWER_NAME "org.freedesktop.UPower"
#define UPOWER_PATH "/org/freedesktop/UPower"
#define UPOWER_INTERFACE "org.freedesktop.UPower"
struct _MMSleepMonitor { struct _MMSleepMonitor {
GObject parent_instance; GObject parent_instance;
DBusGProxy *upower_proxy; GDBusProxy *upower_proxy;
}; };
struct _MMSleepMonitorClass { struct _MMSleepMonitorClass {
@@ -58,41 +62,50 @@ G_DEFINE_TYPE (MMSleepMonitor, mm_sleep_monitor, G_TYPE_OBJECT);
/********************************************************************/ /********************************************************************/
static void static void
upower_sleeping_cb (DBusGProxy *proxy, gpointer user_data) signal_cb (GDBusProxy *proxy,
const gchar *sendername,
const gchar *signalname,
GVariant *args,
gpointer data)
{ {
mm_dbg ("[sleep-monitor] received UPower sleeping signal"); MMSleepMonitor *self = data;
g_signal_emit (user_data, signals[SLEEPING], 0);
if (strcmp (signalname, "Sleeping") == 0) {
mm_dbg ("[sleep-monitor] received UPower sleeping signal");
g_signal_emit (self, signals[SLEEPING], 0);
} else if (strcmp (signalname, "Resuming") == 0) {
mm_dbg ("[sleep-monitor] received UPower resuming signal");
g_signal_emit (self, signals[RESUMING], 0);
}
} }
static void static void
upower_resuming_cb (DBusGProxy *proxy, gpointer user_data) on_proxy_acquired (GObject *object,
GAsyncResult *res,
MMSleepMonitor *self)
{ {
mm_dbg ("[sleep-monitor] received UPower resuming signal"); GError *error = NULL;
g_signal_emit (user_data, signals[RESUMING], 0);
self->upower_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
if (!self->upower_proxy) {
mm_warn ("[sleep-monitor] failed to acquire UPower proxy: %s", error->message);
g_clear_error (&error);
return;
}
g_signal_connect (self->upower_proxy, "g-signal", G_CALLBACK (signal_cb), self);
} }
static void static void
mm_sleep_monitor_init (MMSleepMonitor *self) mm_sleep_monitor_init (MMSleepMonitor *self)
{ {
DBusGConnection *bus; g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
bus = mm_dbus_manager_get_connection (mm_dbus_manager_get ()); G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
self->upower_proxy = dbus_g_proxy_new_for_name (bus, NULL,
UPOWER_DBUS_SERVICE, UPOWER_NAME, UPOWER_PATH, UPOWER_INTERFACE,
"/org/freedesktop/UPower", NULL,
"org.freedesktop.UPower"); (GAsyncReadyCallback) on_proxy_acquired, self);
if (self->upower_proxy) {
dbus_g_proxy_add_signal (self->upower_proxy, "Sleeping", G_TYPE_INVALID);
dbus_g_proxy_connect_signal (self->upower_proxy, "Sleeping",
G_CALLBACK (upower_sleeping_cb),
self, NULL);
dbus_g_proxy_add_signal (self->upower_proxy, "Resuming", G_TYPE_INVALID);
dbus_g_proxy_connect_signal (self->upower_proxy, "Resuming",
G_CALLBACK (upower_resuming_cb),
self, NULL);
} else
mm_warn ("could not initialize UPower D-Bus proxy");
} }
static void static void