Mercurial > pidgin
comparison pidgin/gtkutils.c @ 32706:b8a6a07aa5b0
Make code a bit more verbose, and remove some "magic numbers".
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Thu, 29 Dec 2011 04:47:14 +0000 |
parents | b961222cf067 |
children | c7de9dc7c5b3 |
comparison
equal
deleted
inserted
replaced
32705:ef4ffed09e49 | 32706:b8a6a07aa5b0 |
---|---|
73 #if !GTK_CHECK_VERSION(2,18,0) | 73 #if !GTK_CHECK_VERSION(2,18,0) |
74 #define gtk_widget_get_visible(x) GTK_WIDGET_VISIBLE(x) | 74 #define gtk_widget_get_visible(x) GTK_WIDGET_VISIBLE(x) |
75 #define gtk_widget_is_sensitive(x) GTK_WIDGET_IS_SENSITIVE(x) | 75 #define gtk_widget_is_sensitive(x) GTK_WIDGET_IS_SENSITIVE(x) |
76 #endif | 76 #endif |
77 | 77 |
78 enum { | |
79 AOP_ICON_COLUMN, | |
80 AOP_NAME_COLUMN, | |
81 AOP_DATA_COLUMN, | |
82 AOP_COLUMN_COUNT | |
83 }; | |
84 | |
78 typedef struct { | 85 typedef struct { |
79 GtkTreeModel *model; | 86 GtkTreeModel *model; |
80 gint default_item; | 87 gint default_item; |
81 } AopMenu; | 88 } AopMenu; |
82 | 89 |
597 GtkTreeIter iter; | 604 GtkTreeIter iter; |
598 | 605 |
599 g_return_val_if_fail(optmenu != NULL, NULL); | 606 g_return_val_if_fail(optmenu != NULL, NULL); |
600 | 607 |
601 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(optmenu), &iter)) | 608 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(optmenu), &iter)) |
602 gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)), &iter, 2, &data, -1); | 609 gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)), |
610 &iter, AOP_DATA_COLUMN, &data, -1); | |
603 | 611 |
604 return data; | 612 return data; |
605 } | 613 } |
606 | 614 |
607 static void | 615 static void |
664 GtkCellRenderer *cr = NULL; | 672 GtkCellRenderer *cr = NULL; |
665 | 673 |
666 optmenu = gtk_combo_box_new(); | 674 optmenu = gtk_combo_box_new(); |
667 gtk_widget_show(optmenu); | 675 gtk_widget_show(optmenu); |
668 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(optmenu), cr = gtk_cell_renderer_pixbuf_new(), FALSE); | 676 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(optmenu), cr = gtk_cell_renderer_pixbuf_new(), FALSE); |
669 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(optmenu), cr, "pixbuf", 0); | 677 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(optmenu), cr, "pixbuf", AOP_ICON_COLUMN); |
670 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(optmenu), cr = gtk_cell_renderer_text_new(), TRUE); | 678 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(optmenu), cr = gtk_cell_renderer_text_new(), TRUE); |
671 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(optmenu), cr, "text", 1); | 679 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(optmenu), cr, "text", AOP_NAME_COLUMN); |
672 | 680 |
673 aop_option_menu_replace_menu(optmenu, aop_menu); | 681 aop_option_menu_replace_menu(optmenu, aop_menu); |
674 if (aop_menu->default_item == -1) | 682 if (aop_menu->default_item == -1) |
675 gtk_combo_box_set_active(GTK_COMBO_BOX(optmenu), 0); | 683 gtk_combo_box_set_active(GTK_COMBO_BOX(optmenu), 0); |
676 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data); | 684 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data); |
707 GtkTreeIter iter; | 715 GtkTreeIter iter; |
708 GtkListStore *ls; | 716 GtkListStore *ls; |
709 GList *p; | 717 GList *p; |
710 int i; | 718 int i; |
711 | 719 |
712 ls = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); | 720 ls = gtk_list_store_new(AOP_COLUMN_COUNT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); |
713 | 721 |
714 aop_menu = g_malloc0(sizeof(AopMenu)); | 722 aop_menu = g_malloc0(sizeof(AopMenu)); |
715 aop_menu->default_item = -1; | 723 aop_menu->default_item = -1; |
716 aop_menu->model = GTK_TREE_MODEL(ls); | 724 aop_menu->model = GTK_TREE_MODEL(ls); |
717 | 725 |
722 plugin = (PurplePlugin *)p->data; | 730 plugin = (PurplePlugin *)p->data; |
723 | 731 |
724 pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL); | 732 pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL); |
725 | 733 |
726 gtk_list_store_append(ls, &iter); | 734 gtk_list_store_append(ls, &iter); |
727 gtk_list_store_set(ls, &iter, 0, pixbuf, 1, plugin->info->name, 2, plugin->info->id, -1); | 735 gtk_list_store_set(ls, &iter, |
736 AOP_ICON_COLUMN, pixbuf, | |
737 AOP_NAME_COLUMN, plugin->info->name, | |
738 AOP_DATA_COLUMN, plugin->info->id, | |
739 -1); | |
728 | 740 |
729 if (pixbuf) | 741 if (pixbuf) |
730 g_object_unref(pixbuf); | 742 g_object_unref(pixbuf); |
731 | 743 |
732 if (default_proto_id != NULL && !strcmp(plugin->info->id, default_proto_id)) | 744 if (default_proto_id != NULL && !strcmp(plugin->info->id, default_proto_id)) |
771 if (show_all) | 783 if (show_all) |
772 list = purple_accounts_get_all(); | 784 list = purple_accounts_get_all(); |
773 else | 785 else |
774 list = purple_connections_get_all(); | 786 list = purple_connections_get_all(); |
775 | 787 |
776 ls = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); | 788 ls = gtk_list_store_new(AOP_COLUMN_COUNT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); |
777 | 789 |
778 aop_menu = g_malloc0(sizeof(AopMenu)); | 790 aop_menu = g_malloc0(sizeof(AopMenu)); |
779 aop_menu->default_item = -1; | 791 aop_menu->default_item = -1; |
780 aop_menu->model = GTK_TREE_MODEL(ls); | 792 aop_menu->model = GTK_TREE_MODEL(ls); |
781 | 793 |
811 purple_account_get_username(account), | 823 purple_account_get_username(account), |
812 purple_account_get_protocol_name(account)); | 824 purple_account_get_protocol_name(account)); |
813 } | 825 } |
814 | 826 |
815 gtk_list_store_append(ls, &iter); | 827 gtk_list_store_append(ls, &iter); |
816 gtk_list_store_set(ls, &iter, 0, pixbuf, 1, buf, 2, account, -1); | 828 gtk_list_store_set(ls, &iter, |
829 AOP_ICON_COLUMN, pixbuf, | |
830 AOP_NAME_COLUMN, buf, | |
831 AOP_DATA_COLUMN, account, | |
832 -1); | |
817 | 833 |
818 if (pixbuf) | 834 if (pixbuf) |
819 g_object_unref(pixbuf); | 835 g_object_unref(pixbuf); |
820 | 836 |
821 if (default_account && account == default_account) | 837 if (default_account && account == default_account) |
1853 } | 1869 } |
1854 purple_menu_action_free(act); | 1870 purple_menu_action_free(act); |
1855 return menuitem; | 1871 return menuitem; |
1856 } | 1872 } |
1857 | 1873 |
1874 enum { | |
1875 COMPLETION_DISPLAYED_COLUMN, /* displayed completion value */ | |
1876 COMPLETION_BUDDY_COLUMN, /* buddy name */ | |
1877 COMPLETION_NORMALIZED_COLUMN, /* UTF-8 normalized & casefolded buddy name */ | |
1878 COMPLETION_COMPARISON_COLUMN, /* UTF-8 normalized & casefolded value for comparison */ | |
1879 COMPLETION_ACCOUNT_COLUMN, /* account */ | |
1880 COMPLETION_COLUMN_COUNT | |
1881 }; | |
1882 | |
1858 typedef struct | 1883 typedef struct |
1859 { | 1884 { |
1860 GtkWidget *entry; | 1885 GtkWidget *entry; |
1861 GtkWidget *accountopt; | 1886 GtkWidget *accountopt; |
1862 | 1887 |
1872 GtkTreeModel *model; | 1897 GtkTreeModel *model; |
1873 GValue val1; | 1898 GValue val1; |
1874 GValue val2; | 1899 GValue val2; |
1875 const char *tmp; | 1900 const char *tmp; |
1876 | 1901 |
1877 model = gtk_entry_completion_get_model (completion); | 1902 model = gtk_entry_completion_get_model(completion); |
1878 | 1903 |
1879 val1.g_type = 0; | 1904 val1.g_type = 0; |
1880 gtk_tree_model_get_value(model, iter, 2, &val1); | 1905 gtk_tree_model_get_value(model, iter, COMPLETION_NORMALIZED_COLUMN, &val1); |
1881 tmp = g_value_get_string(&val1); | 1906 tmp = g_value_get_string(&val1); |
1882 if (tmp != NULL && purple_str_has_prefix(tmp, key)) | 1907 if (tmp != NULL && purple_str_has_prefix(tmp, key)) |
1883 { | 1908 { |
1884 g_value_unset(&val1); | 1909 g_value_unset(&val1); |
1885 return TRUE; | 1910 return TRUE; |
1886 } | 1911 } |
1887 g_value_unset(&val1); | 1912 g_value_unset(&val1); |
1888 | 1913 |
1889 val2.g_type = 0; | 1914 val2.g_type = 0; |
1890 gtk_tree_model_get_value(model, iter, 3, &val2); | 1915 gtk_tree_model_get_value(model, iter, COMPLETION_COMPARISON_COLUMN, &val2); |
1891 tmp = g_value_get_string(&val2); | 1916 tmp = g_value_get_string(&val2); |
1892 if (tmp != NULL && purple_str_has_prefix(tmp, key)) | 1917 if (tmp != NULL && purple_str_has_prefix(tmp, key)) |
1893 { | 1918 { |
1894 g_value_unset(&val2); | 1919 g_value_unset(&val2); |
1895 return TRUE; | 1920 return TRUE; |
1905 GValue val; | 1930 GValue val; |
1906 GtkWidget *optmenu = data->accountopt; | 1931 GtkWidget *optmenu = data->accountopt; |
1907 PurpleAccount *account; | 1932 PurpleAccount *account; |
1908 | 1933 |
1909 val.g_type = 0; | 1934 val.g_type = 0; |
1910 gtk_tree_model_get_value(model, iter, 1, &val); | 1935 gtk_tree_model_get_value(model, iter, COMPLETION_BUDDY_COLUMN, &val); |
1911 gtk_entry_set_text(GTK_ENTRY(data->entry), g_value_get_string(&val)); | 1936 gtk_entry_set_text(GTK_ENTRY(data->entry), g_value_get_string(&val)); |
1912 g_value_unset(&val); | 1937 g_value_unset(&val); |
1913 | 1938 |
1914 gtk_tree_model_get_value(model, iter, 4, &val); | 1939 gtk_tree_model_get_value(model, iter, COMPLETION_ACCOUNT_COLUMN, &val); |
1915 account = g_value_get_pointer(&val); | 1940 account = g_value_get_pointer(&val); |
1916 g_value_unset(&val); | 1941 g_value_unset(&val); |
1917 | 1942 |
1918 if (account == NULL) | 1943 if (account == NULL) |
1919 return TRUE; | 1944 return TRUE; |
1946 tmp = g_utf8_casefold(tmp2, -1); | 1971 tmp = g_utf8_casefold(tmp2, -1); |
1947 g_free(tmp2); | 1972 g_free(tmp2); |
1948 | 1973 |
1949 gtk_list_store_append(store, &iter); | 1974 gtk_list_store_append(store, &iter); |
1950 gtk_list_store_set(store, &iter, | 1975 gtk_list_store_set(store, &iter, |
1951 0, completion_entry, | 1976 COMPLETION_DISPLAYED_COLUMN, completion_entry, |
1952 1, buddyname, | 1977 COMPLETION_BUDDY_COLUMN, buddyname, |
1953 2, normalized_buddyname, | 1978 COMPLETION_NORMALIZED_COLUMN, normalized_buddyname, |
1954 3, tmp, | 1979 COMPLETION_COMPARISON_COLUMN, tmp, |
1955 4, account, | 1980 COMPLETION_ACCOUNT_COLUMN, account, |
1956 -1); | 1981 -1); |
1957 g_free(completion_entry); | 1982 g_free(completion_entry); |
1958 g_free(tmp); | 1983 g_free(tmp); |
1959 completion_added = TRUE; | 1984 completion_added = TRUE; |
1960 } | 1985 } |
1971 tmp = g_utf8_casefold(tmp2, -1); | 1996 tmp = g_utf8_casefold(tmp2, -1); |
1972 g_free(tmp2); | 1997 g_free(tmp2); |
1973 | 1998 |
1974 gtk_list_store_append(store, &iter); | 1999 gtk_list_store_append(store, &iter); |
1975 gtk_list_store_set(store, &iter, | 2000 gtk_list_store_set(store, &iter, |
1976 0, completion_entry, | 2001 COMPLETION_DISPLAYED_COLUMN, completion_entry, |
1977 1, buddyname, | 2002 COMPLETION_BUDDY_COLUMN, buddyname, |
1978 2, normalized_buddyname, | 2003 COMPLETION_NORMALIZED_COLUMN, normalized_buddyname, |
1979 3, tmp, | 2004 COMPLETION_COMPARISON_COLUMN, tmp, |
1980 4, account, | 2005 COMPLETION_ACCOUNT_COLUMN, account, |
1981 -1); | 2006 -1); |
1982 g_free(completion_entry); | 2007 g_free(completion_entry); |
1983 g_free(tmp); | 2008 g_free(tmp); |
1984 completion_added = TRUE; | 2009 completion_added = TRUE; |
1985 } | 2010 } |
1987 | 2012 |
1988 if (completion_added == FALSE) { | 2013 if (completion_added == FALSE) { |
1989 /* Add the buddy's name. */ | 2014 /* Add the buddy's name. */ |
1990 gtk_list_store_append(store, &iter); | 2015 gtk_list_store_append(store, &iter); |
1991 gtk_list_store_set(store, &iter, | 2016 gtk_list_store_set(store, &iter, |
1992 0, buddyname, | 2017 COMPLETION_DISPLAYED_COLUMN, buddyname, |
1993 1, buddyname, | 2018 COMPLETION_BUDDY_COLUMN, buddyname, |
1994 2, normalized_buddyname, | 2019 COMPLETION_NORMALIZED_COLUMN, normalized_buddyname, |
1995 3, NULL, | 2020 COMPLETION_COMPARISON_COLUMN, NULL, |
1996 4, account, | 2021 COMPLETION_ACCOUNT_COLUMN, account, |
1997 -1); | 2022 -1); |
1998 } | 2023 } |
1999 | 2024 |
2000 g_free(normalized_buddyname); | 2025 g_free(normalized_buddyname); |
2001 } | 2026 } |
2089 GtkListStore *store; | 2114 GtkListStore *store; |
2090 | 2115 |
2091 GtkEntryCompletion *completion; | 2116 GtkEntryCompletion *completion; |
2092 | 2117 |
2093 data = g_new0(PidginCompletionData, 1); | 2118 data = g_new0(PidginCompletionData, 1); |
2094 store = gtk_list_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); | 2119 store = gtk_list_store_new(COMPLETION_COLUMN_COUNT, G_TYPE_STRING, |
2120 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, | |
2121 G_TYPE_POINTER); | |
2095 | 2122 |
2096 data->entry = entry; | 2123 data->entry = entry; |
2097 data->accountopt = accountopt; | 2124 data->accountopt = accountopt; |
2098 if (filter_func == NULL) { | 2125 if (filter_func == NULL) { |
2099 data->filter_func = pidgin_screenname_autocomplete_default_filter; | 2126 data->filter_func = pidgin_screenname_autocomplete_default_filter; |
2106 | 2133 |
2107 add_completion_list(data); | 2134 add_completion_list(data); |
2108 | 2135 |
2109 /* Sort the completion list by buddy name */ | 2136 /* Sort the completion list by buddy name */ |
2110 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), | 2137 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), |
2111 1, GTK_SORT_ASCENDING); | 2138 COMPLETION_BUDDY_COLUMN, |
2139 GTK_SORT_ASCENDING); | |
2112 | 2140 |
2113 completion = gtk_entry_completion_new(); | 2141 completion = gtk_entry_completion_new(); |
2114 gtk_entry_completion_set_match_func(completion, buddyname_completion_match_func, NULL, NULL); | 2142 gtk_entry_completion_set_match_func(completion, buddyname_completion_match_func, NULL, NULL); |
2115 | 2143 |
2116 g_signal_connect(G_OBJECT(completion), "match-selected", | 2144 g_signal_connect(G_OBJECT(completion), "match-selected", |
2120 g_object_unref(completion); | 2148 g_object_unref(completion); |
2121 | 2149 |
2122 gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(store)); | 2150 gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(store)); |
2123 g_object_unref(store); | 2151 g_object_unref(store); |
2124 | 2152 |
2125 gtk_entry_completion_set_text_column(completion, 0); | 2153 gtk_entry_completion_set_text_column(completion, COMPLETION_DISPLAYED_COLUMN); |
2126 | 2154 |
2127 purple_signal_connect(purple_connections_get_handle(), "signed-on", entry, | 2155 purple_signal_connect(purple_connections_get_handle(), "signed-on", entry, |
2128 PURPLE_CALLBACK(repopulate_autocomplete), data); | 2156 PURPLE_CALLBACK(repopulate_autocomplete), data); |
2129 purple_signal_connect(purple_connections_get_handle(), "signed-off", entry, | 2157 purple_signal_connect(purple_connections_get_handle(), "signed-off", entry, |
2130 PURPLE_CALLBACK(repopulate_autocomplete), data); | 2158 PURPLE_CALLBACK(repopulate_autocomplete), data); |