Sophie

Sophie

distrib > Mageia > 9 > armv7hl > by-pkgid > 76975bdacd27acb75297b765f97f0e52 > files > 1

light-locker-1.9.0-6.mga9.src.rpm

From bb0063f71189ba1272f49247c023e29d6087ec8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io>
Date: Mon, 1 Apr 2019 07:49:35 +0200
Subject: [PATCH 1/5] GSMonitor: use modern GObject syntax

---
 configure.ac.in  |   2 +-
 meson.build      |   2 +-
 src/gs-monitor.c | 374 ++++++++++++++++++++---------------------------
 src/gs-monitor.h |  23 +--
 4 files changed, 161 insertions(+), 240 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index f95863a..67c271b 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -44,7 +44,7 @@ GLIB_GSETTINGS
 # Dependencies
 
 DBUS_REQUIRED_VERSION=0.30
-GLIB_REQUIRED_VERSION=2.25.6
+GLIB_REQUIRED_VERSION=2.44
 GTK_REQUIRED_VERSION=3.0
 X11_REQUIRED_VERSION=1.0
 
diff --git a/meson.build b/meson.build
index 2b8d712..6883cd8 100644
--- a/meson.build
+++ b/meson.build
@@ -3,7 +3,7 @@ project('light-locker', 'c', version: '1.9.0', meson_version: '>=0.44.0')
 gnome = import('gnome')
 i18n = import('i18n')
 
-glib_required_version = '2.25.6'
+glib_required_version = '2.44'
 glib_dep = dependency('glib-2.0', version: '>='+glib_required_version)
 gio_dep = dependency('gio-2.0', version: '>='+glib_required_version)
 gobject_dep = dependency('gobject-2.0', version: '>='+glib_required_version)
diff --git a/src/gs-monitor.c b/src/gs-monitor.c
index f0e2592..da0630b 100644
--- a/src/gs-monitor.c
+++ b/src/gs-monitor.c
@@ -39,48 +39,34 @@
 #include "gs-monitor.h"
 #include "gs-debug.h"
 
-static void     gs_monitor_class_init (GSMonitorClass *klass);
-static void     gs_monitor_init       (GSMonitor      *monitor);
-static void     gs_monitor_finalize   (GObject        *object);
-
-#define GS_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_MONITOR, GSMonitorPrivate))
-
-struct GSMonitorPrivate
+struct _GSMonitor
 {
+        GObject parent_instance;
+
         GSListener      *listener;
         GSListenerX11   *listener_x11;
         GSManager       *manager;
         LLConfig        *conf;
 
-        guint            late_locking : 1;
-        guint            lock_on_suspend : 1;
-        guint            idle_hint : 1;
-        guint            perform_lock : 1;
-        guint            lock_on_lid : 1;
+        gboolean         late_locking;
+        gboolean         lock_on_suspend;
+        gboolean         idle_hint;
+        gboolean         perform_lock;
+        gboolean         lock_on_lid;
 };
 
 G_DEFINE_TYPE (GSMonitor, gs_monitor, G_TYPE_OBJECT)
 
-static void
-gs_monitor_class_init (GSMonitorClass *klass)
-{
-        GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-        object_class->finalize = gs_monitor_finalize;
-
-        g_type_class_add_private (klass, sizeof (GSMonitorPrivate));
-}
-
 static void
 gs_monitor_lock_screen (GSMonitor *monitor)
 {
         gboolean res;
         gboolean active;
 
-        active = gs_manager_get_active (monitor->priv->manager);
+        active = gs_manager_get_active (monitor->manager);
 
         if (! active) {
-                res = gs_listener_set_active (monitor->priv->listener, TRUE);
+                res = gs_listener_set_active (monitor->listener, TRUE);
                 if (! res) {
                         gs_debug ("Unable to lock the screen");
                 }
@@ -93,14 +79,14 @@ gs_monitor_lock_session (GSMonitor *monitor)
 {
         gboolean visible;
 
-        visible = gs_manager_get_session_visible (monitor->priv->manager);
+        visible = gs_manager_get_session_visible (monitor->manager);
 
         /* Only switch to greeter if we are the visible session */
         if (visible) {
-                gs_listener_send_lock_session (monitor->priv->listener);
+                gs_listener_send_lock_session (monitor->listener);
         } else {
                 /* Show the content in case the session gets visible again. */
-                gs_manager_show_content (monitor->priv->manager);
+                gs_manager_show_content (monitor->manager);
         }
 
         return FALSE;
@@ -111,14 +97,14 @@ gs_monitor_switch_greeter (GSMonitor *monitor)
 {
         gboolean visible;
 
-        visible = gs_manager_get_session_visible (monitor->priv->manager);
+        visible = gs_manager_get_session_visible (monitor->manager);
 
         /* Only switch to greeter if we are the visible session */
         if (visible) {
-                gs_listener_send_switch_greeter (monitor->priv->listener);
+                gs_listener_send_switch_greeter (monitor->listener);
         } else {
                 /* Show the content in case the session gets visible again. */
-                gs_manager_show_content (monitor->priv->manager);
+                gs_manager_show_content (monitor->manager);
         }
 
         return FALSE;
@@ -128,14 +114,14 @@ static void
 manager_activated_cb (GSManager *manager,
                       GSMonitor *monitor)
 {
-        gs_listener_resume_suspend (monitor->priv->listener);
+        gs_listener_resume_suspend (monitor->listener);
 }
 
 static void
 manager_switch_greeter_cb (GSManager *manager,
                            GSMonitor *monitor)
 {
-        gs_listener_send_switch_greeter (monitor->priv->listener);
+        gs_listener_send_switch_greeter (monitor->listener);
 }
 
 static void
@@ -143,9 +129,9 @@ manager_lock_cb (GSManager *manager,
                  GSMonitor *monitor)
 {
         gs_monitor_lock_screen (monitor);
-        if (monitor->priv->late_locking) {
-                monitor->priv->perform_lock = TRUE;
-        } else if (gs_manager_get_session_visible (monitor->priv->manager)) {
+        if (monitor->late_locking) {
+                monitor->perform_lock = TRUE;
+        } else if (gs_manager_get_session_visible (monitor->manager)) {
                 /* Add a 1s delay for VT switching.
                  * This seems to preserved content exposure.
                  */
@@ -153,7 +139,7 @@ manager_lock_cb (GSManager *manager,
                                        (GSourceFunc)gs_monitor_lock_session,
                                        monitor);
         } else {
-                gs_manager_show_content (monitor->priv->manager);
+                gs_manager_show_content (monitor->manager);
         }
 }
 
@@ -162,18 +148,14 @@ conf_lock_on_suspend_cb (LLConfig    *conf,
                          GParamSpec  *pspec,
                          GSMonitor   *monitor)
 {
-        gboolean lock_on_suspend = FALSE;
-
         g_object_get (G_OBJECT(conf),
-                      "lock-on-suspend", &lock_on_suspend,
+                      "lock-on-suspend", &monitor->lock_on_suspend,
                       NULL);
 
-        monitor->priv->lock_on_suspend = lock_on_suspend;
-
-        if (lock_on_suspend) {
-                gs_listener_delay_suspend (monitor->priv->listener);
+        if (monitor->lock_on_suspend) {
+                gs_listener_delay_suspend (monitor->listener);
         } else {
-                gs_listener_resume_suspend (monitor->priv->listener);
+                gs_listener_resume_suspend (monitor->listener);
         }
 }
 
@@ -182,13 +164,9 @@ conf_late_locking_cb (LLConfig    *conf,
                       GParamSpec  *pspec,
                       GSMonitor   *monitor)
 {
-        gboolean late_locking = FALSE;
-
         g_object_get (G_OBJECT(conf),
-                      "late-locking", &late_locking,
+                      "late-locking", &monitor->late_locking,
                       NULL);
-
-        monitor->priv->late_locking = late_locking;
 }
 
 static void
@@ -202,7 +180,7 @@ conf_lock_after_screensaver_cb (LLConfig    *conf,
                       "lock-after-screensaver", &lock_after_screensaver,
                       NULL);
 
-        gs_manager_set_lock_after (monitor->priv->manager, lock_after_screensaver);
+        gs_manager_set_lock_after (monitor->manager, lock_after_screensaver);
 }
 
 static void
@@ -210,13 +188,9 @@ conf_lock_on_lid_cb (LLConfig    *conf,
                      GParamSpec  *pspec,
                      GSMonitor   *monitor)
 {
-        gboolean lock_on_lid = FALSE;
-
         g_object_get (G_OBJECT(conf),
-                      "lock-on-lid", &lock_on_lid,
+                      "lock-on-lid", &monitor->lock_on_lid,
                       NULL);
-
-        monitor->priv->lock_on_lid = lock_on_lid;
 }
 
 static void
@@ -224,50 +198,21 @@ conf_idle_hint_cb (LLConfig    *conf,
                    GParamSpec  *pspec,
                    GSMonitor   *monitor)
 {
-        gboolean idle_hint = FALSE;
-
         g_object_get (G_OBJECT(conf),
-                      "idle_hint", &idle_hint,
+                      "idle_hint", &monitor->idle_hint,
                       NULL);
 
-        monitor->priv->idle_hint = idle_hint;
-
-        gs_listener_set_idle_hint (monitor->priv->listener,
-                                   idle_hint && gs_manager_get_blank_screen (monitor->priv->manager));
-}
-
-static void
-disconnect_conf_signals (GSMonitor *monitor)
-{
-        g_signal_handlers_disconnect_by_func (monitor->priv->conf, conf_lock_on_suspend_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->conf, conf_late_locking_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->conf, conf_lock_after_screensaver_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->conf, conf_lock_on_lid_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->conf, conf_idle_hint_cb, monitor);
-}
-
-static void
-connect_conf_signals (GSMonitor *monitor)
-{
-        g_signal_connect (monitor->priv->conf, "notify::lock-on-suspend",
-                          G_CALLBACK (conf_lock_on_suspend_cb), monitor);
-        g_signal_connect (monitor->priv->conf, "notify::late-locking",
-                          G_CALLBACK (conf_late_locking_cb), monitor);
-        g_signal_connect (monitor->priv->conf, "notify::lock-after-screensaver",
-                          G_CALLBACK (conf_lock_after_screensaver_cb), monitor);
-        g_signal_connect (monitor->priv->conf, "notify::lock-on-lid",
-                          G_CALLBACK (conf_lock_on_lid_cb), monitor);
-        g_signal_connect (monitor->priv->conf, "notify::idle-hint",
-                          G_CALLBACK (conf_idle_hint_cb), monitor);
+        gs_listener_set_idle_hint (monitor->listener,
+                                   monitor->idle_hint && gs_manager_get_blank_screen (monitor->manager));
 }
 
 static void
 listener_locked_cb (GSListener *listener,
                     GSMonitor  *monitor)
 {
-        gs_manager_show_content (monitor->priv->manager);
+        gs_manager_show_content (monitor->manager);
         gs_monitor_lock_screen (monitor);
-        monitor->priv->perform_lock = FALSE;
+        monitor->perform_lock = FALSE;
 }
 
 static void
@@ -277,8 +222,8 @@ listener_lock_cb (GSListener *listener,
         gs_monitor_lock_screen (monitor);
         if (gs_listener_is_lid_closed (listener)) {
                 /* Don't switch VT while the lid is closed. */
-                monitor->priv->perform_lock = TRUE;
-        } else if (gs_manager_get_session_visible (monitor->priv->manager)) {
+                monitor->perform_lock = TRUE;
+        } else if (gs_manager_get_session_visible (monitor->manager)) {
                 /* Add a 1s delay for VT switching.
                  * This seems to preserved content exposure.
                  */
@@ -286,7 +231,7 @@ listener_lock_cb (GSListener *listener,
                                        (GSourceFunc)gs_monitor_lock_session,
                                        monitor);
         } else {
-                gs_manager_show_content (monitor->priv->manager);
+                gs_manager_show_content (monitor->manager);
         }
 }
 
@@ -296,7 +241,7 @@ listener_session_switched_cb (GSListener *listener,
                               GSMonitor  *monitor)
 {
         gs_debug ("Session switched: %d", active);
-        gs_manager_set_session_visible (monitor->priv->manager, active);
+        gs_manager_set_session_visible (monitor->manager, active);
 }
 
 static gboolean
@@ -307,11 +252,11 @@ listener_active_changed_cb (GSListener *listener,
         gboolean res;
         gboolean ret;
 
-        if (monitor->priv->lock_on_suspend && !active) {
-                gs_listener_delay_suspend (monitor->priv->listener);
+        if (monitor->lock_on_suspend && !active) {
+                gs_listener_delay_suspend (monitor->listener);
         }
 
-        res = gs_manager_set_active (monitor->priv->manager, active);
+        res = gs_manager_set_active (monitor->manager, active);
         if (! res) {
                 gs_debug ("Unable to set manager active: %d", active);
                 ret = FALSE;
@@ -329,7 +274,7 @@ static void
 listener_suspend_cb (GSListener *listener,
                      GSMonitor  *monitor)
 {
-        if (! monitor->priv->lock_on_suspend)
+        if (! monitor->lock_on_suspend)
                 return;
         /* Show the lock screen until resume.
          * We lock the screen here even when the displaymanager didn't send the signal.
@@ -342,14 +287,14 @@ static void
 listener_resume_cb (GSListener *listener,
                     GSMonitor  *monitor)
 {
-        if (! monitor->priv->lock_on_suspend)
+        if (! monitor->lock_on_suspend)
                 return;
-        if (gs_listener_is_lid_closed (monitor->priv->listener)) {
+        if (gs_listener_is_lid_closed (monitor->listener)) {
                 /* This will become a lock instead of a switch.
                  * As a corner case this is ok.
                  */
                 /* Don't switch VT while the lid is closed. */
-                monitor->priv->perform_lock = TRUE;
+                monitor->perform_lock = TRUE;
         } else {
                 /* Add a 1s delay for resume to complete.
                  * This seems to fix backlight issues.
@@ -364,7 +309,7 @@ static void
 listener_simulate_user_activity_cb (GSListener *listener,
                                     GSMonitor  *monitor)
 {
-        gs_listener_x11_simulate_activity (monitor->priv->listener_x11);
+        gs_listener_x11_simulate_activity (monitor->listener_x11);
 }
 
 static gboolean
@@ -375,11 +320,11 @@ listener_blanking_cb (GSListener *listener,
         if (! active)
         {
                 /* Don't deactivate the screensaver if we are locked */
-                if (gs_manager_get_active (monitor->priv->manager))
+                if (gs_manager_get_active (monitor->manager))
                         return FALSE;
         }
 
-        return gs_listener_x11_force_blanking (monitor->priv->listener_x11, active);
+        return gs_listener_x11_force_blanking (monitor->listener_x11, active);
 }
 
 static void
@@ -387,14 +332,14 @@ listener_inhibit_cb (GSListener *listener,
                      gboolean    active,
                      GSMonitor  *monitor)
 {
-        gs_listener_x11_inhibit (monitor->priv->listener_x11, active);
+        gs_listener_x11_inhibit (monitor->listener_x11, active);
 }
 
 static gulong
 listener_idle_time_cb (GSListener *listener,
                        GSMonitor  *monitor)
 {
-        return gs_listener_x11_idle_time (monitor->priv->listener_x11);
+        return gs_listener_x11_idle_time (monitor->listener_x11);
 }
 
 static void
@@ -410,7 +355,7 @@ listener_lid_closed_cb (GSListener *listener,
          * In case of resume the switch would become a lock.
          * And in case of late locking, the screen saver state isn't taken into account.
          */
-        if (monitor->priv->perform_lock && !closed)
+        if (monitor->perform_lock && !closed)
         {
                 /* Add a 1s delay for resume to complete.
                  * This seems to fix backlight issues.
@@ -418,13 +363,13 @@ listener_lid_closed_cb (GSListener *listener,
                 g_timeout_add_seconds (1,
                                        (GSourceFunc)gs_monitor_lock_session,
                                        monitor);
-                monitor->priv->perform_lock = FALSE;
+                monitor->perform_lock = FALSE;
                 return;
         }
 
-        gs_manager_set_lid_closed (monitor->priv->manager, closed);
+        gs_manager_set_lid_closed (monitor->manager, closed);
 
-        if (! monitor->priv->lock_on_lid)
+        if (! monitor->lock_on_lid)
                 return;
 
         if (closed)
@@ -452,168 +397,163 @@ listener_x11_blanking_changed_cb (GSListenerX11 *listener,
                                   GSMonitor  *monitor)
 {
         gs_debug ("Blanking changed: %d", active);
-        gs_manager_set_blank_screen (monitor->priv->manager, active);
-        gs_listener_set_blanked (monitor->priv->listener, active);
-        if (monitor->priv->idle_hint) {
-                gs_listener_set_idle_hint (monitor->priv->listener, active);
+        gs_manager_set_blank_screen (monitor->manager, active);
+        gs_listener_set_blanked (monitor->listener, active);
+        if (monitor->idle_hint) {
+                gs_listener_set_idle_hint (monitor->listener, active);
         }
 
         /* If late locking is enabled only lock the session if the lid isn't closed. */
-        if (!active && !gs_listener_is_lid_closed (monitor->priv->listener) && monitor->priv->perform_lock) {
+        if (!active && !gs_listener_is_lid_closed (monitor->listener) && monitor->perform_lock) {
                 gs_monitor_lock_session (monitor);
-                monitor->priv->perform_lock = FALSE;
+                monitor->perform_lock = FALSE;
         }
 }
 
 static void
-disconnect_listener_signals (GSMonitor *monitor)
+gs_monitor_init (GSMonitor *monitor)
 {
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_locked_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_lock_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_session_switched_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_active_changed_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_suspend_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_resume_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_simulate_user_activity_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_blanking_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_inhibit_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_idle_time_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_lid_closed_cb, monitor);
-
-        g_signal_handlers_disconnect_by_func (monitor->priv->listener_x11, listener_x11_blanking_changed_cb, monitor);
-}
+#ifdef WITH_LATE_LOCKING
+        monitor->late_locking = WITH_LATE_LOCKING;
+#endif
+#ifdef WITH_LOCK_ON_SUSPEND
+        monitor->lock_on_suspend = WITH_LOCK_ON_SUSPEND;
+#endif
+#ifdef WITH_LOCK_ON_LID
+        monitor->lock_on_lid = WITH_LOCK_ON_LID;
+#endif
+        monitor->idle_hint = FALSE;
 
-static void
-connect_listener_signals (GSMonitor *monitor)
-{
-        g_signal_connect (monitor->priv->listener, "locked",
+        monitor->listener = gs_listener_new ();
+        monitor->listener_x11 = gs_listener_x11_new ();
+        monitor->manager = gs_manager_new ();
+
+        /*
+         * Listener signals
+         */
+        g_signal_connect (monitor->listener, "locked",
                           G_CALLBACK (listener_locked_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "lock",
+        g_signal_connect (monitor->listener, "lock",
                           G_CALLBACK (listener_lock_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "session-switched",
+        g_signal_connect (monitor->listener, "session-switched",
                           G_CALLBACK (listener_session_switched_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "active-changed",
+        g_signal_connect (monitor->listener, "active-changed",
                           G_CALLBACK (listener_active_changed_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "suspend",
+        g_signal_connect (monitor->listener, "suspend",
                           G_CALLBACK (listener_suspend_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "resume",
+        g_signal_connect (monitor->listener, "resume",
                           G_CALLBACK (listener_resume_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "simulate-user-activity",
+        g_signal_connect (monitor->listener, "simulate-user-activity",
                           G_CALLBACK (listener_simulate_user_activity_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "blanking",
+        g_signal_connect (monitor->listener, "blanking",
                           G_CALLBACK (listener_blanking_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "inhibit",
+        g_signal_connect (monitor->listener, "inhibit",
                           G_CALLBACK (listener_inhibit_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "idle-time",
+        g_signal_connect (monitor->listener, "idle-time",
                           G_CALLBACK (listener_idle_time_cb), monitor);
-        g_signal_connect (monitor->priv->listener, "notify::lid-closed",
+        g_signal_connect (monitor->listener, "notify::lid-closed",
                           G_CALLBACK (listener_lid_closed_cb), monitor);
 
-        g_signal_connect (monitor->priv->listener_x11, "blanking-changed",
+        g_signal_connect (monitor->listener_x11, "blanking-changed",
                           G_CALLBACK (listener_x11_blanking_changed_cb), monitor);
-}
-
-static void
-disconnect_manager_signals (GSMonitor *monitor)
-{
-        g_signal_handlers_disconnect_by_func (monitor->priv->manager, manager_activated_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->manager, manager_switch_greeter_cb, monitor);
-        g_signal_handlers_disconnect_by_func (monitor->priv->manager, manager_lock_cb, monitor);
-}
 
-static void
-connect_manager_signals (GSMonitor *monitor)
-{
-        g_signal_connect (monitor->priv->manager, "activated",
+        /*
+         * Manager signals
+         */
+        g_signal_connect (monitor->manager, "activated",
                           G_CALLBACK (manager_activated_cb), monitor);
-        g_signal_connect (monitor->priv->manager, "switch-greeter",
+        g_signal_connect (monitor->manager, "switch-greeter",
                           G_CALLBACK (manager_switch_greeter_cb), monitor);
-        g_signal_connect (monitor->priv->manager, "lock",
+        g_signal_connect (monitor->manager, "lock",
                           G_CALLBACK (manager_lock_cb), monitor);
 }
 
 static void
-gs_monitor_init (GSMonitor *monitor)
+gs_monitor_dispose (GObject *object)
 {
+        GSMonitor *monitor = GS_MONITOR (object);
 
-        monitor->priv = GS_MONITOR_GET_PRIVATE (monitor);
-
-#ifdef WITH_LATE_LOCKING
-        monitor->priv->late_locking = WITH_LATE_LOCKING;
-#endif
-#ifdef WITH_LOCK_ON_SUSPEND
-        monitor->priv->lock_on_suspend = WITH_LOCK_ON_SUSPEND;
-#endif
-#ifdef WITH_LOCK_ON_LID
-        monitor->priv->lock_on_lid = WITH_LOCK_ON_LID;
-#endif
-        monitor->priv->idle_hint = FALSE;
+        /*
+         * Conf signals
+         */
+        g_signal_handlers_disconnect_by_func (monitor->conf, conf_lock_on_suspend_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->conf, conf_late_locking_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->conf, conf_lock_after_screensaver_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->conf, conf_lock_on_lid_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->conf, conf_idle_hint_cb, monitor);
+
+        /*
+         * Listener signals
+         */
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_locked_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_lock_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_session_switched_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_active_changed_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_suspend_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_resume_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_simulate_user_activity_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_blanking_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_inhibit_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_idle_time_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener, listener_lid_closed_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->listener_x11, listener_x11_blanking_changed_cb, monitor);
+
+        /*
+         * Manager signals
+         */
+        g_signal_handlers_disconnect_by_func (monitor->manager, manager_activated_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->manager, manager_switch_greeter_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->manager, manager_lock_cb, monitor);
 
-        monitor->priv->listener = gs_listener_new ();
-        monitor->priv->listener_x11 = gs_listener_x11_new ();
-        connect_listener_signals (monitor);
+        g_clear_object (&monitor->conf);
+        g_clear_object (&monitor->listener);
+        g_clear_object (&monitor->listener_x11);
+        g_clear_object (&monitor->manager);
 
-        monitor->priv->manager = gs_manager_new ();
-        connect_manager_signals (monitor);
+        G_OBJECT_CLASS (gs_monitor_parent_class)->dispose (object);
 }
 
 static void
-gs_monitor_finalize (GObject *object)
+gs_monitor_class_init (GSMonitorClass *klass)
 {
-        GSMonitor *monitor;
-
-        g_return_if_fail (object != NULL);
-        g_return_if_fail (GS_IS_MONITOR (object));
-
-        monitor = GS_MONITOR (object);
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-        g_return_if_fail (monitor->priv != NULL);
-
-        disconnect_conf_signals (monitor);
-        disconnect_listener_signals (monitor);
-        disconnect_manager_signals (monitor);
-
-        g_object_unref (monitor->priv->conf);
-        g_object_unref (monitor->priv->listener);
-        g_object_unref (monitor->priv->listener_x11);
-        g_object_unref (monitor->priv->manager);
-
-        G_OBJECT_CLASS (gs_monitor_parent_class)->finalize (object);
+        object_class->dispose = gs_monitor_dispose;
 }
 
 GSMonitor *
 gs_monitor_new (LLConfig *config)
 {
         GSMonitor *monitor;
-        gboolean late_locking = FALSE;
-        gboolean lock_on_suspend = FALSE;
-        gboolean lock_on_lid = FALSE;
         guint lock_after_screensaver = 5;
-        gboolean idle_hint = FALSE;
 
         monitor = g_object_new (GS_TYPE_MONITOR, NULL);
 
-        monitor->priv->conf = config;
+        monitor->conf = config;
 
-        connect_conf_signals (monitor);
+        g_signal_connect (monitor->conf, "notify::lock-on-suspend",
+                          G_CALLBACK (conf_lock_on_suspend_cb), monitor);
+        g_signal_connect (monitor->conf, "notify::late-locking",
+                          G_CALLBACK (conf_late_locking_cb), monitor);
+        g_signal_connect (monitor->conf, "notify::lock-after-screensaver",
+                          G_CALLBACK (conf_lock_after_screensaver_cb), monitor);
+        g_signal_connect (monitor->conf, "notify::lock-on-lid",
+                          G_CALLBACK (conf_lock_on_lid_cb), monitor);
+        g_signal_connect (monitor->conf, "notify::idle-hint",
+                          G_CALLBACK (conf_idle_hint_cb), monitor);
 
         g_object_get (G_OBJECT (config),
-                      "late-locking", &late_locking,
-                      "lock-on-suspend", &lock_on_suspend,
-                      "lock-on-lid", &lock_on_lid,
+                      "late-locking", &monitor->late_locking,
+                      "lock-on-suspend", &monitor->lock_on_suspend,
+                      "lock-on-lid", &monitor->lock_on_lid,
+                      "idle-hint", &monitor->idle_hint,
                       "lock-after-screensaver", &lock_after_screensaver,
-                      "idle-hint", &idle_hint,
                       NULL);
 
-        monitor->priv->late_locking = late_locking;
-        monitor->priv->lock_on_suspend = lock_on_suspend;
-        monitor->priv->lock_on_lid = lock_on_lid;
-        monitor->priv->idle_hint = idle_hint;
-
-        gs_manager_set_lock_after (monitor->priv->manager, lock_after_screensaver);
+        gs_manager_set_lock_after (monitor->manager, lock_after_screensaver);
 
-        if (lock_on_suspend) {
-              gs_listener_delay_suspend (monitor->priv->listener);
+        if (monitor->lock_on_suspend) {
+              gs_listener_delay_suspend (monitor->listener);
         }
 
         return GS_MONITOR (monitor);
@@ -625,11 +565,11 @@ gs_monitor_start (GSMonitor *monitor,
 {
         g_return_val_if_fail (GS_IS_MONITOR (monitor), FALSE);
 
-        if (! gs_listener_acquire (monitor->priv->listener, error)) {
+        if (! gs_listener_acquire (monitor->listener, error)) {
                 return FALSE;
         }
 
-        gs_listener_x11_acquire (monitor->priv->listener_x11);
+        gs_listener_x11_acquire (monitor->listener_x11);
 
         return TRUE;
 }
diff --git a/src/gs-monitor.h b/src/gs-monitor.h
index 735104f..dbfe422 100644
--- a/src/gs-monitor.h
+++ b/src/gs-monitor.h
@@ -25,27 +25,8 @@
 
 G_BEGIN_DECLS
 
-#define GS_TYPE_MONITOR         (gs_monitor_get_type ())
-#define GS_MONITOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_MONITOR, GSMonitor))
-#define GS_MONITOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_MONITOR, GSMonitorClass))
-#define GS_IS_MONITOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_MONITOR))
-#define GS_IS_MONITOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_MONITOR))
-#define GS_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_MONITOR, GSMonitorClass))
-
-typedef struct GSMonitorPrivate GSMonitorPrivate;
-
-typedef struct
-{
-        GObject          parent;
-        GSMonitorPrivate *priv;
-} GSMonitor;
-
-typedef struct
-{
-        GObjectClass     parent_class;
-} GSMonitorClass;
-
-GType       gs_monitor_get_type (void);
+#define GS_TYPE_MONITOR gs_monitor_get_type ()
+G_DECLARE_FINAL_TYPE (GSMonitor, gs_monitor, GS, MONITOR, GObject)
 
 GSMonitor * gs_monitor_new              (LLConfig  *config);
 gboolean    gs_monitor_start            (GSMonitor *monitor,
-- 
2.30.0