suspend: port upower backend to GDBus
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user