comparison finch/gntblist.c @ 22178:b0bce463aa4e

Remember the selected grouping option.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Tue, 22 Jan 2008 21:13:11 +0000
parents 71d0761fe572
children 8509419a666c
comparison
equal deleted inserted replaced
22177:71d0761fe572 22178:b0bce463aa4e
532 if (ggblist) 532 if (ggblist)
533 return; 533 return;
534 534
535 ggblist = g_new0(FinchBlist, 1); 535 ggblist = g_new0(FinchBlist, 1);
536 list->ui_data = ggblist; 536 list->ui_data = ggblist;
537 ggblist->manager = &default_manager; 537 ggblist->manager = finch_blist_manager_find(purple_prefs_get_string(PREF_ROOT "/grouping"));
538 if (!ggblist->manager)
539 ggblist->manager = &default_manager;
538 } 540 }
539 541
540 static void 542 static void
541 add_buddy_cb(void *data, PurpleRequestFields *allfields) 543 add_buddy_cb(void *data, PurpleRequestFields *allfields)
542 { 544 {
1908 1910
1909 static void 1911 static void
1910 redraw_blist(const char *name, PurplePrefType type, gconstpointer val, gpointer data) 1912 redraw_blist(const char *name, PurplePrefType type, gconstpointer val, gpointer data)
1911 { 1913 {
1912 PurpleBlistNode *node, *sel; 1914 PurpleBlistNode *node, *sel;
1913 if (ggblist == NULL || ggblist->window == NULL) 1915 FinchBlistManager *manager;
1916
1917 if (ggblist == NULL)
1918 return;
1919
1920 manager = finch_blist_manager_find(purple_prefs_get_string(PREF_ROOT "/grouping"));
1921 if (manager == NULL)
1922 manager = &default_manager;
1923 if (ggblist->manager != manager) {
1924 ggblist->manager = manager;
1925 if (manager->can_add_node == NULL)
1926 manager->can_add_node = default_can_add_node;
1927 if (manager->find_parent == NULL)
1928 manager->find_parent = default_find_parent;
1929 if (manager->create_tooltip == NULL)
1930 manager->create_tooltip = default_create_tooltip;
1931 }
1932
1933 if (ggblist->window == NULL)
1914 return; 1934 return;
1915 1935
1916 sel = gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)); 1936 sel = gnt_tree_get_selection_data(GNT_TREE(ggblist->tree));
1917 gnt_tree_remove_all(GNT_TREE(ggblist->tree)); 1937 gnt_tree_remove_all(GNT_TREE(ggblist->tree));
1918 node = purple_blist_get_root(); 1938 node = purple_blist_get_root();
1947 purple_prefs_add_int(PREF_ROOT "/position/y", 0); 1967 purple_prefs_add_int(PREF_ROOT "/position/y", 0);
1948 purple_prefs_add_bool(PREF_ROOT "/idletime", TRUE); 1968 purple_prefs_add_bool(PREF_ROOT "/idletime", TRUE);
1949 purple_prefs_add_bool(PREF_ROOT "/showoffline", FALSE); 1969 purple_prefs_add_bool(PREF_ROOT "/showoffline", FALSE);
1950 purple_prefs_add_bool(PREF_ROOT "/emptygroups", FALSE); 1970 purple_prefs_add_bool(PREF_ROOT "/emptygroups", FALSE);
1951 purple_prefs_add_string(PREF_ROOT "/sort_type", "text"); 1971 purple_prefs_add_string(PREF_ROOT "/sort_type", "text");
1972 purple_prefs_add_string(PREF_ROOT "/grouping", "default");
1952 1973
1953 purple_prefs_connect_callback(finch_blist_get_handle(), 1974 purple_prefs_connect_callback(finch_blist_get_handle(),
1954 PREF_ROOT "/emptygroups", redraw_blist, NULL); 1975 PREF_ROOT "/emptygroups", redraw_blist, NULL);
1955 purple_prefs_connect_callback(finch_blist_get_handle(), 1976 purple_prefs_connect_callback(finch_blist_get_handle(),
1956 PREF_ROOT "/showoffline", redraw_blist, NULL); 1977 PREF_ROOT "/showoffline", redraw_blist, NULL);
1957 purple_prefs_connect_callback(finch_blist_get_handle(), 1978 purple_prefs_connect_callback(finch_blist_get_handle(),
1958 PREF_ROOT "/sort_type", redraw_blist, NULL); 1979 PREF_ROOT "/sort_type", redraw_blist, NULL);
1980 purple_prefs_connect_callback(finch_blist_get_handle(),
1981 PREF_ROOT "/grouping", redraw_blist, NULL);
1959 1982
1960 purple_signal_connect(purple_connections_get_handle(), "signed-on", purple_blist_get_handle(), 1983 purple_signal_connect(purple_connections_get_handle(), "signed-on", purple_blist_get_handle(),
1961 G_CALLBACK(account_signed_on_cb), NULL); 1984 G_CALLBACK(account_signed_on_cb), NULL);
1962 1985
1963 finch_blist_install_manager(&default_manager); 1986 finch_blist_install_manager(&default_manager);
2583 2606
2584 static void 2607 static void
2585 menu_group_set_cb(GntMenuItem *item, gpointer null) 2608 menu_group_set_cb(GntMenuItem *item, gpointer null)
2586 { 2609 {
2587 const char *id = g_object_get_data(G_OBJECT(item), "grouping-id"); 2610 const char *id = g_object_get_data(G_OBJECT(item), "grouping-id");
2588 FinchBlistManager *manager; 2611 purple_prefs_set_string(PREF_ROOT "/grouping", id);
2589
2590 manager = finch_blist_manager_find(id);
2591 if (!manager)
2592 return;
2593
2594 ggblist->manager = manager;
2595 if (ggblist->manager->can_add_node == NULL)
2596 ggblist->manager->can_add_node = default_can_add_node;
2597 if (ggblist->manager->find_parent == NULL)
2598 ggblist->manager->find_parent = default_find_parent;
2599 if (ggblist->manager->create_tooltip == NULL)
2600 ggblist->manager->create_tooltip = default_create_tooltip;
2601
2602 redraw_blist(NULL, 0, NULL, NULL);
2603 } 2612 }
2604 2613
2605 static void 2614 static void
2606 create_menu(void) 2615 create_menu(void)
2607 { 2616 {
2851 void finch_blist_install_manager(const FinchBlistManager *manager) 2860 void finch_blist_install_manager(const FinchBlistManager *manager)
2852 { 2861 {
2853 if (!g_list_find(managers, manager)) { 2862 if (!g_list_find(managers, manager)) {
2854 managers = g_list_append(managers, (gpointer)manager); 2863 managers = g_list_append(managers, (gpointer)manager);
2855 reconstruct_grouping_menu(); 2864 reconstruct_grouping_menu();
2865 if (strcmp(manager->id, purple_prefs_get_string(PREF_ROOT "/grouping")) == 0)
2866 purple_prefs_trigger_callback(PREF_ROOT "/grouping");
2856 } 2867 }
2857 } 2868 }
2858 2869
2859 void finch_blist_uninstall_manager(const FinchBlistManager *manager) 2870 void finch_blist_uninstall_manager(const FinchBlistManager *manager)
2860 { 2871 {
2861 if (g_list_find(managers, manager)) { 2872 if (g_list_find(managers, manager)) {
2862 managers = g_list_remove(managers, manager); 2873 managers = g_list_remove(managers, manager);
2863 reconstruct_grouping_menu(); 2874 reconstruct_grouping_menu();
2875 if (strcmp(manager->id, purple_prefs_get_string(PREF_ROOT "/grouping")) == 0)
2876 purple_prefs_trigger_callback(PREF_ROOT "/grouping");
2864 } 2877 }
2865 } 2878 }
2866 2879
2867 FinchBlistManager * finch_blist_manager_find(const char *id) 2880 FinchBlistManager * finch_blist_manager_find(const char *id)
2868 { 2881 {