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

libempathy-gtk/empathy-chat-text-view.c
libempathy-gtk/empathy-chat.c
libempathy-gtk/empathy-smiley-manager.c
libempathy-gtk/empathy-smiley-manager.h
libempathy-gtk/empathy-theme.c
src/empathy-chat-window.c

index 9362303a276c8654194f4eaed75d10f5a490505a..a3d14a07decc0a3b10ac8277559ea19526ab2d07 100644 (file)
@@ -637,7 +637,7 @@ empathy_chat_text_view_init (EmpathyChatTextView *view)
        priv->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        priv->last_timestamp = 0;
        priv->allow_scrolling = TRUE;
-       priv->smiley_manager = empathy_smiley_manager_new ();
+       priv->smiley_manager = empathy_smiley_manager_dup_singleton ();
        
        g_object_set (view,
                      "wrap-mode", GTK_WRAP_WORD_CHAR,
index 0bfad9536032bfc5046ce17f64d0322f61216ffb..ce5f69880519d3b4cdbee8009e4d2744fe7cc66b 100644 (file)
@@ -968,7 +968,7 @@ chat_input_populate_popup_cb (GtkTextView *view,
        gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
        gtk_widget_show (item);
 
-       smiley_manager = empathy_smiley_manager_new ();
+       smiley_manager = empathy_smiley_manager_dup_singleton ();
        smiley_menu = empathy_smiley_menu_new (smiley_manager,
                                               chat_insert_smiley_activate_cb,
                                               chat);
index 4137db63d512b0bc45196ccfedd782a6798722c9..3f6ea25c338b12d9dcf5db891cf285c4dca9fdce 100644 (file)
@@ -44,6 +44,8 @@ struct _SmileyManagerTree {
 
 G_DEFINE_TYPE (EmpathySmileyManager, empathy_smiley_manager, G_TYPE_OBJECT);
 
+static EmpathySmileyManager *manager_singleton = NULL;
+
 static SmileyManagerTree *
 smiley_manager_tree_new (gunichar c)
 {
@@ -115,12 +117,33 @@ smiley_manager_finalize (GObject *object)
        g_slist_free (priv->smileys);
 }
 
+static GObject *
+smiley_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_smiley_manager_parent_class)->constructor
+                       (type, n_props, props);
+               g_object_add_weak_pointer (retval, (gpointer *) &retval);
+
+               manager_singleton = EMPATHY_SMILEY_MANAGER (retval);
+       }
+
+       return retval;
+}
+
 static void
 empathy_smiley_manager_class_init (EmpathySmileyManagerClass *klass)
 {
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
        object_class->finalize = smiley_manager_finalize;
+       object_class->constructor = smiley_manager_constructor;
 
        g_type_class_add_private (object_class, sizeof (EmpathySmileyManagerPriv));
 }
@@ -134,22 +157,14 @@ empathy_smiley_manager_init (EmpathySmileyManager *manager)
        manager->priv = priv;
        priv->tree = smiley_manager_tree_new ('\0');
        priv->smileys = NULL;
+
+       empathy_smiley_manager_load (manager);
 }
 
 EmpathySmileyManager *
-empathy_smiley_manager_new (void)
+empathy_smiley_manager_dup_singleton (void)
 {
-       static EmpathySmileyManager *manager = NULL;
-
-       if (!manager) {
-               manager = g_object_new (EMPATHY_TYPE_SMILEY_MANAGER, NULL);
-               g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
-               empathy_smiley_manager_load (manager);
-       } else {
-               g_object_ref (manager);
-       }
-
-       return manager;
+       return g_object_new (EMPATHY_TYPE_SMILEY_MANAGER, NULL);
 }
 
 static SmileyManagerTree *
index c73675742102ba6da460d838549236b5fc8895ec..dae022dfa27f4fd37dba8e140108a39cfe6a496e 100644 (file)
@@ -57,7 +57,7 @@ typedef void (*EmpathySmileyMenuFunc) (EmpathySmileyManager *manager,
                                       gpointer              user_data);
 
 GType                 empathy_smiley_manager_get_type        (void) G_GNUC_CONST;
-EmpathySmileyManager *empathy_smiley_manager_new             (void);
+EmpathySmileyManager *empathy_smiley_manager_dup_singleton   (void);
 void                  empathy_smiley_manager_load            (EmpathySmileyManager *manager);
 void                  empathy_smiley_manager_add             (EmpathySmileyManager *manager,
                                                              const gchar          *icon_name,
index 971c6b1c973eb6ed375634f93609200adda28eea..ca4f66663eac50c587e625d5daae671a0849044c 100644 (file)
@@ -102,7 +102,7 @@ empathy_theme_init (EmpathyTheme *theme)
                EMPATHY_TYPE_THEME, EmpathyThemePriv);
 
        theme->priv = priv;
-       priv->smiley_manager = empathy_smiley_manager_new ();
+       priv->smiley_manager = empathy_smiley_manager_dup_singleton ();
 }
 
 static void
index c6b23b68dbff6af974b95ad19e7e78250451b3af..6bce53b9c8c1c48387004870856e0a31ad7fcde8 100644 (file)
@@ -1277,7 +1277,7 @@ empathy_chat_window_init (EmpathyChatWindow *window)
        g_object_unref (accel_group);
 
        /* Set up smiley menu */
-       smiley_manager = empathy_smiley_manager_new ();
+       smiley_manager = empathy_smiley_manager_dup_singleton ();
        menu = empathy_smiley_menu_new (smiley_manager,
                                        chat_window_insert_smiley_activate_cb,
                                        window);