Set selected entry in country selector every time string is requested
[modest] / src / hildon2 / modest-country-picker.c
index a05fcf8..8e986a5 100644 (file)
@@ -169,9 +169,13 @@ parse_mcc_mapping_line (const char* line,  char** country)
        tab = g_utf8_strrchr (line, -1, '\t');
        *country = g_utf8_find_next_char (tab, NULL);
 
-       /* Replace by end of string */
-       final = g_utf8_strrchr (tab, g_utf8_strlen (tab, 100) + 1, '\n');
-       *final = '\0';
+       /* Replace by end of string. We need to use strlen, because
+          g_utf8_strrchr expects bytes and not UTF8 characters  */
+       final = g_utf8_strrchr (tab, strlen (tab) + 1, '\n');
+       if (G_LIKELY (final))
+               *final = '\0';
+       else
+               tab[strlen(tab) - 1] = '\0';
 
        /* Get MCC code */
        mcc[0] = g_utf8_get_char (line);
@@ -259,7 +263,7 @@ modest_country_picker_init (ModestCountryPicker *self)
 }
 
 static gchar *
-country_picker_print_func (HildonTouchSelector *selector)
+country_picker_print_func (HildonTouchSelector *selector, gpointer userdata)
 {
        GtkTreeModel *model;
        GtkTreeIter iter;
@@ -270,9 +274,17 @@ country_picker_print_func (HildonTouchSelector *selector)
        model = hildon_touch_selector_get_model (selector, 0);
        if (hildon_touch_selector_get_selected (selector, 0, &iter)) {
                gint column;
+               GtkWidget *entry;
+               const gchar *entry_text;
 
                column = hildon_touch_selector_entry_get_text_column (HILDON_TOUCH_SELECTOR_ENTRY (selector));
                gtk_tree_model_get (model, &iter, column, &text, -1);
+
+               entry = GTK_WIDGET (hildon_touch_selector_entry_get_entry (HILDON_TOUCH_SELECTOR_ENTRY (selector)));
+               entry_text = hildon_entry_get_text (HILDON_ENTRY (entry));
+               if (entry_text != NULL && text != NULL && strcmp (entry_text, text)) {
+                       hildon_entry_set_text (HILDON_ENTRY (entry), text);
+               }
        }
        return text;
 }
@@ -297,7 +309,7 @@ modest_country_picker_load_data(ModestCountryPicker *self)
        g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
 
        selector = hildon_touch_selector_entry_new ();
-       hildon_touch_selector_set_print_func (HILDON_TOUCH_SELECTOR (selector), country_picker_print_func);
+       hildon_touch_selector_set_print_func (HILDON_TOUCH_SELECTOR (selector), (HildonTouchSelectorPrintFunc) country_picker_print_func);
        column = hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (selector), GTK_TREE_MODEL (model),
                                                      renderer, "text", MODEL_COL_NAME, NULL);
        g_object_set (G_OBJECT (column), "text-column", MODEL_COL_NAME, NULL);