From: Sergio Villar Senin Date: Fri, 23 Jan 2009 15:22:01 +0000 (+0000) Subject: * Fixes NB#99187, don't wait for a connection to show the new folder dialog X-Git-Tag: git_migration_finished~732 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=cd2c9b025a5fa7b22437869f0b3f82586af46511 * Fixes NB#99187, don't wait for a connection to show the new folder dialog pmo-trunk-r7266 --- diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index a281474..9519be0 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -3277,6 +3277,46 @@ do_create_folder_cb (ModestMailOperation *mail_op, g_object_unref (source_win); } +typedef struct { + gchar *folder_name; + TnyFolderStore *parent; +} CreateFolderConnect; + +static void +do_create_folder_performer (gboolean canceled, + GError *err, + GtkWindow *parent_window, + TnyAccount *account, + gpointer user_data) +{ + CreateFolderConnect *helper = (CreateFolderConnect *) user_data; + ModestMailOperation *mail_op; + + if (canceled || err) { + /* In memory full conditions we could get this error here */ + check_memory_full_error ((GtkWidget *) parent_window, err); + goto frees; + } + + mail_op = modest_mail_operation_new ((GObject *) parent_window); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_create_folder (mail_op, + helper->parent, + (const gchar *) helper->folder_name, + do_create_folder_cb, + g_strdup (helper->folder_name)); + g_object_unref (mail_op); + + frees: + if (helper->parent) + g_object_unref (helper->parent); + if (helper->folder_name) + g_free (helper->folder_name); + g_slice_free (CreateFolderConnect, helper); +} + + static void do_create_folder (GtkWindow *parent_window, TnyFolderStore *suggested_parent, @@ -3293,46 +3333,24 @@ do_create_folder (GtkWindow *parent_window, &parent_folder); if (result == GTK_RESPONSE_ACCEPT && parent_folder) { - ModestMailOperation *mail_op; + CreateFolderConnect *helper = (CreateFolderConnect *) g_slice_new0 (CreateFolderHelper); + helper->folder_name = g_strdup (folder_name); + helper->parent = g_object_ref (parent_folder); - mail_op = modest_mail_operation_new ((GObject *) parent_window); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - modest_mail_operation_create_folder (mail_op, - parent_folder, - (const gchar *) folder_name, - do_create_folder_cb, - folder_name); - g_object_unref (mail_op); + modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window), + TRUE, + parent_folder, + do_create_folder_performer, + helper); } + if (folder_name) + g_free (folder_name); if (parent_folder) g_object_unref (parent_folder); } static void -create_folder_performer (gboolean canceled, - GError *err, - GtkWindow *parent_window, - TnyAccount *account, - gpointer user_data) -{ - TnyFolderStore *parent_folder = TNY_FOLDER_STORE (user_data); - - if (canceled || err) { - /* In memory full conditions we could get this error here */ - check_memory_full_error ((GtkWidget *) parent_window, err); - goto frees; - } - - /* Run the new folder dialog */ - do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL); - - frees: - g_object_unref (parent_folder); -} - -static void modest_ui_actions_create_folder(GtkWidget *parent_window, GtkWidget *folder_view) { @@ -3359,14 +3377,8 @@ modest_ui_actions_create_folder(GtkWidget *parent_window, parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); #endif - if (parent_folder) { - /* The parent folder will be freed in the callback */ - modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window), - TRUE, - parent_folder, - create_folder_performer, - parent_folder); - } + if (parent_folder) + do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL); } void