Changeset 1651
- Timestamp:
- 02/17/07 00:03:18
- Files:
-
- trunk/libtinymail/tny-folder-change.h (modified) (1 diff)
- trunk/libtinymail/tny-folder-store-change.h (modified) (1 diff)
- trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c (modified) (9 diffs)
- trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.h (modified) (1 diff)
- trunk/tests/c-demo/tny-demoui-summary-view.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymail/tny-folder-change.h
r1649 r1651 43 43 enum _TnyFolderChangeChanged 44 44 { 45 TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT ,46 TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT ,47 TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS ,48 TNY_FOLDER_CHANGE_CHANGED_REMOVED_HEADERS ,49 TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME 45 TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT = 1<<1, 46 TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT = 1<<2, 47 TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS = 1<<3, 48 TNY_FOLDER_CHANGE_CHANGED_REMOVED_HEADERS = 1<<4, 49 TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME = 1<<5 50 50 }; 51 51 trunk/libtinymail/tny-folder-store-change.h
r1649 r1651 43 43 enum _TnyFolderStoreChangeChanged 44 44 { 45 TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS ,46 TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS 45 TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS = 1<<1, 46 TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS = 1<<2 47 47 }; 48 48 trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c
r1650 r1651 75 75 TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 76 76 tny_folder_get_unread_count (TNY_FOLDER (folder)), 77 TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 78 tny_folder_get_all_count (TNY_FOLDER (folder)), 77 79 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 78 80 tny_folder_get_folder_type (TNY_FOLDER (folder)), … … 137 139 TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 138 140 tny_folder_get_unread_count (TNY_FOLDER (folder)), 141 TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 142 tny_folder_get_all_count (TNY_FOLDER (folder)), 139 143 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 140 144 tny_folder_get_folder_type (TNY_FOLDER (folder)), … … 176 180 TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, root_name, 177 181 TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 0, 182 TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 0, 178 183 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, TNY_FOLDER_TYPE_ROOT, 179 184 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, … … 308 313 GtkTreeStore *store = (GtkTreeStore*) instance; 309 314 TnyGtkFolderStoreTreeModel *me = (TnyGtkFolderStoreTreeModel*) instance; 310 static GType types[] = { G_TYPE_STRING, G_TYPE_UINT, G_TYPE_ INT, G_TYPE_OBJECT };315 static GType types[] = { G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_OBJECT }; 311 316 312 317 me->iterator_lock = g_mutex_new (); … … 527 532 } 528 533 529 static void530 tny_gtk_folder_store_tree_model_store_obsr_update (TnyFolderStoreObserver *self, TnyFolderStoreChange *change)531 {532 TnyFolderStoreChangeChanged changed = tny_folder_store_change_get_changed (change);533 534 if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS)535 {536 }537 538 if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS)539 {540 }541 }542 534 543 535 typedef void (*pernodeexec) (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data1, gpointer user_data2); … … 582 574 TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 583 575 tny_folder_get_unread_count (TNY_FOLDER (folder)), 576 TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 577 tny_folder_get_all_count (TNY_FOLDER (folder)), 584 578 -1); 585 579 } … … 591 585 } 592 586 587 588 static void 589 creater (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data1, gpointer user_data2) 590 { 591 gint type; 592 TnyFolderStoreChange *change = user_data1; 593 TnyFolderStore *parentstore = tny_folder_store_change_get_folder_store (change); 594 595 gtk_tree_model_get (model, iter, 596 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 597 &type, -1); 598 599 if (type != TNY_FOLDER_TYPE_ROOT) 600 { 601 TnyFolderStore *fol; 602 603 gtk_tree_model_get (model, iter, 604 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 605 &fol, -1); 606 607 if (fol == parentstore) 608 { 609 TnyList *created = tny_simple_list_new (); 610 TnyIterator *miter; 611 612 tny_folder_store_change_get_created_folders (change, created); 613 miter = tny_list_create_iterator (created); 614 615 while (!tny_iterator_is_done (miter)) 616 { 617 GtkTreeIter newiter; 618 TnyFolder *folder = TNY_FOLDER (tny_iterator_get_current (miter)); 619 620 gtk_tree_store_append (GTK_TREE_STORE (model), &newiter, iter); 621 622 gtk_tree_store_set (GTK_TREE_STORE (model), &newiter, 623 TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, 624 tny_folder_get_name (TNY_FOLDER (folder)), 625 TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 626 tny_folder_get_unread_count (TNY_FOLDER (folder)), 627 TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 628 tny_folder_get_all_count (TNY_FOLDER (folder)), 629 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 630 tny_folder_get_folder_type (TNY_FOLDER (folder)), 631 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 632 folder, -1); 633 634 g_object_unref (G_OBJECT (folder)); 635 636 tny_iterator_next (miter); 637 } 638 639 g_object_unref (G_OBJECT (miter)); 640 g_object_unref (G_OBJECT (created)); 641 642 } 643 644 g_object_unref (G_OBJECT (fol)); 645 } 646 647 g_object_unref (G_OBJECT (parentstore)); 648 } 649 650 651 652 static void 653 deleter (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data1, gpointer user_data2) 654 { 655 gint type; 656 TnyFolderStoreChange *change = user_data1; 657 TnyFolderStore *parentstore = tny_folder_store_change_get_folder_store (change); 658 659 gtk_tree_model_get (model, iter, 660 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 661 &type, -1); 662 663 if (type != TNY_FOLDER_TYPE_ROOT) 664 { 665 TnyFolderStore *fol; 666 667 gtk_tree_model_get (model, iter, 668 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 669 &fol, -1); 670 671 if (fol == parentstore) 672 { 673 TnyList *removed = tny_simple_list_new (); 674 TnyIterator *miter; 675 676 tny_folder_store_change_get_removed_folders (change, removed); 677 miter = tny_list_create_iterator (removed); 678 679 while (!tny_iterator_is_done (miter)) 680 { 681 GtkTreeIter kids; 682 TnyFolder *folder = TNY_FOLDER (tny_iterator_get_current (miter)); 683 684 if (gtk_tree_model_iter_children (model, &kids, iter)) 685 while (gtk_tree_model_iter_next (model, &kids)) 686 { 687 gint ntype; 688 gtk_tree_model_get (model, &kids, 689 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 690 &ntype, -1); 691 692 if (ntype != TNY_FOLDER_TYPE_ROOT) 693 { 694 TnyFolder *nfol; 695 gtk_tree_model_get (model, &kids, 696 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 697 &nfol, -1); 698 699 if (nfol == folder) 700 gtk_tree_store_remove (GTK_TREE_STORE (model), &kids); 701 702 g_object_unref (G_OBJECT (nfol)); 703 } 704 } 705 g_object_unref (G_OBJECT (folder)); 706 707 tny_iterator_next (miter); 708 } 709 710 g_object_unref (G_OBJECT (miter)); 711 g_object_unref (G_OBJECT (removed)); 712 713 } 714 715 g_object_unref (G_OBJECT (fol)); 716 } 717 718 g_object_unref (G_OBJECT (parentstore)); 719 } 720 593 721 static void 594 722 tny_gtk_folder_store_tree_model_folder_obsr_update (TnyFolderObserver *self, TnyFolderChange *change) … … 597 725 GtkTreeModel *model = GTK_TREE_MODEL (self); 598 726 599 600 727 if (changed & TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME || 601 /* changed & TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT || */728 changed & TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT || 602 729 changed & TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT) 603 730 { 604 const gchar *oldname, *newname;605 731 GtkTreeIter iter; 606 607 732 if (gtk_tree_model_get_iter_first (model, &iter)) 608 733 foreach_node_execute (model, &iter, updater, change, NULL); 609 610 } 611 734 } 735 } 736 737 738 static void 739 tny_gtk_folder_store_tree_model_store_obsr_update (TnyFolderStoreObserver *self, TnyFolderStoreChange *change) 740 { 741 TnyFolderStoreChangeChanged changed = tny_folder_store_change_get_changed (change); 742 GtkTreeModel *model = GTK_TREE_MODEL (self); 743 744 if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS) 745 { 746 GtkTreeIter iter; 747 if (gtk_tree_model_get_iter_first (model, &iter)) 748 foreach_node_execute (model, &iter, creater, change, NULL); 749 } 750 751 if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS) 752 { 753 GtkTreeIter iter; 754 if (gtk_tree_model_get_iter_first (model, &iter)) 755 foreach_node_execute (model, &iter, deleter, change, NULL); 756 } 612 757 } 613 758 … … 700 845 { TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN", "name" }, 701 846 { TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN", "unread" }, 847 { TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN", "all" }, 702 848 { TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN", "type" }, 703 849 { TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN", "instance" }, trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.h
r1649 r1651 49 49 TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, 50 50 TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 51 TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 51 52 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 52 53 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, trunk/tests/c-demo/tny-demoui-summary-view.c
r1649 r1651 729 729 on_delete_folder_activate (GtkMenuItem *mitem, gpointer user_data) 730 730 { 731 731 TnyDemouiSummaryView *self = user_data; 732 TnyDemouiSummaryViewPriv *priv = TNY_DEMOUI_SUMMARY_VIEW_GET_PRIVATE (self); 733 GtkTreeIter iter; 734 GtkTreeModel *model; 735 736 if (gtk_tree_selection_get_selected (priv->mailbox_select, &model, &iter)) 737 { 738 gint type; 739 740 gtk_tree_model_get (model, &iter, 741 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 742 &type, -1); 743 744 if (type != TNY_FOLDER_TYPE_ROOT) 745 { 746 TnyFolder *folder; 747 GtkWidget *dialog, *label; 748 gint result; 749 750 gtk_tree_model_get (model, &iter, 751 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 752 &folder, -1); 753 754 dialog = gtk_dialog_new_with_buttons (_("Delete a folder"), 755 GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 756 GTK_DIALOG_MODAL, 757 GTK_STOCK_OK, 758 GTK_RESPONSE_ACCEPT, 759 GTK_STOCK_CANCEL, 760 GTK_RESPONSE_REJECT, 761 NULL); 762 763 label = gtk_label_new (_("Are you sure you want to delete this folder?")); 764 gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); 765 gtk_widget_show (label); 766 767 result = gtk_dialog_run (GTK_DIALOG (dialog)); 768 769 switch (result) 770 { 771 case GTK_RESPONSE_ACCEPT: 772 { 773 GError *err = NULL; 774 TnyFolderStore *folderstore = tny_folder_get_folder_store (folder); 775 776 tny_folder_store_remove_folder (folderstore, folder, &err); 777 778 if (err != NULL) 779 { 780 GtkWidget *edialog = gtk_message_dialog_new ( 781 GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 782 GTK_DIALOG_DESTROY_WITH_PARENT, 783 GTK_MESSAGE_ERROR, 784 GTK_BUTTONS_CLOSE, 785 err->message); 786 gtk_widget_show_all (edialog); 787 g_error_free (err); 788 } 789 790 g_object_unref (G_OBJECT (folderstore)); 791 } 792 break; 793 794 default: 795 break; 796 } 797 gtk_widget_destroy (dialog); 798 g_object_unref (G_OBJECT (folder)); 799 } 800 801 } 732 802 } 733 803 … … 735 805 on_create_folder_activate (GtkMenuItem *mitem, gpointer user_data) 736 806 { 737 807 TnyDemouiSummaryView *self = user_data; 808 TnyDemouiSummaryViewPriv *priv = TNY_DEMOUI_SUMMARY_VIEW_GET_PRIVATE (self); 809 GtkTreeIter iter; 810 GtkTreeModel *model; 811 812 if (gtk_tree_selection_get_selected (priv->mailbox_select, &model, &iter)) 813 { 814 gint type; 815 816 gtk_tree_model_get (model, &iter, 817 TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 818 &type, -1); 819 820 if (type != TNY_FOLDER_TYPE_ROOT) 821 { 822 TnyFolderStore *folderstore; 823 GtkWidget *dialog, *entry; 824 gint result; 825 826 gtk_tree_model_get (model, &iter, 827 TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 828 &folderstore, -1); 829 830 dialog = gtk_dialog_new_with_buttons (_("Create a folder"), 831 GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 832 GTK_DIALOG_MODAL, 833 GTK_STOCK_OK, 834 GTK_RESPONSE_ACCEPT, 835 GTK_STOCK_CANCEL, 836 GTK_RESPONSE_REJECT, 837 NULL); 838 839 entry = gtk_entry_new (); 840 gtk_entry_set_text (GTK_ENTRY (entry), _("New folder")); 841 gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry); 842 gtk_widget_show (entry); 843 844 result = gtk_dialog_run (GTK_DIALOG (dialog)); 845 846 switch (result) 847 { 848 case GTK_RESPONSE_ACCEPT: 849 { 850 GError *err = NULL; 851 const gchar *newname = gtk_entry_get_text (GTK_ENTRY (entry)); 852 853 tny_folder_store_create_folder (folderstore, newname, &err); 854 855 if (err != NULL) 856 { 857 GtkWidget *edialog = gtk_message_dialog_new ( 858 GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 859 GTK_DIALOG_DESTROY_WITH_PARENT, 860 GTK_MESSAGE_ERROR, 861 GTK_BUTTONS_CLOSE, 862 err->message); 863 gtk_widget_show_all (edialog); 864 g_error_free (err); 865 } 866 } 867 break; 868 869 default: 870 break; 871 } 872 gtk_widget_destroy (dialog); 873 g_object_unref (G_OBJECT (folderstore)); 874 } 875 876 } 738 877 } 739 878 … … 803 942 G_CALLBACK (on_rename_folder_activate), user_data); 804 943 g_signal_connect (G_OBJECT (mcreate), "activate", 805 G_CALLBACK (on_ rename_folder_activate), user_data);944 G_CALLBACK (on_create_folder_activate), user_data); 806 945 g_signal_connect (G_OBJECT (mdelete), "activate", 807 946 G_CALLBACK (on_delete_folder_activate), user_data);
