X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-folder-view.c;h=4d854dd7e0efee7afa78c64c46d0add7a27bbe0a;hp=08da13bb3536d5a680c1ec9566cb70904ced9b6b;hb=fcda0cb59d66b903b0c1364a451a377b56202a7b;hpb=58800f43b7bbdf5d7b8a62a91f3e115d2b27e0bf diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 08da13b..4d854dd 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; @@ -1188,22 +1192,6 @@ modest_folder_view_set_account_store (TnyAccountStoreView *self, TnyAccountStore } static void -on_connection_status_changed (TnyAccount *self, - TnyConnectionStatus status, - gpointer user_data) -{ - /* If the account becomes online then refresh it */ - if (status == TNY_CONNECTION_STATUS_CONNECTED) { - const gchar *acc_name; - GtkWidget *my_window; - - 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)); - } -} - -static void on_account_inserted (TnyAccountStore *account_store, TnyAccount *account, gpointer user_data) @@ -1234,12 +1222,6 @@ on_account_inserted (TnyAccountStore *account_store, tny_list_append (TNY_LIST (gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model))), G_OBJECT (account)); - - /* When the store account gets online refresh it */ - g_signal_connect (account, "connection_status_changed", - G_CALLBACK (on_connection_status_changed), - MODEST_FOLDER_VIEW (user_data)); - /* Refilter the model */ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); } @@ -1599,7 +1581,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 +1637,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 +1828,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 +1901,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 +1912,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 +1941,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 +2082,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 +2097,7 @@ cleanup: typedef struct { TnyFolderStore *src_folder; TnyFolderStore *dst_folder; + ModestFolderView *folder_view; DndHelper *helper; } DndFolderInfo; @@ -2098,6 +2108,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 +2164,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 +2191,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); @@ -2216,8 +2231,8 @@ drag_and_drop_from_folder_view (GtkTreeModel *source_model, forbidden = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; } else if (TNY_IS_FOLDER_STORE(folder)) { /* enable local root as destination for folders */ - if (!MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (folder) - && TNY_IS_ACCOUNT (folder)) + if (!MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (folder) && + !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (folder))) forbidden = TRUE; } g_object_unref (folder); @@ -2257,10 +2272,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 +2353,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) { @@ -2495,9 +2512,9 @@ on_drag_motion (GtkWidget *widget, /* Expand the selected row after 1/2 second */ if (!gtk_tree_view_row_expanded (GTK_TREE_VIEW (widget), dest_row)) { - gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), dest_row, pos); priv->timer_expander = g_timeout_add (500, expand_row_timeout, widget); } + gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), dest_row, pos); /* Select the desired action. By default we pick MOVE */ suggested_action = GDK_ACTION_MOVE; @@ -2514,8 +2531,9 @@ on_drag_motion (GtkWidget *widget, out: if (folder) g_object_unref (folder); - if (dest_row) + if (dest_row) { gtk_tree_path_free (dest_row); + } g_signal_stop_emission_by_name (widget, "drag-motion"); return valid_location; @@ -2810,7 +2828,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 +2874,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));