From b48954c32882b59110f8f1926c04b9a391289c90 Mon Sep 17 00:00:00 2001 From: Felipe Erias Morandeira Date: Mon, 26 Nov 2007 16:09:46 +0000 Subject: [PATCH] Fixes NB#63571 Changed the name modest_platform_connect_and_perform_if_network_folderstore(..), that now is modest_platform_connect_if_remote_and_perform(..). Removed modest_platform_connect_and_perform_if_network_account, because the above function performs the same task. Changed modest_ui_actions_create_folder to use the asynchronous call modest_platform_connect_if_remote_and_perform(..). Added a call to gtk_tree_model_filter_refilter(tree_model) by the end of on_row_inserted_maybe_select_folder(..) in modest-folder-view.c, so the folder with the new name is shown. pmo-trunk-r3815 --- src/maemo/modest-platform.c | 68 +++++++++++--------------- src/modest-platform.h | 22 ++------- src/modest-ui-actions.c | 99 ++++++++++++++++++++++++-------------- src/widgets/modest-folder-view.c | 8 +-- 4 files changed, 97 insertions(+), 100 deletions(-) diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index 4c9af84..8ee6646 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -1957,43 +1957,16 @@ modest_platform_connect_and_perform (GtkWindow *parent_window, return; } - -void -modest_platform_connect_and_perform_if_network_account (GtkWindow *parent_window, - TnyAccount *account, - ModestConnectedPerformer callback, - gpointer user_data) -{ - if (tny_account_get_account_type (account) == TNY_ACCOUNT_TYPE_STORE) { - if (!TNY_IS_CAMEL_POP_STORE_ACCOUNT (account) && - !TNY_IS_CAMEL_IMAP_STORE_ACCOUNT (account)) { - - /* This IS a local account like a maildir account, which does not require - * a connection. (original comment had a vague assumption in its language - * usage. There's no assuming needed, this IS what it IS: a local account), */ - - /* We promise to instantly perform the callback, so ... */ - if (callback) { - callback (FALSE, NULL, parent_window, account, user_data); - } - - return; - } - } - - modest_platform_connect_and_perform (parent_window, account, callback, user_data); - - return; -} - + void -modest_platform_connect_and_perform_if_network_folderstore (GtkWindow *parent_window, +modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, TnyFolderStore *folder_store, ModestConnectedPerformer callback, gpointer user_data) { - if (!folder_store) { - + TnyAccount *account = NULL; + + if (!folder_store) { /* We promise to instantly perform the callback, so ... */ if (callback) { callback (FALSE, NULL, parent_window, NULL, user_data); @@ -2003,19 +1976,32 @@ modest_platform_connect_and_perform_if_network_folderstore (GtkWindow *parent_wi /* Original comment: Maybe it is something local. */ /* PVH's comment: maybe we should KNOW this in stead of assuming? */ - } - - if (TNY_IS_FOLDER (folder_store)) { + } else if (TNY_IS_FOLDER (folder_store)) { /* Get the folder's parent account: */ - TnyAccount *account = tny_folder_get_account(TNY_FOLDER (folder_store)); - if (account != NULL) { - modest_platform_connect_and_perform_if_network_account (NULL, account, callback, user_data); - g_object_unref (account); - } + account = tny_folder_get_account(TNY_FOLDER (folder_store)); } else if (TNY_IS_ACCOUNT (folder_store)) { /* Use the folder store as an account: */ - modest_platform_connect_and_perform_if_network_account (NULL, TNY_ACCOUNT (folder_store), callback, user_data); + account = TNY_ACCOUNT (folder_store); + } + + if (tny_account_get_account_type (account) == TNY_ACCOUNT_TYPE_STORE) { + if (!TNY_IS_CAMEL_POP_STORE_ACCOUNT (account) && + !TNY_IS_CAMEL_IMAP_STORE_ACCOUNT (account)) { + + /* This IS a local account like a maildir account, which does not require + * a connection. (original comment had a vague assumption in its language + * usage. There's no assuming needed, this IS what it IS: a local account), */ + + /* We promise to instantly perform the callback, so ... */ + if (callback) { + callback (FALSE, NULL, parent_window, account, user_data); + } + + return; + } } + modest_platform_connect_and_perform (parent_window, account, callback, user_data); + return; } diff --git a/src/modest-platform.h b/src/modest-platform.h index 2caba01..8268d73 100644 --- a/src/modest-platform.h +++ b/src/modest-platform.h @@ -404,23 +404,7 @@ void modest_platform_connect_and_perform (GtkWindow *parent_window, gpointer user_data); /* - * modest_platform_connect_and_perform_if_network_account: - * @parent_window: the parent #GtkWindow for any interactive or progress feedback UI. - * @account: The account that might need a connection in subsequent operations. - * @callback: will be called when finished, can be NULL - * @user_data: user data for @callback - * - * Like modest_platform_connect_and_perform(), but only attempts to make a connection if the - * @account uses the network. For instance, this just returns for local maildir accounts. It - * will in that case instantly perform the @callback. - */ -void modest_platform_connect_and_perform_if_network_account (GtkWindow *parent_window, - TnyAccount *account, - ModestConnectedPerformer callback, - gpointer user_data); - -/* - * modest_platform_connect_and_perform_if_network_folderstore: + * modest_platform_connect_if_remote_and_perform: * @parent_window: the parent #GtkWindow for any interactive or progress feedback UI. * @folder_store: The folder store (folder or account) that might need a connection in subsequent operations. * @callback: will be called when finished, can be NULL @@ -428,9 +412,9 @@ void modest_platform_connect_and_perform_if_network_account (GtkWindow *parent_w * * Like modest_platform_connect_and_perform(), but only attempts to make a connection if the * folder store uses the network. For instance, this just returns for local maildir folders. It - * will in that case instantly perform the @callback + * will in that case synchronously and instantly perform the @callback */ -void modest_platform_connect_and_perform_if_network_folderstore (GtkWindow *parent_window, +void modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, TnyFolderStore *folder_store, ModestConnectedPerformer callback, gpointer user_data); diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 97f07ac..049da20 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -2690,6 +2690,59 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op, modest_platform_information_banner (GTK_WIDGET (window), NULL, message); } +typedef struct { + TnyFolderStore *folder; + gchar *new_name; +} RenameFolderInfo; + +static void +on_rename_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window, + TnyAccount *account, gpointer user_data) +{ + ModestMailOperation *mail_op = NULL; + GtkTreeSelection *sel = NULL; + GtkWidget *folder_view = NULL; + RenameFolderInfo *data = (RenameFolderInfo*)user_data; + + if (MODEST_IS_MAIN_WINDOW(parent_window)) { + + folder_view = modest_main_window_get_child_widget ( + MODEST_MAIN_WINDOW (parent_window), + MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); + + mail_op = + modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window), + modest_ui_actions_rename_folder_error_handler, + parent_window, NULL); + + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + + /* Clear the headers view */ + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view)); + gtk_tree_selection_unselect_all (sel); + + /* Select *after* the changes */ + modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), + TNY_FOLDER(data->folder), TRUE); + + /* Actually rename the folder */ + modest_mail_operation_rename_folder (mail_op, + TNY_FOLDER (data->folder), + (const gchar *) (data->new_name)); + + /* TODO folder view filter refilter */ + /* + GtkTreeModel *tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view)); + if (GTK_IS_TREE_MODEL_FILTER (tree_model)) + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (tree_model)); */ + } + + g_object_unref (mail_op); + g_free (data->new_name); + g_free (data); +} + void modest_ui_actions_on_rename_folder (GtkAction *action, ModestMainWindow *main_window) @@ -2721,7 +2774,7 @@ modest_ui_actions_on_rename_folder (GtkAction *action, gint response; const gchar *current_name; TnyFolderStore *parent; - gboolean do_rename = TRUE; + gboolean do_rename = TRUE; current_name = tny_folder_get_name (TNY_FOLDER (folder)); parent = tny_folder_get_folder_store (TNY_FOLDER (folder)); @@ -2730,42 +2783,14 @@ modest_ui_actions_on_rename_folder (GtkAction *action, &folder_name); g_object_unref (parent); - if (response != GTK_RESPONSE_ACCEPT || strlen (folder_name) == 0) { - do_rename = FALSE; - } else if (modest_tny_folder_store_is_remote(folder) && - !tny_device_is_online (modest_runtime_get_device())) { - TnyAccount *account = tny_folder_get_account(TNY_FOLDER(folder)); - do_rename = modest_platform_connect_and_wait(GTK_WINDOW(main_window), account); - g_object_unref(account); - } - - if (do_rename) { - ModestMailOperation *mail_op; - GtkTreeSelection *sel = NULL; - - mail_op = - modest_mail_operation_new_with_error_handling (G_OBJECT(main_window), - modest_ui_actions_rename_folder_error_handler, - main_window, NULL); - - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - - /* Clear the headers view */ - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view)); - gtk_tree_selection_unselect_all (sel); - - /* Select *after* the changes */ - modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), - TNY_FOLDER(folder), TRUE); - - /* Actually rename the folder */ - modest_mail_operation_rename_folder (mail_op, - TNY_FOLDER (folder), - (const gchar *) folder_name); - - g_object_unref (mail_op); - g_free (folder_name); + if (response != GTK_RESPONSE_ACCEPT || strlen (folder_name) == 0) { + do_rename = FALSE; + } else { + RenameFolderInfo *rename_folder_data = g_new0 (RenameFolderInfo, 1); + rename_folder_data->folder = folder; + rename_folder_data->new_name = folder_name; + modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window), + folder, on_rename_folder_cb, rename_folder_data); } } g_object_unref (folder); diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 3634ea0..f91f587 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -2148,7 +2148,7 @@ drag_and_drop_from_folder_view_dst_folder_performer (gboolean canceled, } /* Connect to source folder and perform the copy/move */ - modest_platform_connect_and_perform_if_network_folderstore (NULL, + modest_platform_connect_if_remote_and_perform (NULL, info->src_folder, drag_and_drop_from_folder_view_src_folder_performer, info); @@ -2232,7 +2232,7 @@ drag_and_drop_from_folder_view (GtkTreeModel *source_model, info->helper = helper; /* Connect to the destination folder and perform the copy/move */ - modest_platform_connect_and_perform_if_network_folderstore (GTK_WINDOW (win), + modest_platform_connect_if_remote_and_perform (GTK_WINDOW (win), dest_folder, drag_and_drop_from_folder_view_dst_folder_performer, info); @@ -2828,6 +2828,9 @@ on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, GtkTreePath *pat modest_folder_view_disable_next_folder_selection (self); /* g_object_unref (priv->folder_to_select); */ /* priv->folder_to_select = NULL; */ + + /* Refilter the model */ + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (tree_model)); } } @@ -2862,7 +2865,6 @@ modest_folder_view_select_folder (ModestFolderView *self, TnyFolder *folder, priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); if (after_change) { - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (self)); gtk_tree_selection_unselect_all (sel); -- 1.7.9.5