Changeset 1988
- Timestamp:
- 05/17/07 01:05:50
- Files:
-
- trunk/libtinymail-camel/tny-camel-folder.c (modified) (9 diffs)
- trunk/libtinymail/tny-folder.c (modified) (1 diff)
- trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c (modified) (4 diffs)
- trunk/tests/c-demo/tny-demoui-summary-view.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymail-camel/tny-camel-folder.c
r1987 r1988 94 94 { 95 95 TnyFolderStoreObserver *observer = TNY_FOLDER_STORE_OBSERVER (tny_iterator_get_current (iter)); 96 96 97 tny_folder_store_observer_update (observer, change); 97 98 g_object_unref (G_OBJECT (observer)); … … 1551 1552 TnyStoreAccount *acc_to, *acc_from; 1552 1553 TnyCamelFolderPriv *fpriv = TNY_CAMEL_FOLDER_GET_PRIVATE (folder); 1553 TnyCamelFolderPriv *tpriv = TNY_CAMEL_FOLDER_GET_PRIVATE (into);1554 1554 TnyList *headers; 1555 1555 … … 1557 1557 1558 1558 g_static_rec_mutex_lock (fpriv->folder_lock); 1559 g_static_rec_mutex_lock (tpriv->folder_lock);1560 1559 1561 1560 load_folder_no_lock (fpriv); 1562 load_folder_no_lock (tpriv);1563 1561 1564 1562 retval = tny_folder_store_create_folder (into, new_name, &nerr); … … 1569 1567 } 1570 1568 1571 tny_debug ("recurse_copy: adding to adds: %s\n", tny_folder_get_name (retval));1572 adds = g_list_append (adds, cpy_event_new (TNY_FOLDER_STORE (into), retval));1569 /* tny_debug ("recurse_copy: adding to adds: %s\n", tny_folder_get_name (retval)); 1570 * adds = g_list_append (adds, cpy_event_new (TNY_FOLDER_STORE (into), retval)); */ 1573 1571 1574 1572 if (TNY_IS_FOLDER_STORE (folder)) … … 1619 1617 } 1620 1618 1621 a_store = tny_folder_get_folder_store (folder);1622 tny_debug ("recurse_copy: prepending to rems: %s\n", tny_folder_get_name (folder));1623 rems = g_list_append (rems, cpy_event_new (a_store, folder));1624 g_object_unref (a_store);1625 1626 1619 headers = tny_simple_list_new (); 1627 1620 tny_folder_get_headers (folder, headers, TRUE, &nerr); … … 1649 1642 g_object_unref (acc_to); 1650 1643 1644 if (del) 1645 { 1646 a_store = tny_folder_get_folder_store (folder); 1647 /* tny_debug ("recurse_copy: prepending to rems: %s\n", tny_folder_get_name (folder)); 1648 rems = g_list_append (rems, cpy_event_new (a_store, folder)); */ 1649 tny_folder_store_remove_folder (a_store, folder, &nerr); 1650 g_object_unref (a_store); 1651 } 1651 1652 1652 1653 exception: … … 1655 1656 g_propagate_error (err, nerr); 1656 1657 1657 g_static_rec_mutex_unlock (tpriv->folder_lock);1658 1658 g_static_rec_mutex_unlock (fpriv->folder_lock); 1659 1659 … … 1836 1836 rems = recurse_evt (self, a_store, 1837 1837 rems, g_list_prepend, TRUE); 1838 1839 1838 1840 1839 /* This does a g_rename on the mmap()ed file! */ … … 1900 1899 g_propagate_error (err, nerr); 1901 1900 g_error_free (nerr); 1901 } else if (del) { 1902 TnyFolderStore *from = tny_folder_get_folder_store (self); 1903 tny_folder_store_remove_folder (from, self, &nerr); 1904 g_object_unref (from); 1905 if (nerr != NULL) { 1906 g_propagate_error (err, nerr); 1907 g_error_free (nerr); 1908 } 1902 1909 } 1903 1910 trunk/libtinymail/tny-folder.c
r1984 r1988 296 296 * newly created folder in @into, which will carry the name @new_name. 297 297 * 298 * Very important note: 299 * When you are moving @self to @into by setting @del to true, you MUST make 300 * sure that @self is not used anymore. For example if you have gotten its 301 * headers using tny_folder_get_headers, you need to get rid of those first. 302 * In case you used a default component like the TnyGtkHeaderListModel or 303 * TnyGtkHeaderListTree as TnyList for storing the headers in, you can easily 304 * get rid if your headers by setting the model of the GtkTreeView to an empty 305 * one. You MUST NOT try to keep using it further (as the original folder, its 306 * memory caches and it's offline on-disk cache will have been removed 307 * permanently behind your back). Especially the memory caches will get you in 308 * severe problems, like segmentation errors when trying to access the now 309 * invalid TnyHeader's properties. This is a design decision and can't be fixed 310 * (it's not a bug): a removed folder is permanently destroyed. Moving a folder 311 * is the same as removing it and creating a new one. 312 * 298 313 * Implementors: The return value must be the new folder in @into carrying the 299 314 * name @new_name. Invoking the tny_folder_get_folder_store API on the return trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c
r1920 r1988 707 707 gdk_threads_leave (); 708 708 } 709 return FALSE; 710 } 711 712 static void 713 folder_obsr_update_idle_destroy (gpointer user_data) 714 { 715 FolObsUpInfo *info = user_data; 716 TnyFolderObserver *self = info->self; 717 TnyFolderChange *change = info->change; 709 718 710 719 g_object_unref (self); 711 720 g_object_unref (change); 712 713 721 g_slice_free (FolObsUpInfo, info); 714 715 return FALSE;716 722 } 717 723 … … 723 729 info->change = TNY_FOLDER_CHANGE (g_object_ref (change)); 724 730 725 g_timeout_add (0, folder_obsr_update_idle, info); 731 g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, 732 folder_obsr_update_idle, info, 733 folder_obsr_update_idle_destroy); 726 734 727 735 return; … … 815 823 816 824 825 return FALSE; 826 } 827 828 static void 829 folder_store_obsr_update_idle_destroy (gpointer user_data) 830 { 831 FolStObsUpInfo *info = user_data; 832 TnyFolderObserver *self = info->self; 833 TnyFolderStoreChange *change = info->change; 834 817 835 g_object_unref (self); 818 836 g_object_unref (change); 819 837 820 838 g_slice_free (FolStObsUpInfo, info); 821 822 return FALSE;823 839 } 824 840 … … 830 846 info->change = TNY_FOLDER_STORE_CHANGE (g_object_ref (change)); 831 847 832 g_timeout_add (0, folder_store_obsr_update_idle, info); 848 g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, 849 folder_store_obsr_update_idle, info, 850 folder_store_obsr_update_idle_destroy); 833 851 834 852 return; trunk/tests/c-demo/tny-demoui-summary-view.c
r1987 r1988 167 167 168 168 static void 169 reload_accounts (TnyDemouiSummaryViewPriv *priv) 170 { 171 TnyAccountStore *account_store = priv->account_store; 172 GtkTreeModel *sortable, *maccounts, *mailbox_model; 173 TnyFolderStoreQuery *query; 174 169 clear_header_view (TnyDemouiSummaryViewPriv *priv) 170 { 175 171 g_mutex_lock (priv->monitor_lock); 176 172 { … … 185 181 g_mutex_unlock (priv->monitor_lock); 186 182 183 184 /* Clear the header_view by giving it an empty model */ 185 if (G_UNLIKELY (!empty_model)) 186 empty_model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING)); 187 set_header_view_model (GTK_TREE_VIEW (priv->header_view), empty_model); 188 189 tny_msg_view_clear (priv->msg_view); 190 } 191 192 static void 193 reload_accounts (TnyDemouiSummaryViewPriv *priv) 194 { 195 TnyAccountStore *account_store = priv->account_store; 196 GtkTreeModel *sortable, *maccounts, *mailbox_model; 197 TnyFolderStoreQuery *query; 198 199 187 200 /* Show only subscribed folders */ 188 201 query = tny_folder_store_query_new (); … … 204 217 maccounts = tny_gtk_account_list_model_new (); 205 218 206 /* Clear the header_view by giving it an empty model */ 207 if (G_UNLIKELY (!empty_model)) 208 empty_model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING)); 209 set_header_view_model (GTK_TREE_VIEW (priv->header_view), empty_model); 210 211 tny_msg_view_clear (priv->msg_view); 219 220 clear_header_view (priv); 212 221 213 222 if (priv->current_accounts) … … 856 865 GError *err = NULL; 857 866 const gchar *newname = gtk_entry_get_text (GTK_ENTRY (entry)); 858 TnyFolderStore *into = tny_folder_get_folder_store (folder); 859 TnyFolder *nfol = tny_folder_copy (folder, into, newname, move, &err); 867 TnyFolderStore *into; 868 TnyFolder *nfol; 869 870 clear_header_view (priv); 871 872 into = tny_folder_get_folder_store (folder); 873 nfol = tny_folder_copy (folder, into, newname, move, &err); 860 874 861 875 if (err != NULL)
