Changeset 2915
- Timestamp:
- 11/07/07 03:27:46
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymail-camel/tny-camel-folder.c (modified) (10 diffs)
- trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r2913 r2915 1 2007-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 1 6 2007-11-06 Philip Van Hoof <pvanhoof@gnome.org> 2 7 trunk/libtinymail-camel/tny-camel-folder.c
r2907 r2915 2927 2927 notify_folder_observers_about_copy (GList *adds, GList *rems, gboolean del, gboolean in_idle) 2928 2928 { 2929 if (rems) 2930 { 2929 2931 rems = g_list_first (rems); 2930 2932 while (rems) … … 2955 2957 } 2956 2958 g_list_free (rems); 2957 2959 } 2960 2961 if (adds) 2962 { 2958 2963 adds = g_list_first (adds); 2964 2959 2965 while (adds) 2960 2966 { … … 2965 2971 2966 2972 if (TNY_IS_CAMEL_STORE_ACCOUNT (evt->str)) { 2967 if (in_idle) 2973 if (in_idle) { 2968 2974 notify_folder_store_observers_about_for_store_acc_in_idle (evt->str, change); 2969 else2975 } else { 2970 2976 notify_folder_store_observers_about_for_store_acc (evt->str, change); 2977 } 2971 2978 } else { 2972 if (in_idle) 2979 if (in_idle) { 2973 2980 notify_folder_store_observers_about_in_idle (evt->str, change); 2974 else2981 } else { 2975 2982 notify_folder_store_observers_about (evt->str, change); 2983 } 2976 2984 } 2977 2985 g_object_unref (change); … … 2981 2989 } 2982 2990 g_list_free (adds); 2983 2984 2985 return;2991 } 2992 2993 return; 2986 2994 } 2987 2995 … … 3076 3084 succeeded = TRUE; 3077 3085 3078 if ( was_new)3086 if (TRUE || was_new) 3079 3087 { 3080 3088 CamelStore *store = priv->store; … … 3093 3101 if (succeeded) { 3094 3102 TnyCamelFolderPriv *rpriv = TNY_CAMEL_FOLDER_GET_PRIVATE (retval); 3103 rpriv->loaded = 0; 3095 3104 _tny_camel_folder_set_folder_info (TNY_FOLDER_STORE (a), 3096 3105 TNY_CAMEL_FOLDER (retval), iter); … … 3205 3214 GError *nerr = NULL; 3206 3215 CpyRecRet *cpyr; 3216 TnyFolderStore *orig_store; 3207 3217 3208 3218 if (!_tny_session_check_operation (TNY_FOLDER_PRIV_GET_SESSION(priv), … … 3210 3220 TNY_FOLDER_ERROR_COPY)) 3211 3221 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); 3212 3235 3213 3236 cpyr = tny_camel_folder_copy_shared (self, into, new_name, del, &nerr, rems, adds); … … 3344 3367 GError *nerr = NULL; 3345 3368 CpyRecRet *cpyr; 3369 TnyFolderStore *orig_store = NULL; 3346 3370 3347 3371 g_static_rec_mutex_lock (priv->folder_lock); … … 3353 3377 info, "Copying folder"); 3354 3378 3379 3355 3380 info->adds = NULL; 3356 3381 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); 3367 3403 3368 3404 info->cancelled = camel_operation_cancel_check (apriv->cancel); trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c
r2904 r2915 858 858 } 859 859 860 861 860 static 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 861 foreach_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) 867 894 { 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); 890 929 } 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; 901 941 } 902 942 … … 948 988 949 989 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); 997 991 998 992 if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS)
