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.
* Author: Matthias Clasen <mclasen@redhat.com>
*
* Port to GDBus:
* (C) Copyright 2015 Aleksander Morgado <aleksander@aleksander.es>
*/
#include "config.h"
@@ -23,19 +26,20 @@
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <dbus/dbus-glib.h>
#include <gio/gio.h>
#include "mm-log.h"
#include "mm-utils.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 {
GObject parent_instance;
DBusGProxy *upower_proxy;
GDBusProxy *upower_proxy;
};
struct _MMSleepMonitorClass {
@@ -58,41 +62,50 @@ G_DEFINE_TYPE (MMSleepMonitor, mm_sleep_monitor, G_TYPE_OBJECT);
/********************************************************************/
static void
upower_sleeping_cb (DBusGProxy *proxy, gpointer user_data)
signal_cb (GDBusProxy *proxy,
const gchar *sendername,
const gchar *signalname,
GVariant *args,
gpointer data)
{
MMSleepMonitor *self = data;
if (strcmp (signalname, "Sleeping") == 0) {
mm_dbg ("[sleep-monitor] received UPower sleeping signal");
g_signal_emit (user_data, signals[SLEEPING], 0);
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
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");
g_signal_emit (user_data, signals[RESUMING], 0);
GError *error = NULL;
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
mm_sleep_monitor_init (MMSleepMonitor *self)
{
DBusGConnection *bus;
bus = mm_dbus_manager_get_connection (mm_dbus_manager_get ());
self->upower_proxy = dbus_g_proxy_new_for_name (bus,
UPOWER_DBUS_SERVICE,
"/org/freedesktop/UPower",
"org.freedesktop.UPower");
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");
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
NULL,
UPOWER_NAME, UPOWER_PATH, UPOWER_INTERFACE,
NULL,
(GAsyncReadyCallback) on_proxy_acquired, self);
}
static void