diff options
-rw-r--r-- | mail/message-list.c | 36 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-view.c | 22 |
2 files changed, 50 insertions, 8 deletions
diff --git a/mail/message-list.c b/mail/message-list.c index 849fae8ef9..997e38d12a 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2447,6 +2447,7 @@ ml_tree_drag_motion (ETree *tree, { GList *targets; GdkDragAction action, actions = 0; + GtkWidget *source_widget; /* If drop target is name of the account/store and not actual folder, don't allow any action */ if (!ml->folder) { @@ -2454,18 +2455,41 @@ ml_tree_drag_motion (ETree *tree, return TRUE; } + source_widget = gtk_drag_get_source_widget (context); + /* If source widget is packed under 'tree', don't allow any action */ - if (is_tree_widget_children (tree, gtk_drag_get_source_widget (context))) { + if (is_tree_widget_children (tree, source_widget)) { gdk_drag_status (context, 0, time); return TRUE; } - if (EM_IS_FOLDER_TREE (gtk_drag_get_source_widget (context))) { + if (EM_IS_FOLDER_TREE (source_widget)) { EMFolderTree *folder_tree; - CamelFolder *folder; - - folder_tree = EM_FOLDER_TREE (gtk_drag_get_source_widget (context)); - folder = em_folder_tree_get_selected_folder (folder_tree); + CamelFolder *folder = NULL; + CamelStore *selected_store; + gchar *selected_folder_name; + gboolean has_selection; + + folder_tree = EM_FOLDER_TREE (source_widget); + + has_selection = em_folder_tree_get_selected ( + folder_tree, &selected_store, &selected_folder_name); + + /* Sanity checks */ + g_warn_if_fail ( + (has_selection && selected_store != NULL) || + (!has_selection && selected_store == NULL)); + g_warn_if_fail ( + (has_selection && selected_folder_name != NULL) || + (!has_selection && selected_folder_name == NULL)); + + if (has_selection) { + folder = camel_store_get_folder_sync ( + selected_store, selected_folder_name, + CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); + g_object_unref (selected_store); + g_free (selected_folder_name); + } if (folder == ml->folder) { gdk_drag_status (context, 0, time); diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c index 4d91a3dbd1..146b89f38b 100644 --- a/modules/mail/e-mail-shell-view.c +++ b/modules/mail/e-mail-shell-view.c @@ -502,6 +502,9 @@ all_accounts: * account-wide searches still in progress. */ text = e_shell_searchbar_get_search_text (searchbar); if (text == NULL || *text == '\0') { + CamelStore *selected_store; + gchar *selected_folder_name; + if (priv->search_account_all != NULL) { g_object_unref (priv->search_account_all); priv->search_account_all = NULL; @@ -518,8 +521,14 @@ all_accounts: * avoid search conflicts, so we can't just grab the * folder URI and let the asynchronous callbacks run * after we've already kicked off the search. */ - folder = em_folder_tree_get_selected_folder (folder_tree); + em_folder_tree_get_selected ( + folder_tree, &selected_store, &selected_folder_name); + folder = camel_store_get_folder_sync ( + selected_store, selected_folder_name, + CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); e_mail_reader_set_folder (reader, folder); + g_object_unref (selected_store); + g_free (selected_folder_name); gtk_widget_set_sensitive (GTK_WIDGET (combo_box), TRUE); @@ -606,6 +615,9 @@ current_account: * account-wide searches still in progress. */ text = e_shell_searchbar_get_search_text (searchbar); if (text == NULL || *text == '\0') { + CamelStore *selected_store; + gchar *selected_folder_name; + if (priv->search_account_current != NULL) { g_object_unref (priv->search_account_current); priv->search_account_current = NULL; @@ -622,8 +634,14 @@ current_account: * avoid search conflicts, so we can't just grab the * folder URI and let the asynchronous callbacks run * after we've already kicked off the search. */ - folder = em_folder_tree_get_selected_folder (folder_tree); + em_folder_tree_get_selected ( + folder_tree, &selected_store, &selected_folder_name); + folder = camel_store_get_folder_sync ( + selected_store, selected_folder_name, + CAMEL_STORE_FOLDER_INFO_FAST, NULL, NULL); e_mail_reader_set_folder (reader, folder); + g_object_unref (selected_store); + g_free (selected_folder_name); gtk_widget_set_sensitive (GTK_WIDGET (combo_box), TRUE); |