]> git.0d.be Git - empathy.git/commitdiff
Reimplement the singleton in the constructor
authorPierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk>
Sun, 31 May 2009 15:53:18 +0000 (11:53 -0400)
committerPierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk>
Mon, 1 Jun 2009 15:35:33 +0000 (11:35 -0400)
libempathy-gtk/empathy-location-manager.c
libempathy-gtk/empathy-location-manager.h
src/empathy.c

index aab598bc9804e8009fe2b2bdd06715d58b8483a0..3da7f759033ac96cdcca027f8aa002d594f92df3 100644 (file)
@@ -46,6 +46,7 @@
 
 /* Seconds before updating the location */
 #define TIMEOUT 10
+static EmpathyLocationManager *location_manager = NULL;
 
 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyLocationManager)
 typedef struct {
@@ -100,6 +101,29 @@ static gboolean publish_on_idle (gpointer user_data);
 
 G_DEFINE_TYPE (EmpathyLocationManager, empathy_location_manager, G_TYPE_OBJECT);
 
+static GObject *
+location_manager_constructor (GType type,
+    guint n_construct_params,
+    GObjectConstructParam *construct_params)
+{
+  GObject *retval;
+
+  if (location_manager == NULL)
+    {
+      retval = G_OBJECT_CLASS (empathy_location_manager_parent_class)->constructor
+          (type, n_construct_params, construct_params);
+
+      location_manager = EMPATHY_LOCATION_MANAGER (retval);
+      g_object_add_weak_pointer (retval, (gpointer) &location_manager);
+    }
+  else
+    {
+      retval = g_object_ref (location_manager);
+    }
+
+  return retval;
+}
+
 static void
 empathy_location_manager_class_init (EmpathyLocationManagerClass *class)
 {
@@ -107,6 +131,7 @@ empathy_location_manager_class_init (EmpathyLocationManagerClass *class)
 
   object_class = G_OBJECT_CLASS (class);
 
+  object_class->constructor = location_manager_constructor;
   object_class->dispose = location_manager_dispose;
   object_class->get_property = location_manager_get_property;
   object_class->set_property = location_manager_set_property;
@@ -314,16 +339,10 @@ location_manager_set_property (GObject *object,
 }
 
 EmpathyLocationManager *
-empathy_location_manager_dup_default (void)
+empathy_location_manager_dup_singleton (void)
 {
-  static EmpathyLocationManager *singleton = NULL;
-  if (singleton == NULL)
-    {
-      singleton = g_object_new (EMPATHY_TYPE_LOCATION_MANAGER, NULL);
-      g_object_add_weak_pointer (G_OBJECT (singleton), (gpointer *)&singleton);
-    }
-
-  return g_object_ref (singleton);
+  return EMPATHY_LOCATION_MANAGER (g_object_new (EMPATHY_TYPE_LOCATION_MANAGER,
+      NULL));
 }
 
 static void
index cb12791dce7ff92382b028ab6eb9173401078c5c..092ef0809c2f846abd31f29afaa51fbfab9fb615 100644 (file)
@@ -50,7 +50,7 @@ struct _EmpathyLocationManagerClass
 };
 
 GType empathy_location_manager_get_type (void) G_GNUC_CONST;
-EmpathyLocationManager * empathy_location_manager_dup_default (void);
+EmpathyLocationManager * empathy_location_manager_dup_singleton (void);
 
 G_END_DECLS
 
index 617543a55d423ecf8656966f095c8af9d558a25f..cc9103cb1ef7877bfa22421e9785be24e204dd9b 100644 (file)
@@ -588,7 +588,7 @@ main (int argc, char *argv[])
 
        /* Location mananger */
 #if HAVE_GEOCLUE
-       location_manager = empathy_location_manager_dup_default ();
+       location_manager = empathy_location_manager_dup_singleton ();
 #endif
 
        gtk_main ();