Changeset 1788

Show
Ignore:
Timestamp:
04/13/07 17:56:13
Author:
pvanhoof
Message:

Bugfixes and tests for the mergefolder

Files:

Legend:

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

    r1787 r1788  
    486486 
    487487        return; 
     488} 
     489 
     490TnyFolder* 
     491tny_merge_folder_new (void) 
     492{ 
     493        TnyMergeFolder *self = g_object_new (TNY_TYPE_MERGE_FOLDER, NULL); 
     494 
     495        return TNY_FOLDER (self); 
     496 
    488497} 
    489498 
     
    569578        object_class = (GObjectClass*) klass; 
    570579        object_class->finalize = tny_merge_folder_finalize; 
     580 
     581        g_type_class_add_private (object_class, sizeof (TnyMergeFolderPriv)); 
     582 
    571583} 
    572584 
  • trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c

    r1730 r1788  
    671671} 
    672672 
    673 static void 
    674 tny_gtk_folder_store_tree_model_folder_obsr_update (TnyFolderObserver *self, TnyFolderChange *change) 
    675 
     673typedef struct { 
     674        TnyFolderObserver *self; 
     675        TnyFolderChange *change; 
     676} FolObsUpInfo; 
     677 
     678static gboolean 
     679folder_obsr_update_idle (gpointer user_data) 
     680
     681        FolObsUpInfo *info = user_data; 
     682        TnyFolderObserver *self = info->self; 
     683        TnyFolderChange *change = info->change; 
    676684        TnyFolderChangeChanged changed = tny_folder_change_get_changed (change); 
    677685        GtkTreeModel *model = GTK_TREE_MODEL (self); 
    678686        TnyGtkFolderStoreTreeModel *me = (TnyGtkFolderStoreTreeModel *) self; 
    679687 
     688 
    680689        if (changed & TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME || 
    681690                changed & TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT ||  
    682691                changed & TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT) 
    683692        { 
     693                gdk_threads_enter (); 
    684694                gtk_tree_model_foreach (model, updater, change); 
    685         } 
    686 
    687  
    688  
    689  
    690 static void 
    691 tny_gtk_folder_store_tree_model_store_obsr_update (TnyFolderStoreObserver *self, TnyFolderStoreChange *change) 
    692 
     695                gdk_threads_leave (); 
     696        } 
     697 
     698        g_object_unref (self); 
     699        g_object_unref (change); 
     700 
     701        g_slice_free (FolObsUpInfo, info); 
     702 
     703        return FALSE; 
     704
     705 
     706static void 
     707tny_gtk_folder_store_tree_model_folder_obsr_update (TnyFolderObserver *self, TnyFolderChange *change) 
     708
     709        FolObsUpInfo *info = g_slice_new (FolObsUpInfo); 
     710        info->self = TNY_FOLDER_OBSERVER (g_object_ref (self)); 
     711        info->change = TNY_FOLDER_CHANGE (g_object_ref (change)); 
     712 
     713        g_timeout_add (0, folder_obsr_update_idle, info); 
     714 
     715        return; 
     716
     717 
     718 
     719typedef struct { 
     720        TnyFolderObserver *self; 
     721        TnyFolderStoreChange *change; 
     722} FolStObsUpInfo; 
     723 
     724static gboolean 
     725folder_store_obsr_update_idle (gpointer user_data) 
     726
     727        FolStObsUpInfo *info = user_data; 
     728        TnyFolderObserver *self = info->self; 
     729        TnyFolderStoreChange *change = info->change; 
    693730        TnyFolderStoreChangeChanged changed = tny_folder_store_change_get_changed (change); 
    694731        GtkTreeModel *model = GTK_TREE_MODEL (self); 
     
    764801                g_object_unref (G_OBJECT (removed)); 
    765802        } 
     803 
     804 
     805        g_object_unref (self); 
     806        g_object_unref (change); 
     807 
     808        g_slice_free (FolStObsUpInfo, info); 
     809 
     810        return FALSE; 
     811} 
     812 
     813static void 
     814tny_gtk_folder_store_tree_model_store_obsr_update (TnyFolderStoreObserver *self, TnyFolderStoreChange *change) 
     815{ 
     816        FolStObsUpInfo *info = g_slice_new (FolStObsUpInfo); 
     817        info->self = TNY_FOLDER_OBSERVER (g_object_ref (self)); 
     818        info->change = TNY_FOLDER_STORE_CHANGE (g_object_ref (change)); 
     819 
     820        g_timeout_add (0, folder_store_obsr_update_idle, info); 
     821 
     822        return; 
    766823} 
    767824 
  • trunk/tests/c-demo/tny-demoui-summary-view.c

    r1783 r1788  
    6565#include <tny-summary-view.h> 
    6666#include <tny-account-store-view.h> 
     67#include <tny-merge-folder.h> 
    6768 
    6869#define GO_ONLINE_TXT _("Go online") 
     
    922923} 
    923924 
     925 
     926static void  
     927on_merge_view_activate (GtkMenuItem *mitem, gpointer user_data) 
     928{ 
     929        TnyDemouiSummaryView *self = user_data; 
     930        TnyDemouiSummaryViewPriv *priv = TNY_DEMOUI_SUMMARY_VIEW_GET_PRIVATE (self); 
     931        GtkTreeModel *model, *hmodel; 
     932        GtkTreeModel *sortable; 
     933        GList *list; 
     934        TnyFolder *merge = tny_merge_folder_new (); 
     935        GtkTreeView *header_view = GTK_TREE_VIEW (priv->header_view); 
     936 
     937        list = gtk_tree_selection_get_selected_rows (priv->mailbox_select, &model); 
     938 
     939        while (list) 
     940        { 
     941                GtkTreePath *path = list->data; 
     942                GtkTreeIter iter; 
     943                TnyFolder *folder; 
     944 
     945                gtk_tree_model_get_iter (model, &iter, path); 
     946                gtk_tree_model_get (model, &iter,  
     947                        TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     948                        &folder, -1); 
     949 
     950                if (folder && TNY_IS_FOLDER (folder)) 
     951                { 
     952                        tny_merge_folder_add_folder (TNY_MERGE_FOLDER (merge), folder); 
     953                        g_object_unref (folder); 
     954                } 
     955 
     956                gtk_tree_path_free (path); 
     957                list = g_list_next (list); 
     958        } 
     959 
     960        hmodel = tny_gtk_header_list_model_new (); 
     961        tny_gtk_header_list_model_set_folder (TNY_GTK_HEADER_LIST_MODEL (hmodel),  
     962                merge, FALSE); 
     963 
     964 
     965        sortable = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (hmodel)); 
     966 
     967        gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sortable), 
     968                TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_COLUMN, 
     969                tny_gtk_header_list_model_received_date_sort_func,  
     970                NULL, NULL); 
     971 
     972        gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sortable), 
     973                TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_COLUMN, 
     974                tny_gtk_header_list_model_sent_date_sort_func,  
     975                NULL, NULL); 
     976 
     977        set_header_view_model (header_view, sortable); 
     978 
     979        g_list_free (list); 
     980} 
     981 
    924982static void 
    925983header_view_do_popup_menu (GtkWidget *my_widget, GdkEventButton *event, gpointer user_data) 
     
    9741032{ 
    9751033        GtkWidget *menu; 
    976         GtkWidget *mrename, *mdelete, *mcreate
     1034        GtkWidget *mrename, *mdelete, *mcreate, *mmerge
    9771035        int button, event_time; 
    9781036 
    9791037        menu = gtk_menu_new (); 
    980         //g_signal_connect (menu, "deactivate", G_CALLBACK (gtk_widget_destroy), NULL); 
    9811038 
    9821039        mrename = gtk_menu_item_new_with_label (_("Rename folder")); 
    9831040        mcreate = gtk_menu_item_new_with_label (_("Create folder")); 
    9841041        mdelete = gtk_menu_item_new_with_label (_("Delete folder")); 
     1042        mmerge = gtk_menu_item_new_with_label (_("Merge view of selected")); 
    9851043 
    9861044        g_signal_connect (G_OBJECT (mrename), "activate", 
     
    9901048        g_signal_connect (G_OBJECT (mdelete), "activate", 
    9911049                G_CALLBACK (on_delete_folder_activate), user_data); 
     1050        g_signal_connect (G_OBJECT (mmerge), "activate", 
     1051                G_CALLBACK (on_merge_view_activate), user_data); 
    9921052 
    9931053        gtk_menu_prepend (menu, mrename); 
    9941054        gtk_menu_prepend (menu, mcreate); 
    9951055        gtk_menu_prepend (menu, mdelete); 
     1056        gtk_menu_prepend (menu, mmerge); 
    9961057 
    9971058        gtk_widget_show (mrename); 
    9981059        gtk_widget_show (mcreate); 
    9991060        gtk_widget_show (mdelete); 
    1000  
     1061        gtk_widget_show (mmerge); 
    10011062 
    10021063        if (event)