summaryrefslogtreecommitdiff
path: root/src/nm-sleep-monitor.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-04-27 17:01:50 +0200
committerThomas Haller <thaller@redhat.com>2016-04-28 13:00:12 +0200
commitc76eb3e8f7a80b69c570b513ee3eb16bea1b34bd (patch)
tree250906d12e9b2202671fab63604e520f5fd600c0 /src/nm-sleep-monitor.c
parentb97ae183793e380275f4a6331278b088de9e264f (diff)
downloadNetworkManager-c76eb3e8f7a80b69c570b513ee3eb16bea1b34bd.tar.gz
sleep-monitor: merge "nm-sleep-monitor-upower.c" into "nm-sleep-monitor.c"
Both files do very similar things, with "nm-sleep-monitor-upower.c" being suboptimal, for example by creating the proxy synchronously. Clean that up in the next steps. Just basic merging for now.
Diffstat (limited to 'src/nm-sleep-monitor.c')
-rw-r--r--src/nm-sleep-monitor.c64
1 files changed, 62 insertions, 2 deletions
diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c
index 9ed0f9d4fd..13a2234db0 100644
--- a/src/nm-sleep-monitor.c
+++ b/src/nm-sleep-monitor.c
@@ -29,10 +29,12 @@
#include "nm-sleep-monitor.h"
-#if defined (SUSPEND_RESUME_SYSTEMD) == defined (SUSPEND_RESUME_CONSOLEKIT)
-#error either define SUSPEND_RESUME_SYSTEMD or SUSPEND_RESUME_CONSOLEKIT
+#if (defined (SUSPEND_RESUME_SYSTEMD) + defined (SUSPEND_RESUME_CONSOLEKIT) + defined (SUSPEND_RESUME_UPOWER)) != 1
+#error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER
#endif
+#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower"
+
#ifdef SUSPEND_RESUME_SYSTEMD
#define SUSPEND_DBUS_NAME "org.freedesktop.login1"
@@ -109,6 +111,24 @@ NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_
/*****************************************************************************/
+#if defined (SUSPEND_RESUME_UPOWER)
+
+static void
+upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data)
+{
+ nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal");
+ g_signal_emit (user_data, signals[SLEEPING], 0);
+}
+
+static void
+upower_resuming_cb (GDBusProxy *proxy, gpointer user_data)
+{
+ nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal");
+ g_signal_emit (user_data, signals[RESUMING], 0);
+}
+
+#else
+
static void
drop_inhibitor (NMSleepMonitor *self)
{
@@ -245,9 +265,32 @@ on_proxy_acquired (GObject *object,
g_free (owner);
}
+#endif
+
static void
nm_sleep_monitor_init (NMSleepMonitor *self)
{
+#if defined (SUSPEND_RESUME_UPOWER)
+ GError *error = NULL;
+
+ self->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START
+ | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ UPOWER_DBUS_SERVICE,
+ "/org/freedesktop/UPower",
+ "org.freedesktop.UPower",
+ NULL, &error);
+ if (self->proxy) {
+ _nm_dbus_signal_connect (self->proxy, "Sleeping", NULL,
+ G_CALLBACK (upower_sleeping_cb), self);
+ _nm_dbus_signal_connect (self->proxy, "Resuming", NULL,
+ G_CALLBACK (upower_resuming_cb), self);
+ } else {
+ nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy: %s", error->message);
+ g_error_free (error);
+ }
+#else
self->inhibit_fd = -1;
self->cancellable = g_cancellable_new ();
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
@@ -257,8 +300,20 @@ nm_sleep_monitor_init (NMSleepMonitor *self)
SUSPEND_DBUS_NAME, SUSPEND_DBUS_PATH, SUSPEND_DBUS_INTERFACE,
self->cancellable,
(GAsyncReadyCallback) on_proxy_acquired, self);
+#endif
}
+#if defined (SUSPEND_RESUME_UPOWER)
+static void
+finalize (GObject *object)
+{
+ NMSleepMonitor *self = NM_SLEEP_MONITOR (object);
+
+ g_clear_object (&self->proxy);
+
+ G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object);
+}
+#else
static void
dispose (GObject *object)
{
@@ -275,6 +330,7 @@ dispose (GObject *object)
G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->dispose (object);
}
+#endif
static void
nm_sleep_monitor_class_init (NMSleepMonitorClass *klass)
@@ -283,7 +339,11 @@ nm_sleep_monitor_class_init (NMSleepMonitorClass *klass)
gobject_class = G_OBJECT_CLASS (klass);
+#if defined (SUSPEND_RESUME_UPOWER)
+ gobject_class->finalize = finalize;
+#else
gobject_class->dispose = dispose;
+#endif
signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING,
NM_TYPE_SLEEP_MONITOR,