Mercurial > pidgin
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 { |