[gnome-disk-utility] Fix compilation of GduSdPlugin with newer gnome-settings-daemon



commit 53555aa391b02e69830f1177e64813db60f0ec6e
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sun Dec 16 22:43:21 2012 +0100

    Fix compilation of GduSdPlugin with newer gnome-settings-daemon
    
    gnome-settings-daemon changed the definition of the registration macro,
    which now assumes a Manager object providing start() and stop() methods,
    and no longer lets the plugin implement any code.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=690310

 src/notify/Makefile.am                       |    2 +-
 src/notify/gdusdmanager.c                    |  127 ++++++++++++++++++++++++++
 src/notify/{gdusdplugin.h => gdusdmanager.h} |   12 +-
 src/notify/gdusdplugin.c                     |  124 -------------------------
 4 files changed, 134 insertions(+), 131 deletions(-)
---
diff --git a/src/notify/Makefile.am b/src/notify/Makefile.am
index e20323b..9c82e69 100644
--- a/src/notify/Makefile.am
+++ b/src/notify/Makefile.am
@@ -10,7 +10,7 @@ gdu_sd_plugin_LTLIBRARIES = 					\
 	$(NULL)
 
 libgdu_sd_la_SOURCES = 						\
-	gdusdplugin.h		gdusdplugin.c			\
+	gdusdmanager.h		gdusdmanager.c			\
 	gdusdmonitor.h		gdusdmonitor.c			\
 	$(NULL)
 
diff --git a/src/notify/gdusdmanager.c b/src/notify/gdusdmanager.c
new file mode 100644
index 0000000..19f0fa8
--- /dev/null
+++ b/src/notify/gdusdmanager.c
@@ -0,0 +1,127 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * Licensed under GPL version 2 or later.
+ *
+ * Author: David Zeuthen <zeuthen gmail com>
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+#include <gmodule.h>
+#include <gio/gio.h>
+
+#include "gdusdmanager.h"
+#include "gdusdmonitor.h"
+
+#include <gnome-settings-daemon/gnome-settings-plugin.h>
+
+struct GduSdManagerClass;
+typedef struct GduSdManagerClass GduSdManagerClass;
+
+struct GduSdManager
+{
+  GObject parent_instance;
+  GduSdMonitor *monitor;
+  guint name_owner_id;
+};
+
+struct GduSdManagerClass
+{
+  GObjectClass parent_class;
+};
+
+static gboolean gdu_sd_manager_start (GduSdManager *, GError **);
+static void     gdu_sd_manager_stop  (GduSdManager *);
+
+static GduSdManager *gdu_sd_manager_new   (void);
+
+G_DEFINE_TYPE (GduSdManager, gdu_sd_manager, G_TYPE_OBJECT)
+GNOME_SETTINGS_PLUGIN_REGISTER (GduSd, gdu_sd)
+
+static void
+name_acquired_handler (GDBusConnection *connection,
+                       const gchar     *name,
+                       gpointer         user_data)
+{
+  GduSdManager *manager = GDU_SD_MANAGER (user_data);
+  g_warn_if_fail (manager->monitor == NULL);
+  g_clear_object (&manager->monitor);
+  manager->monitor = gdu_sd_monitor_new ();
+}
+
+static void
+name_lost_handler (GDBusConnection *connection,
+                   const gchar     *name,
+                   gpointer         user_data)
+{
+  GduSdManager *manager = GDU_SD_MANAGER (user_data);
+  g_clear_object (&manager->monitor);
+}
+
+static void
+gdu_sd_manager_init (GduSdManager *manager)
+{
+}
+
+static void
+gdu_sd_manager_finalize (GObject *object)
+{
+  GduSdManager *manager = GDU_SD_MANAGER (object);
+
+  gdu_sd_manager_stop (manager);
+
+  G_OBJECT_CLASS (gdu_sd_manager_parent_class)->finalize (object);
+}
+
+static gboolean
+gdu_sd_manager_start (GduSdManager  *manager,
+                      GError       **error)
+{
+  /* The reason for claiming a unique name is so it's easier to test
+   * code changes - it helps ensure that only one instance of
+   * GduSdMonitor is running at any one time. See also testplugin.c.
+   */
+  if (manager->name_owner_id == 0)
+    {
+      manager->name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
+                                               "org.gnome.Disks.NotificationMonitor",
+                                               G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
+                                               G_BUS_NAME_OWNER_FLAGS_REPLACE,
+                                               NULL, /* bus_acquired_handler */
+                                               name_acquired_handler,
+                                               name_lost_handler,
+                                               manager,
+                                               NULL); /* GDestroyNotify */
+    }
+
+  return TRUE;
+}
+
+static void
+gdu_sd_manager_stop (GduSdManager *manager)
+{
+  if (manager->name_owner_id == 0)
+    {
+      g_bus_unown_name (manager->name_owner_id);
+      manager->name_owner_id = 0;
+    }
+
+  g_clear_object (&manager->monitor);
+}
+
+static void
+gdu_sd_manager_class_init (GduSdManagerClass *klass)
+{
+  GObjectClass           *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = gdu_sd_manager_finalize;
+}
+
+static GduSdManager *
+gdu_sd_manager_new (void)
+{
+  return g_object_new (GDU_TYPE_SD_MANAGER, NULL);
+}
diff --git a/src/notify/gdusdplugin.h b/src/notify/gdusdmanager.h
similarity index 57%
rename from src/notify/gdusdplugin.h
rename to src/notify/gdusdmanager.h
index 5cadba1..e1a1ed4 100644
--- a/src/notify/gdusdplugin.h
+++ b/src/notify/gdusdmanager.h
@@ -16,14 +16,14 @@
 
 G_BEGIN_DECLS
 
-#define GDU_TYPE_SD_PLUGIN_PLUGIN  (gdu_sd_plugin_get_type ())
-#define GDU_SD_PLUGIN(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GDU_TYPE_SD_PLUGIN_PLUGIN, GduSdPlugin))
-#define GDU_IS_SD_PLUGIN_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDU_TYPE_SD_PLUGIN_PLUGIN))
+#define GDU_TYPE_SD_MANAGER  (gdu_sd_manager_get_type ())
+#define GDU_SD_MANAGER(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GDU_TYPE_SD_MANAGER, GduSdManager))
+#define GDU_IS_SD_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDU_TYPE_SD_MANAGER))
 
-struct GduSdPlugin;
-typedef struct GduSdPlugin GduSdPlugin;
+struct GduSdManager;
+typedef struct GduSdManager GduSdManager;
 
-GType gdu_sd_plugin_get_type (void) G_GNUC_CONST;
+GType gdu_sd_manager_get_type (void) G_GNUC_CONST;
 
 /* All the plugins must implement this function */
 G_MODULE_EXPORT GType register_gnome_settings_plugin (GTypeModule *module);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]