Filtering city list based on selected country
This commit is contained in:
parent
21c53f0e50
commit
416572bece
@ -1493,6 +1493,49 @@ ag_window_list_selection_changed_cb(GdMainView *view, AgWindow *window)
|
|||||||
// Here it is possible to set button sensitivity later
|
// Here it is possible to set button sensitivity later
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
ag_window_city_matches(GtkEntryCompletion *city_comp,
|
||||||
|
const gchar *key,
|
||||||
|
GtkTreeIter *iter,
|
||||||
|
AgWindow *window)
|
||||||
|
{
|
||||||
|
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||||
|
gchar *ccode,
|
||||||
|
*name,
|
||||||
|
*normalized_name,
|
||||||
|
*case_normalized_name;
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
|
||||||
|
gtk_tree_model_get(
|
||||||
|
gtk_entry_completion_get_model(city_comp), iter,
|
||||||
|
AG_CITY_NAME, &name,
|
||||||
|
AG_CITY_COUNTRY, &ccode,
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
(priv->selected_country == NULL)
|
||||||
|
|| (strcmp(priv->selected_country, ccode) == 0)
|
||||||
|
) {
|
||||||
|
normalized_name = g_utf8_normalize(name, -1, G_NORMALIZE_ALL);
|
||||||
|
|
||||||
|
if (normalized_name) {
|
||||||
|
case_normalized_name = g_utf8_casefold(normalized_name, -1);
|
||||||
|
if (strncmp(key, case_normalized_name, strlen(key)) == 0) {
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(case_normalized_name);
|
||||||
|
g_free(normalized_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(name);
|
||||||
|
g_free(ccode);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ag_window_init(AgWindow *window)
|
ag_window_init(AgWindow *window)
|
||||||
{
|
{
|
||||||
@ -1528,6 +1571,12 @@ ag_window_init(AgWindow *window)
|
|||||||
gtk_entry_completion_set_text_column(priv->city_comp, AG_CITY_NAME);
|
gtk_entry_completion_set_text_column(priv->city_comp, AG_CITY_NAME);
|
||||||
gtk_entry_completion_set_minimum_key_length(priv->city_comp, 3);
|
gtk_entry_completion_set_minimum_key_length(priv->city_comp, 3);
|
||||||
gtk_entry_set_completion(GTK_ENTRY(priv->city), priv->city_comp);
|
gtk_entry_set_completion(GTK_ENTRY(priv->city), priv->city_comp);
|
||||||
|
gtk_entry_completion_set_match_func(
|
||||||
|
priv->city_comp,
|
||||||
|
(GtkEntryCompletionMatchFunc)ag_window_city_matches,
|
||||||
|
window,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
house_system_list = gswe_all_house_systems();
|
house_system_list = gswe_all_house_systems();
|
||||||
g_list_foreach(house_system_list, (GFunc)ag_window_add_house_system, priv);
|
g_list_foreach(house_system_list, (GFunc)ag_window_add_house_system, priv);
|
||||||
|
Loading…
Reference in New Issue
Block a user