From 9e91ccd4f78115f3a57a1d678ef10f6325aeaa1c Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Wed, 15 Feb 2012 12:43:38 +0100 Subject: [PATCH] Pass EmpathyConnectionManagers to the import widget The widget doesn't have to prepare EmpathyConnectionManagers itself any more and so can populate its treeview right away. By doing so it will request a more decent size and so the dialog will actually display the accounts which can be imported without forcing user to resize it. https://bugzilla.gnome.org/show_bug.cgi?id=670201 --- src/empathy-account-assistant.c | 3 ++- src/empathy-accounts-dialog.c | 3 ++- src/empathy-import-dialog.c | 40 ++++++++++++++++++++++++++---- src/empathy-import-dialog.h | 5 +++- src/empathy-import-widget.c | 44 +++++++++++++++++---------------- src/empathy-import-widget.h | 5 +++- 6 files changed, 70 insertions(+), 30 deletions(-) diff --git a/src/empathy-account-assistant.c b/src/empathy-account-assistant.c index 3c31b81b..e4ee048b 100644 --- a/src/empathy-account-assistant.c +++ b/src/empathy-account-assistant.c @@ -737,7 +737,8 @@ account_assistant_build_import_page (EmpathyAccountAssistant *self) gtk_widget_show (w); /* NOTE: this is hardcoded as we support pidgin only */ - iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_PIDGIN); + iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_PIDGIN, + priv->connection_mgrs); import = empathy_import_widget_get_widget (iw); gtk_container_add (GTK_CONTAINER (w), import); gtk_widget_show (import); diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 70a50b33..c6e706dc 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -2010,10 +2010,11 @@ accounts_dialog_account_enabled_cb (TpAccountManager *manager, static GtkWidget * display_import_dialog (EmpathyAccountsDialog *dialog) { + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); GtkWidget *import_dialog; import_dialog = empathy_import_dialog_new (GTK_WINDOW (dialog), - FALSE); + FALSE, priv->cms); gtk_widget_show (import_dialog); return import_dialog; diff --git a/src/empathy-import-dialog.c b/src/empathy-import-dialog.c index 77d11298..a16d3a6f 100644 --- a/src/empathy-import-dialog.c +++ b/src/empathy-import-dialog.c @@ -39,7 +39,8 @@ enum { PROP_PARENT = 1, - PROP_SHOW_WARNING + PROP_SHOW_WARNING, + PROP_CMS, }; typedef struct { @@ -48,6 +49,7 @@ typedef struct { EmpathyImportWidget *iw; gboolean show_warning; + EmpathyConnectionManagers *cms; } EmpathyImportDialogPriv; G_DEFINE_TYPE (EmpathyImportDialog, empathy_import_dialog, GTK_TYPE_DIALOG) @@ -62,7 +64,7 @@ import_dialog_add_import_widget (EmpathyImportDialog *self) area = gtk_dialog_get_content_area (GTK_DIALOG (self)); - iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_ALL); + iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_ALL, priv->cms); widget = empathy_import_widget_get_widget (iw); gtk_box_pack_start (GTK_BOX (area), widget, FALSE, FALSE, 0); gtk_widget_show (widget); @@ -134,6 +136,9 @@ do_get_property (GObject *object, case PROP_SHOW_WARNING: g_value_set_boolean (value, priv->show_warning); break; + case PROP_CMS: + g_value_set_object (value, priv->cms); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -155,6 +160,9 @@ do_set_property (GObject *object, case PROP_SHOW_WARNING: priv->show_warning = g_value_get_boolean (value); break; + case PROP_CMS: + priv->cms = g_value_dup_object (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -199,6 +207,15 @@ empathy_import_dialog_init (EmpathyImportDialog *self) gtk_window_set_title (GTK_WINDOW (self), _("Import Accounts")); gtk_window_set_modal (GTK_WINDOW (self), TRUE); } +static void +do_dispose (GObject *obj) +{ + EmpathyImportDialogPriv *priv = GET_PRIV (obj); + + g_clear_object (&priv->cms); + + G_OBJECT_CLASS (empathy_import_dialog_parent_class)->dispose (obj); +} static void empathy_import_dialog_class_init (EmpathyImportDialogClass *klass) @@ -210,6 +227,7 @@ empathy_import_dialog_class_init (EmpathyImportDialogClass *klass) oclass->constructed = do_constructed; oclass->get_property = do_get_property; oclass->set_property = do_set_property; + oclass->dispose = do_dispose; gtkclass->response = impl_signal_response; @@ -226,13 +244,25 @@ empathy_import_dialog_class_init (EmpathyImportDialogClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property (oclass, PROP_SHOW_WARNING, param_spec); + param_spec = g_param_spec_object ("cms", + "EmpathyConnectionManagers", "EmpathyConnectionManager", + EMPATHY_TYPE_CONNECTION_MANAGERS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_CMS, param_spec); + g_type_class_add_private (klass, sizeof (EmpathyImportDialogPriv)); } GtkWidget * empathy_import_dialog_new (GtkWindow *parent, - gboolean warning) + gboolean warning, + EmpathyConnectionManagers *cms) { - return g_object_new (EMPATHY_TYPE_IMPORT_DIALOG, "parent-window", - parent, "show-warning", warning, NULL); + g_return_val_if_fail (EMPATHY_IS_CONNECTION_MANAGERS (cms), NULL); + + return g_object_new (EMPATHY_TYPE_IMPORT_DIALOG, + "parent-window", parent, + "show-warning", warning, + "cms", cms, + NULL); } diff --git a/src/empathy-import-dialog.h b/src/empathy-import-dialog.h index 0e9d225c..a412037d 100644 --- a/src/empathy-import-dialog.h +++ b/src/empathy-import-dialog.h @@ -25,6 +25,8 @@ #ifndef __EMPATHY_IMPORT_DIALOG_H__ #define __EMPATHY_IMPORT_DIALOG_H__ +#include + G_BEGIN_DECLS #define EMPATHY_TYPE_IMPORT_DIALOG empathy_import_dialog_get_type() @@ -56,7 +58,8 @@ typedef struct { GType empathy_import_dialog_get_type (void); GtkWidget* empathy_import_dialog_new (GtkWindow *parent_window, - gboolean show_warning); + gboolean show_warning, + EmpathyConnectionManagers *cms); G_END_DECLS diff --git a/src/empathy-import-widget.c b/src/empathy-import-widget.c index aaf20d5c..041c5100 100644 --- a/src/empathy-import-widget.c +++ b/src/empathy-import-widget.c @@ -55,7 +55,8 @@ enum }; enum { - PROP_APPLICATION_ID = 1 + PROP_APPLICATION_ID = 1, + PROP_CMS }; typedef struct { @@ -358,20 +359,6 @@ import_widget_set_up_account_list (EmpathyImportWidget *self) import_widget_add_accounts_to_model (self); } -static void -import_widget_cms_prepare_cb (GObject *source, - GAsyncResult *result, - gpointer user_data) -{ - EmpathyImportWidget *self = user_data; - - if (!empathy_connection_managers_prepare_finish ( - EMPATHY_CONNECTION_MANAGERS (source), result, NULL)) - return; - - import_widget_set_up_account_list (self); -} - static void import_widget_destroy_cb (GtkWidget *w, EmpathyImportWidget *self) @@ -392,6 +379,9 @@ do_get_property (GObject *object, case PROP_APPLICATION_ID: g_value_set_int (value, priv->app_id); break; + case PROP_CMS: + g_value_set_object (value, priv->cms); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -410,6 +400,9 @@ do_set_property (GObject *object, case PROP_APPLICATION_ID: priv->app_id = g_value_get_int (value); break; + case PROP_CMS: + priv->cms = g_value_dup_object (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -468,8 +461,7 @@ do_constructed (GObject *obj) g_signal_connect (priv->vbox, "destroy", G_CALLBACK (import_widget_destroy_cb), self); - empathy_connection_managers_prepare_async (priv->cms, - import_widget_cms_prepare_cb, self); + import_widget_set_up_account_list (self); } static void @@ -490,6 +482,12 @@ empathy_import_widget_class_init (EmpathyImportWidgetClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property (oclass, PROP_APPLICATION_ID, param_spec); + param_spec = g_param_spec_object ("cms", + "EmpathyConnectionManagers", "EmpathyConnectionManager", + EMPATHY_TYPE_CONNECTION_MANAGERS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_CMS, param_spec); + g_type_class_add_private (klass, sizeof (EmpathyImportWidgetPriv)); } @@ -501,14 +499,18 @@ empathy_import_widget_init (EmpathyImportWidget *self) EmpathyImportWidgetPriv); self->priv = priv; - - priv->cms = empathy_connection_managers_dup_singleton (); } EmpathyImportWidget * -empathy_import_widget_new (EmpathyImportApplication id) +empathy_import_widget_new (EmpathyImportApplication id, + EmpathyConnectionManagers *cms) { - return g_object_new (EMPATHY_TYPE_IMPORT_WIDGET, "application-id", id, NULL); + g_return_val_if_fail (EMPATHY_IS_CONNECTION_MANAGERS (cms), NULL); + + return g_object_new (EMPATHY_TYPE_IMPORT_WIDGET, + "application-id", id, + "cms", cms, + NULL); } GtkWidget * diff --git a/src/empathy-import-widget.h b/src/empathy-import-widget.h index 48f2e1d4..14a01d79 100644 --- a/src/empathy-import-widget.h +++ b/src/empathy-import-widget.h @@ -27,6 +27,8 @@ #include +#include + #include "empathy-import-utils.h" G_BEGIN_DECLS @@ -59,7 +61,8 @@ typedef struct { GType empathy_import_widget_get_type (void); -EmpathyImportWidget* empathy_import_widget_new (EmpathyImportApplication id); +EmpathyImportWidget* empathy_import_widget_new (EmpathyImportApplication id, + EmpathyConnectionManagers *cms); GtkWidget * empathy_import_widget_get_widget (EmpathyImportWidget *self); -- 2.39.2