diff options
Diffstat (limited to 'src/empathy-event-manager.c')
-rw-r--r-- | src/empathy-event-manager.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c index f192b9731..efcea9ec8 100644 --- a/src/empathy-event-manager.c +++ b/src/empathy-event-manager.c @@ -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 * |