aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamon Chaplin <damon@ximian.com>2001-10-24 04:44:58 +0800
committerDamon Chaplin <damon@src.gnome.org>2001-10-24 04:44:58 +0800
commitda7687116d1225786cca781daa8c8875170d1325 (patch)
tree5b9d7f9bb975968dff67410b2c23bace2ec8a077
parentc1c8b61ad7d9f3324b28e9704b07d698f1a948ed (diff)
downloadgsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.tar
gsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.tar.gz
gsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.tar.bz2
gsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.tar.lz
gsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.tar.xz
gsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.tar.zst
gsoc2013-evolution-da7687116d1225786cca781daa8c8875170d1325.zip
save the UTF-8 strings inside the listitem widgets, but convert to the
2001-10-23 Damon Chaplin <damon@ximian.com> * e-cell-combo.c (e_cell_combo_set_popdown_strings): save the UTF-8 strings inside the listitem widgets, but convert to the locale to use in the label. (e_cell_combo_select_matching_item): (e_cell_combo_update_cell): use the UTF-8 strings instead of the listitem labels. Hopefully fixes bug #7037. svn path=/trunk/; revision=13954
-rw-r--r--widgets/table/e-cell-combo.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/widgets/table/e-cell-combo.c b/widgets/table/e-cell-combo.c
index 7a6a0c29b6..0eb3eb914b 100644
--- a/widgets/table/e-cell-combo.c
+++ b/widgets/table/e-cell-combo.c
@@ -65,6 +65,9 @@
/* The height to make the popup list if there aren't any items in it. */
#define E_CELL_COMBO_LIST_EMPTY_HEIGHT 15
+/* The object data key used to store the UTF-8 text of the popup list items. */
+#define E_CELL_COMBO_UTF8_KEY "UTF-8-TEXT"
+
static void e_cell_combo_class_init (GtkObjectClass *object_class);
static void e_cell_combo_init (ECellCombo *ecc);
@@ -212,9 +215,23 @@ e_cell_combo_set_popdown_strings (ECellCombo *ecc,
gtk_list_clear_items (GTK_LIST (ecc->popup_list), 0, -1);
elem = strings;
while (elem) {
- listitem = gtk_list_item_new_with_label ((gchar *) elem->data);
+ char *utf8_text = elem->data;
+
+ /* We store a copy of the UTF-8 text as data inside the
+ listitem, but convert it to the current locale to go in
+ the listitem widget. */
+ char *locale_text = e_utf8_to_locale_string (utf8_text);
+
+ listitem = gtk_list_item_new_with_label (locale_text);
+ g_free (locale_text);
+
gtk_widget_show (listitem);
gtk_container_add (GTK_CONTAINER (ecc->popup_list), listitem);
+
+ gtk_object_set_data_full (GTK_OBJECT (listitem),
+ E_CELL_COMBO_UTF8_KEY,
+ g_strdup (utf8_text), g_free);
+
elem = elem->next;
}
}
@@ -262,7 +279,7 @@ e_cell_combo_select_matching_item (ECellCombo *ecc)
ETableItem *eti = E_TABLE_ITEM (ecp->popup_cell_view->cell_view.e_table_item_view);
ETableCol *ecol;
GtkList *list;
- GtkWidget *listitem, *label;
+ GtkWidget *listitem;
GList *elem;
gboolean found = FALSE;
char *cell_text, *list_item_text;
@@ -275,10 +292,12 @@ e_cell_combo_select_matching_item (ECellCombo *ecc)
elem = list->children;
while (elem) {
listitem = GTK_WIDGET (elem->data);
- label = GTK_BIN (listitem)->child;
- gtk_label_get (GTK_LABEL (label), &list_item_text);
- if (!strcmp (list_item_text, cell_text)) {
+ /* We need to compare against the UTF-8 text. */
+ list_item_text = gtk_object_get_data (GTK_OBJECT (listitem),
+ E_CELL_COMBO_UTF8_KEY);
+
+ if (list_item_text && !strcmp (list_item_text, cell_text)) {
found = TRUE;
gtk_list_select_child (list, listitem);
gtk_widget_grab_focus (listitem);
@@ -587,7 +606,9 @@ e_cell_combo_update_cell (ECellCombo *ecc)
/* Get the text of the selected item. */
listitem = list->selection->data;
- gtk_label_get (GTK_LABEL (GTK_BIN (listitem)->child), &text);
+ text = gtk_object_get_data (GTK_OBJECT (listitem),
+ E_CELL_COMBO_UTF8_KEY);
+ g_return_if_fail (text != NULL);
/* Compare it with the existing cell contents. */
ecol = e_table_header_get_column (eti->header, ecp->popup_view_col);