]> git.0d.be Git - empathy.git/commitdiff
Port EmpathyEventManager to the new singleton policy.
authorXavier Claessens <xclaesse@src.gnome.org>
Fri, 9 Jan 2009 10:06:15 +0000 (10:06 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 9 Jan 2009 10:06:15 +0000 (10:06 +0000)
svn path=/trunk/; revision=2117

src/empathy-event-manager.c
src/empathy-event-manager.h
src/empathy-main-window.c

index f192b9731cb40461684220190ea85f15e0b4f8ae..efcea9ec8d8a0047614ef62b86b9471c6e77dc9a 100644 (file)
@@ -71,6 +71,8 @@ static guint signals[LAST_SIGNAL];
 
 G_DEFINE_TYPE (EmpathyEventManager, empathy_event_manager, G_TYPE_OBJECT);
 
+static EmpathyEventManager * manager_singleton = NULL;
+
 static void event_remove (EventPriv *event);
 
 static void
@@ -387,6 +389,26 @@ event_manager_pendings_changed_cb (EmpathyContactList  *list,
        g_string_free (str, TRUE);
 }
 
+static GObject *
+event_manager_constructor (GType type,
+                          guint n_props,
+                          GObjectConstructParam *props)
+{
+       GObject *retval;
+
+       if (manager_singleton) {
+               retval = g_object_ref (manager_singleton);
+       } else {
+               retval = G_OBJECT_CLASS (empathy_event_manager_parent_class)->constructor
+                       (type, n_props, props);
+               g_object_add_weak_pointer (retval, (gpointer *) &retval);
+
+               manager_singleton = EMPATHY_EVENT_MANAGER (retval);
+       }
+
+       return retval;
+}
+
 static void
 event_manager_finalize (GObject *object)
 {
@@ -404,6 +426,7 @@ empathy_event_manager_class_init (EmpathyEventManagerClass *klass)
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
        object_class->finalize = event_manager_finalize;
+       object_class->constructor = event_manager_constructor;
 
        signals[EVENT_ADDED] =
                g_signal_new ("event-added",
@@ -453,18 +476,9 @@ empathy_event_manager_init (EmpathyEventManager *manager)
 }
 
 EmpathyEventManager *
-empathy_event_manager_new (void)
+empathy_event_manager_dup_singleton (void)
 {
-       static EmpathyEventManager *manager = NULL;
-
-       if (!manager) {
-               manager = g_object_new (EMPATHY_TYPE_EVENT_MANAGER, NULL);
-               g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
-       } else {
-               g_object_ref (manager);
-       }
-
-       return manager;
+       return g_object_new (EMPATHY_TYPE_EVENT_MANAGER, NULL);
 }
 
 GSList *
index 89cb74d631cc7f3eace33620050db1a5100fb56d..cd299207fb997b92fdde68cd93256e6540ea3d9e 100644 (file)
@@ -55,7 +55,7 @@ typedef struct {
 } EmpathyEvent;
 
 GType                empathy_event_manager_get_type      (void) G_GNUC_CONST;
-EmpathyEventManager *empathy_event_manager_new           (void);
+EmpathyEventManager *empathy_event_manager_dup_singleton (void);
 EmpathyEvent *       empathy_event_manager_get_top_event (EmpathyEventManager *manager);
 GSList *             empathy_event_manager_get_events    (EmpathyEventManager *manager);
 void                 empathy_event_activate              (EmpathyEvent        *event);
index 07c236f969dec6e301dd25a13d9c6f5dacd8a129..3d552492335304b39b6498765eea24667b68123e 100644 (file)
@@ -639,7 +639,7 @@ empathy_main_window_show (void)
        }
 
        /* Enable event handling */
-       window->event_manager = empathy_event_manager_new ();
+       window->event_manager = empathy_event_manager_dup_singleton ();
        g_signal_connect (window->event_manager, "event-added",
                          G_CALLBACK (main_window_event_added_cb),
                          window);