Changeset 1988

Show
Ignore:
Timestamp:
05/17/07 01:05:50
Author:
pvanhoof
Message:

Bugfixes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libtinymail-camel/tny-camel-folder.c

    r1987 r1988  
    9494        { 
    9595                TnyFolderStoreObserver *observer = TNY_FOLDER_STORE_OBSERVER (tny_iterator_get_current (iter)); 
     96 
    9697                tny_folder_store_observer_update (observer, change); 
    9798                g_object_unref (G_OBJECT (observer)); 
     
    15511552        TnyStoreAccount *acc_to, *acc_from; 
    15521553        TnyCamelFolderPriv *fpriv = TNY_CAMEL_FOLDER_GET_PRIVATE (folder); 
    1553         TnyCamelFolderPriv *tpriv = TNY_CAMEL_FOLDER_GET_PRIVATE (into); 
    15541554        TnyList *headers; 
    15551555 
     
    15571557 
    15581558        g_static_rec_mutex_lock (fpriv->folder_lock); 
    1559         g_static_rec_mutex_lock (tpriv->folder_lock); 
    15601559 
    15611560        load_folder_no_lock (fpriv); 
    1562         load_folder_no_lock (tpriv); 
    15631561 
    15641562        retval = tny_folder_store_create_folder (into, new_name, &nerr); 
     
    15691567        } 
    15701568 
    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)); */ 
    15731571 
    15741572        if (TNY_IS_FOLDER_STORE (folder)) 
     
    16191617        } 
    16201618 
    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  
    16261619        headers = tny_simple_list_new (); 
    16271620        tny_folder_get_headers (folder, headers, TRUE, &nerr); 
     
    16491642        g_object_unref (acc_to); 
    16501643 
     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        } 
    16511652 
    16521653exception: 
     
    16551656                g_propagate_error (err, nerr); 
    16561657 
    1657         g_static_rec_mutex_unlock (tpriv->folder_lock); 
    16581658        g_static_rec_mutex_unlock (fpriv->folder_lock); 
    16591659 
     
    18361836                        rems = recurse_evt (self, a_store, 
    18371837                                rems, g_list_prepend, TRUE); 
    1838                          
    18391838 
    18401839                        /* This does a g_rename on the mmap()ed file! */ 
     
    19001899                        g_propagate_error (err, nerr); 
    19011900                        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                        } 
    19021909                } 
    19031910 
  • trunk/libtinymail/tny-folder.c

    r1984 r1988  
    296296 * newly created folder in @into, which will carry the name @new_name. 
    297297 * 
     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 *  
    298313 * Implementors: The return value must be the new folder in @into carrying the  
    299314 * 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  
    707707                gdk_threads_leave (); 
    708708        } 
     709        return FALSE; 
     710} 
     711 
     712static void  
     713folder_obsr_update_idle_destroy (gpointer user_data) 
     714{ 
     715        FolObsUpInfo *info = user_data; 
     716        TnyFolderObserver *self = info->self; 
     717        TnyFolderChange *change = info->change; 
    709718 
    710719        g_object_unref (self); 
    711720        g_object_unref (change); 
    712  
    713721        g_slice_free (FolObsUpInfo, info); 
    714  
    715         return FALSE; 
    716722} 
    717723 
     
    723729        info->change = TNY_FOLDER_CHANGE (g_object_ref (change)); 
    724730 
    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); 
    726734 
    727735        return; 
     
    815823 
    816824 
     825        return FALSE; 
     826} 
     827 
     828static void 
     829folder_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 
    817835        g_object_unref (self); 
    818836        g_object_unref (change); 
    819837 
    820838        g_slice_free (FolStObsUpInfo, info); 
    821  
    822         return FALSE; 
    823839} 
    824840 
     
    830846        info->change = TNY_FOLDER_STORE_CHANGE (g_object_ref (change)); 
    831847 
    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); 
    833851 
    834852        return; 
  • trunk/tests/c-demo/tny-demoui-summary-view.c

    r1987 r1988  
    167167 
    168168static void  
    169 reload_accounts (TnyDemouiSummaryViewPriv *priv) 
    170 
    171         TnyAccountStore *account_store = priv->account_store; 
    172         GtkTreeModel *sortable, *maccounts, *mailbox_model; 
    173         TnyFolderStoreQuery *query; 
    174  
     169clear_header_view (TnyDemouiSummaryViewPriv *priv) 
     170
    175171        g_mutex_lock (priv->monitor_lock); 
    176172        { 
     
    185181        g_mutex_unlock (priv->monitor_lock); 
    186182 
     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 
     192static void  
     193reload_accounts (TnyDemouiSummaryViewPriv *priv) 
     194{ 
     195        TnyAccountStore *account_store = priv->account_store; 
     196        GtkTreeModel *sortable, *maccounts, *mailbox_model; 
     197        TnyFolderStoreQuery *query; 
     198 
     199 
    187200        /* Show only subscribed folders */ 
    188201        query = tny_folder_store_query_new (); 
     
    204217        maccounts = tny_gtk_account_list_model_new (); 
    205218 
    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); 
    212221 
    213222        if (priv->current_accounts) 
     
    856865                                        GError *err = NULL; 
    857866                                        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); 
    860874 
    861875                                        if (err != NULL)