* src/widgets/modest-folder-view.c:
[modest] / src / widgets / modest-folder-view.c
index 02bfd2b..4d854dd 100644 (file)
@@ -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 (TNY_FOLDER(priv->cur_folder_store), FALSE, 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));
 }
@@ -1846,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);
                }
@@ -1964,16 +1955,19 @@ xfer_folder_cb (ModestMailOperation *mail_op,
                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 (helper->folder_view),
+               modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
                                                  new_folder, FALSE);
+       g_object_unref (folder_view);
 }
 
 
@@ -2237,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);
@@ -2518,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;
@@ -2537,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;