Changeset 2915

Show
Ignore:
Timestamp:
11/07/07 03:27:46
Author:
pvanhoof
Message:

2007-11-07 Philip Van Hoof <pvanhoof@gnome.org>

folders around into newly created folder

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r2913 r2915  
     12007-11-07  Philip Van Hoof  <pvanhoof@gnome.org> 
     2 
     3        * Some problems fixed in TnyGtkFolderStoreTreeModel when moving 
     4        folders around into newly created folders 
     5 
    162007-11-06  Philip Van Hoof  <pvanhoof@gnome.org> 
    27 
  • trunk/libtinymail-camel/tny-camel-folder.c

    r2907 r2915  
    29272927notify_folder_observers_about_copy (GList *adds, GList *rems, gboolean del, gboolean in_idle) 
    29282928{ 
     2929 if (rems)  
     2930 { 
    29292931        rems = g_list_first (rems); 
    29302932        while (rems) 
     
    29552957        } 
    29562958        g_list_free (rems); 
    2957  
     2959 } 
     2960 
     2961 if (adds) 
     2962 { 
    29582963        adds = g_list_first (adds); 
     2964 
    29592965        while (adds) 
    29602966        { 
     
    29652971 
    29662972                if (TNY_IS_CAMEL_STORE_ACCOUNT (evt->str)) { 
    2967                         if (in_idle) 
     2973                        if (in_idle) { 
    29682974                                notify_folder_store_observers_about_for_store_acc_in_idle (evt->str, change); 
    2969                         else 
     2975                        } else { 
    29702976                                notify_folder_store_observers_about_for_store_acc (evt->str, change); 
     2977                        } 
    29712978                } else { 
    2972                         if (in_idle) 
     2979                        if (in_idle) { 
    29732980                                notify_folder_store_observers_about_in_idle (evt->str, change); 
    2974                         else 
     2981                        } else { 
    29752982                                notify_folder_store_observers_about (evt->str, change); 
     2983                        } 
    29762984                } 
    29772985                g_object_unref (change); 
     
    29812989        } 
    29822990        g_list_free (adds); 
    2983  
    2984  
    2985        return; 
     2991 } 
     2992 
     2993 return; 
    29862994} 
    29872995 
     
    30763084                                succeeded = TRUE; 
    30773085 
    3078                                 if (was_new) 
     3086                                if (TRUE || was_new) 
    30793087                                { 
    30803088                                        CamelStore *store = priv->store; 
     
    30933101                                        if (succeeded) { 
    30943102                                                TnyCamelFolderPriv *rpriv = TNY_CAMEL_FOLDER_GET_PRIVATE (retval); 
     3103                                                rpriv->loaded = 0; 
    30953104                                                _tny_camel_folder_set_folder_info (TNY_FOLDER_STORE (a),  
    30963105                                                        TNY_CAMEL_FOLDER (retval), iter); 
     
    32053214        GError *nerr = NULL; 
    32063215        CpyRecRet *cpyr; 
     3216        TnyFolderStore *orig_store; 
    32073217 
    32083218        if (!_tny_session_check_operation (TNY_FOLDER_PRIV_GET_SESSION(priv),  
     
    32103220                        TNY_FOLDER_ERROR_COPY)) 
    32113221                return NULL; 
     3222 
     3223        orig_store = tny_folder_get_folder_store (self); 
     3224 
     3225        /* If the caller is trying to move the folder to the location where it 
     3226         * already is, we'll just return self ... */ 
     3227 
     3228        if (orig_store && orig_store == into && !camel_strstrcase (new_name, tny_folder_get_name (self))) { 
     3229                g_object_unref (orig_store); 
     3230                return TNY_FOLDER (g_object_ref (self)); 
     3231        } 
     3232 
     3233        if (orig_store) 
     3234                g_object_unref (orig_store); 
    32123235 
    32133236        cpyr = tny_camel_folder_copy_shared (self, into, new_name, del, &nerr, rems, adds); 
     
    33443367        GError *nerr = NULL; 
    33453368        CpyRecRet *cpyr; 
     3369        TnyFolderStore *orig_store = NULL; 
    33463370 
    33473371        g_static_rec_mutex_lock (priv->folder_lock); 
     
    33533377                                                  info, "Copying folder"); 
    33543378 
     3379 
    33553380        info->adds = NULL;  
    33563381        info->rems = NULL; 
    3357  
    3358         cpyr = tny_camel_folder_copy_shared (info->self, info->into,  
    3359                         info->new_name, info->delete_originals, &nerr,  
    3360                         info->rems, info->adds); 
    3361  
    3362         info->new_folder = cpyr->created; 
    3363         info->rems = cpyr->rems; 
    3364         info->adds = cpyr->adds; 
    3365  
    3366         g_slice_free (CpyRecRet, cpyr); 
     3382        info->new_folder = NULL; 
     3383 
     3384        /* If the caller is trying to move the folder to the location where it 
     3385         * already is, we'll just do nothing  ... */ 
     3386 
     3387        orig_store = tny_folder_get_folder_store (self); 
     3388        if (!(orig_store && orig_store == info->into && !camel_strstrcase (info->new_name, tny_folder_get_name (self)))) 
     3389        { 
     3390                cpyr = tny_camel_folder_copy_shared (info->self, info->into,  
     3391                                info->new_name, info->delete_originals, &nerr,  
     3392                                info->rems, info->adds); 
     3393 
     3394                info->new_folder = cpyr->created; 
     3395                info->rems = cpyr->rems; 
     3396                info->adds = cpyr->adds; 
     3397 
     3398                g_slice_free (CpyRecRet, cpyr); 
     3399        } 
     3400 
     3401        if (orig_store) 
     3402                g_object_unref (orig_store); 
    33673403 
    33683404        info->cancelled = camel_operation_cancel_check (apriv->cancel); 
  • trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c

    r2904 r2915  
    858858} 
    859859 
    860  
    861860static gboolean 
    862 find_store_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *f, gpointer user_data) 
    863 
    864         /* Finding the iter for a given folder */ 
    865  
    866         do 
     861foreach_if_store_add_created (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *in_iter, gpointer user_data) 
     862
     863        TnyGtkFolderStoreTreeModel *me = (TnyGtkFolderStoreTreeModel*) model; 
     864        TnyFolderStore *fol = NULL; 
     865        gboolean found = FALSE; 
     866        const gchar *mid = NULL, *sid = NULL; 
     867        TnyFolderStoreChange *change = (TnyFolderStoreChange *) user_data; 
     868        TnyFolderStore *parent_store; 
     869        GtkTreeIter iter; 
     870 
     871        if (!gtk_tree_model_get_iter (model, &iter, path)) { 
     872                g_warning ("Internal state of the TnyGtkFolderStoreTreeModel is corrupted\n"); 
     873                return FALSE; 
     874        } 
     875 
     876        parent_store = tny_folder_store_change_get_folder_store (change); 
     877        gtk_tree_model_get (model, &iter,  
     878                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     879                &fol, -1); 
     880 
     881        if (fol == parent_store) 
     882                found = TRUE; 
     883 
     884        if (!found) { 
     885                if (fol && TNY_IS_FOLDER (fol)) 
     886                        mid = tny_folder_get_id (TNY_FOLDER (fol)); 
     887                if (parent_store && TNY_IS_FOLDER (parent_store)) 
     888                        sid = tny_folder_get_id (TNY_FOLDER (parent_store)); 
     889                if (sid && mid && !strcmp (sid, mid)) 
     890                        found = TRUE; 
     891        } 
     892 
     893        if (found)  
    867894        { 
    868                 GtkTreeIter child; 
    869                 TnyFolderType type = TNY_FOLDER_TYPE_UNKNOWN; 
    870                 TnyFolderStore *fol; 
    871                 gboolean found = FALSE; 
    872  
    873                 gtk_tree_model_get (model, iter,  
    874                         TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
    875                         &type, -1); 
    876  
    877                 gtk_tree_model_get (model, iter,  
    878                         TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
    879                         &fol, -1); 
    880                  
    881                 if (fol == user_data) 
    882                         found = TRUE; 
    883                  
    884                 if (fol) 
    885                         g_object_unref (fol); 
    886  
    887                 if (found) { 
    888                         *f = *iter; 
    889                         return TRUE; 
     895                TnyList *created = tny_simple_list_new (); 
     896                TnyIterator *miter; 
     897 
     898                tny_folder_store_change_get_created_folders (change, created); 
     899                miter = tny_list_create_iterator (created); 
     900 
     901                while (!tny_iterator_is_done (miter)) 
     902                { 
     903                        GtkTreeIter newiter; 
     904                        TnyFolder *folder = TNY_FOLDER (tny_iterator_get_current (miter)); 
     905 
     906                        me->folder_observables = g_list_prepend (me->folder_observables, folder); 
     907                        me->store_observables = g_list_prepend (me->store_observables, folder); 
     908 
     909                        gtk_tree_store_append (GTK_TREE_STORE (model), &newiter, &iter); 
     910 
     911                        /* This adds a reference count to folder_store too. When it gets  
     912                           removed, that reference count is decreased automatically by  
     913                           the gtktreestore infrastructure. */ 
     914 
     915                        gtk_tree_store_set (GTK_TREE_STORE (model), &newiter, 
     916                                TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN,  
     917                                tny_folder_get_name (TNY_FOLDER (folder)), 
     918                                TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN,  
     919                                tny_folder_get_unread_count (TNY_FOLDER (folder)), 
     920                                TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN,  
     921                                tny_folder_get_all_count (TNY_FOLDER (folder)), 
     922                                TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 
     923                                tny_folder_get_folder_type (TNY_FOLDER (folder)), 
     924                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 
     925                                folder, -1); 
     926 
     927                        g_object_unref (folder); 
     928                        tny_iterator_next (miter); 
    890929                } 
    891  
    892                 if (gtk_tree_model_iter_children (model, &child, iter)) 
    893                 { 
    894                         if (find_store_iter (model, &child, f, user_data)) 
    895                                 return TRUE; 
    896                 } 
    897  
    898         } while (gtk_tree_model_iter_next (model, iter)); 
    899  
    900         return FALSE; 
     930                g_object_unref (miter); 
     931                g_object_unref (created); 
     932        } 
     933 
     934        if (fol) 
     935                g_object_unref (fol); 
     936 
     937        if (parent_store) 
     938                g_object_unref (parent_store); 
     939 
     940        return found; 
    901941} 
    902942 
     
    948988 
    949989        if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS) 
    950         { 
    951                 TnyFolderStore *parentstore = tny_folder_store_change_get_folder_store (change); 
    952                 GtkTreeIter first, iter; 
    953  
    954                 if (gtk_tree_model_get_iter_first (model, &first) &&  
    955                         find_store_iter (model, &first, &iter, parentstore)) 
    956                 { 
    957                         TnyList *created = tny_simple_list_new (); 
    958                         TnyIterator *miter; 
    959  
    960                         tny_folder_store_change_get_created_folders (change, created); 
    961                         miter = tny_list_create_iterator (created); 
    962  
    963                         while (!tny_iterator_is_done (miter)) 
    964                         { 
    965                                 GtkTreeIter newiter; 
    966                                 TnyFolder *folder = TNY_FOLDER (tny_iterator_get_current (miter)); 
    967  
    968                                 me->folder_observables = g_list_prepend (me->folder_observables, folder); 
    969                                 me->store_observables = g_list_prepend (me->store_observables, folder); 
    970  
    971                                 gtk_tree_store_append (GTK_TREE_STORE (model), &newiter, &iter); 
    972  
    973                                 /* This adds a reference count to folder_store too. When it gets  
    974                                    removed, that reference count is decreased automatically by  
    975                                    the gtktreestore infrastructure. */ 
    976  
    977                                 gtk_tree_store_set (GTK_TREE_STORE (model), &newiter, 
    978                                         TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN,  
    979                                         tny_folder_get_name (TNY_FOLDER (folder)), 
    980                                         TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN,  
    981                                         tny_folder_get_unread_count (TNY_FOLDER (folder)), 
    982                                         TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN,  
    983                                         tny_folder_get_all_count (TNY_FOLDER (folder)), 
    984                                         TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 
    985                                         tny_folder_get_folder_type (TNY_FOLDER (folder)), 
    986                                         TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 
    987                                         folder, -1); 
    988  
    989                                 g_object_unref (folder); 
    990                                 tny_iterator_next (miter); 
    991                         } 
    992                         g_object_unref (miter); 
    993                         g_object_unref (created); 
    994                 } 
    995                 g_object_unref (parentstore); 
    996         } 
     990                gtk_tree_model_foreach (model, foreach_if_store_add_created, change); 
    997991 
    998992        if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS)