diff options
author | xclaesse <xclaesse@4ee84921-47dd-4033-b63a-18d7a039a3e4> | 2008-11-22 00:15:39 +0800 |
---|---|---|
committer | xclaesse <xclaesse@4ee84921-47dd-4033-b63a-18d7a039a3e4> | 2008-11-22 00:15:39 +0800 |
commit | cf363adf4e9208cf7ae4235795d5e3b9b79f9411 (patch) | |
tree | 22c3549442db0f6e431abc6c5859cc7046406479 | |
parent | c5052d0fcd7282995e371dbeccc6ca1ddc52bc26 (diff) | |
download | gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.tar gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.tar.gz gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.tar.bz2 gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.tar.lz gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.tar.xz gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.tar.zst gsoc2013-empathy-cf363adf4e9208cf7ae4235795d5e3b9b79f9411.zip |
Added ability for the ft manager to stay around when closed. (Jonny Lamb)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
git-svn-id: svn+ssh://svn.gnome.org/svn/empathy/trunk@1766 4ee84921-47dd-4033-b63a-18d7a039a3e4
-rw-r--r-- | libempathy-gtk/empathy-ft-manager.c | 40 | ||||
-rw-r--r-- | libempathy-gtk/empathy-ft-manager.h | 1 |
2 files changed, 17 insertions, 24 deletions
diff --git a/libempathy-gtk/empathy-ft-manager.c b/libempathy-gtk/empathy-ft-manager.c index 4eeba68f7..20d41ba75 100644 --- a/libempathy-gtk/empathy-ft-manager.c +++ b/libempathy-gtk/empathy-ft-manager.c @@ -116,6 +116,8 @@ static void ft_manager_display_accept_dialog (EmpathyFTManager *ft_manager, G_DEFINE_TYPE (EmpathyFTManager, empathy_ft_manager, G_TYPE_OBJECT); +static EmpathyFTManager *manager_p = NULL; + static void empathy_ft_manager_class_init (EmpathyFTManagerClass *klass) { @@ -154,31 +156,26 @@ empathy_ft_manager_finalize (GObject *object) g_source_remove (priv->save_geometry_id); } - G_OBJECT_CLASS (empathy_ft_manager_parent_class)->finalize (object); -} - -EmpathyFTManager * -empathy_ft_manager_get_default (void) -{ - static EmpathyFTManager *manager; - - if (!manager) - manager = empathy_ft_manager_new (); + manager_p = NULL; - return manager; + G_OBJECT_CLASS (empathy_ft_manager_parent_class)->finalize (object); } /** - * empathy_ft_manager_new: + * empathy_ft_manager_get_default: * - * Creates a new #EmpathyFTManager. + * Returns a new #EmpathyFTManager if there is not already one, or the existing + * one if it exists. * - * Returns: a new #EmpathyFTManager + * Returns: a #EmpathyFTManager */ EmpathyFTManager * -empathy_ft_manager_new (void) +empathy_ft_manager_get_default (void) { - return g_object_new (EMPATHY_TYPE_FT_MANAGER, NULL); + if (!manager_p) + manager_p = g_object_new (EMPATHY_TYPE_FT_MANAGER, NULL); + + return manager_p; } /** @@ -674,15 +671,18 @@ ft_manager_delete_event_cb (GtkWidget *widget, priv = GET_PRIV (ft_manager); + ft_manager_clear (ft_manager); if (g_hash_table_size (priv->file_to_row_ref) == 0) { DEBUG ("Destroying window"); + empathy_ft_manager_finalize (G_OBJECT (ft_manager)); + manager_p = NULL; return FALSE; } else { DEBUG ("Hiding window"); gtk_widget_hide (widget); - ft_manager_clear (ft_manager); return TRUE; } + } static gboolean @@ -912,12 +912,6 @@ ft_manager_remove_file_from_list (EmpathyFTManager *ft_manager, } gtk_tree_row_reference_free (row_ref); } - - if (g_hash_table_size (priv->file_to_row_ref) == 0 && - !GTK_WIDGET_VISIBLE (priv->window)) { - DEBUG ("Destroying window"); - gtk_widget_destroy (priv->window); - } } static void diff --git a/libempathy-gtk/empathy-ft-manager.h b/libempathy-gtk/empathy-ft-manager.h index 15104c89c..e7d271889 100644 --- a/libempathy-gtk/empathy-ft-manager.h +++ b/libempathy-gtk/empathy-ft-manager.h @@ -54,7 +54,6 @@ struct _EmpathyFTManagerClass GType empathy_ft_manager_get_type (void); EmpathyFTManager *empathy_ft_manager_get_default (void); -EmpathyFTManager *empathy_ft_manager_new (void); void empathy_ft_manager_add_file (EmpathyFTManager *ft_manager, EmpathyFile *file); GtkWidget *empathy_ft_manager_get_dialog (EmpathyFTManager *ft_manager); |