X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-folder-view.c;h=34ef4a2bc05be67b7676e657d566b911d5f14836;hp=08da13bb3536d5a680c1ec9566cb70904ced9b6b;hb=d8f5c921672fdba55356fa8487762c75ef468c51;hpb=58800f43b7bbdf5d7b8a62a91f3e115d2b27e0bf diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 08da13b..34ef4a2 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -1069,9 +1069,7 @@ tny_account_store_view_init (gpointer g, gpointer iface_data) { TnyAccountStoreViewIface *klass = (TnyAccountStoreViewIface *)g; - klass->set_account_store_func = modest_folder_view_set_account_store; - - return; + klass->set_account_store = modest_folder_view_set_account_store; } static void @@ -1125,8 +1123,14 @@ modest_folder_view_finalize (GObject *obj) } if (priv->cur_folder_store) { - if (TNY_IS_FOLDER(priv->cur_folder_store)) - tny_folder_sync_async (TNY_FOLDER(priv->cur_folder_store), FALSE, NULL, NULL, NULL); + if (TNY_IS_FOLDER(priv->cur_folder_store)) { + ModestMailOperation *mail_op; + + mail_op = modest_mail_operation_new (NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_sync_folder (mail_op, TNY_FOLDER (priv->cur_folder_store), FALSE); + } g_object_unref (priv->cur_folder_store); priv->cur_folder_store = NULL; @@ -1199,7 +1203,7 @@ on_connection_status_changed (TnyAccount *self, my_window = gtk_widget_get_ancestor (GTK_WIDGET (user_data), MODEST_TYPE_WINDOW); acc_name = modest_tny_account_get_parent_modest_account_name_for_server_account (self); - modest_ui_actions_do_send_receive (acc_name, MODEST_WINDOW (my_window)); + modest_ui_actions_do_send_receive (acc_name, FALSE, MODEST_WINDOW (my_window)); } } @@ -1599,7 +1603,7 @@ modest_folder_view_update_model (ModestFolderView *self, /* FIXME: the local accounts are not shown when the query selects only the subscribed folders */ - model = tny_gtk_folder_store_tree_model_new (NULL); + model = tny_gtk_folder_store_tree_model_new (NULL); /* Get the accounts: */ tny_account_store_get_accounts (TNY_ACCOUNT_STORE(account_store), @@ -1655,11 +1659,6 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) selected = gtk_tree_selection_get_selected (sel, &model, &iter); - /* Notify the display name observers */ - g_signal_emit (G_OBJECT(user_data), - signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0, - NULL); - tree_view = MODEST_FOLDER_VIEW (user_data); if (selected) { @@ -1851,12 +1850,21 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2, TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &parent_folder, -1); if ((parent_type == TNY_FOLDER_TYPE_ROOT) && - TNY_IS_ACCOUNT (parent_folder) && - modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder))) { - cmp1 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type - (TNY_FOLDER (folder1))); - cmp2 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type - (TNY_FOLDER (folder2))); + TNY_IS_ACCOUNT (parent_folder)) { + if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder))) { + cmp1 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type + (TNY_FOLDER (folder1))); + cmp2 = get_cmp_subfolder_type_pos (modest_tny_folder_get_local_or_mmc_folder_type + (TNY_FOLDER (folder2))); + } else if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (parent_folder))) { + if (modest_local_folder_info_get_type (tny_folder_get_name (TNY_FOLDER (folder1))) == TNY_FOLDER_TYPE_ARCHIVE) { + cmp1 = 0; + cmp2 = 1; + } else if (modest_local_folder_info_get_type (tny_folder_get_name (TNY_FOLDER (folder2))) == TNY_FOLDER_TYPE_ARCHIVE) { + cmp1 = 1; + cmp2 = 0; + } + } } g_object_unref (parent_folder); } @@ -1915,6 +1923,7 @@ on_drag_data_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData * } typedef struct _DndHelper { + ModestFolderView *folder_view; gboolean delete_source; GtkTreePath *source_row; GdkDragContext *context; @@ -1925,19 +1934,11 @@ static void dnd_helper_destroyer (DndHelper *helper) { /* Free the helper */ + g_object_unref (helper->folder_view); gtk_tree_path_free (helper->source_row); g_slice_free (DndHelper, helper); } -/* - * This function is the callback of the - * modest_mail_operation_xfer_msgs () and - * modest_mail_operation_xfer_folder() calls. We check here if the - * message/folder was correctly asynchronously transferred. The reason - * to use the same callback is that the code is the same, it only has - * to check that the operation went fine and then finalize the drag - * and drop action - */ static void xfer_cb (ModestMailOperation *mail_op, gpointer user_data) @@ -1962,6 +1963,36 @@ xfer_cb (ModestMailOperation *mail_op, dnd_helper_destroyer (helper); } +static void +xfer_msgs_cb (ModestMailOperation *mail_op, + gpointer user_data) +{ + /* Common part */ + xfer_cb (mail_op, user_data); +} + +static void +xfer_folder_cb (ModestMailOperation *mail_op, + TnyFolder *new_folder, + gpointer user_data) +{ + DndHelper *helper; + GtkWidget *folder_view; + + helper = (DndHelper *) user_data; + folder_view = g_object_ref (helper->folder_view); + + /* Common part */ + xfer_cb (mail_op, user_data); + + /* Select the folder */ + if (new_folder) + modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), + new_folder, FALSE); + g_object_unref (folder_view); +} + + /* get the folder for the row the treepath refers to. */ /* folder must be unref'd */ static TnyFolderStore * @@ -2073,7 +2104,7 @@ drag_and_drop_from_header_view (GtkTreeModel *source_model, headers, folder, helper->delete_source, - xfer_cb, helper); + xfer_msgs_cb, helper); /* Frees */ cleanup: @@ -2088,6 +2119,7 @@ cleanup: typedef struct { TnyFolderStore *src_folder; TnyFolderStore *dst_folder; + ModestFolderView *folder_view; DndHelper *helper; } DndFolderInfo; @@ -2098,6 +2130,8 @@ dnd_folder_info_destroyer (DndFolderInfo *info) g_object_unref (info->src_folder); if (info->dst_folder) g_object_unref (info->dst_folder); + if (info->folder_view) + g_object_unref (info->folder_view); g_slice_free (DndFolderInfo, info); } @@ -2152,9 +2186,12 @@ drag_and_drop_from_folder_view_src_folder_performer (gboolean canceled, TNY_FOLDER (info->src_folder), info->dst_folder, info->helper->delete_source, - xfer_cb, + xfer_folder_cb, info->helper); +/* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view), */ +/* TNY_FOLDER (info->dst_folder), TRUE); */ + g_object_unref (G_OBJECT (mail_op)); } @@ -2176,7 +2213,7 @@ drag_and_drop_from_folder_view_dst_folder_performer (gboolean canceled, } /* Connect to source folder and perform the copy/move */ - modest_platform_connect_if_remote_and_perform (NULL, + modest_platform_connect_if_remote_and_perform (NULL, TRUE, info->src_folder, drag_and_drop_from_folder_view_src_folder_performer, info); @@ -2257,10 +2294,11 @@ drag_and_drop_from_folder_view (GtkTreeModel *source_model, info = g_slice_new (DndFolderInfo); info->src_folder = g_object_ref (folder); info->dst_folder = g_object_ref (dest_folder); + info->folder_view = g_object_ref (helper->folder_view); info->helper = helper; /* Connect to the destination folder and perform the copy/move */ - modest_platform_connect_if_remote_and_perform (GTK_WINDOW (win), + modest_platform_connect_if_remote_and_perform (GTK_WINDOW (win), TRUE, dest_folder, drag_and_drop_from_folder_view_dst_folder_performer, info); @@ -2337,6 +2375,7 @@ on_drag_data_received (GtkWidget *widget, helper->delete_source = delete_source; helper->context = context; helper->time = time; + helper->folder_view = g_object_ref (widget); /* Drags from the header view */ if (source_widget != widget) { @@ -2810,7 +2849,9 @@ find_folder_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *folder_it static void -on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, +on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, + GtkTreePath *path, + GtkTreeIter *iter, ModestFolderView *self) { ModestFolderViewPrivate *priv = NULL; @@ -2854,8 +2895,6 @@ on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, GtkTreePath *pat /* Disable next */ 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));