datetime: Make sorting cities store faster
By sorting the filtered version, rather than the original and then hiding items.
This commit is contained in:
parent
a3b899160d
commit
573179ce11
2 changed files with 27 additions and 13 deletions
|
@ -29,6 +29,13 @@ G_DEFINE_DYNAMIC_TYPE (CcDateTimePanel, cc_date_time_panel, CC_TYPE_PANEL)
|
|||
#define DATE_TIME_PANEL_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_DATE_TIME_PANEL, CcDateTimePanelPrivate))
|
||||
|
||||
enum {
|
||||
CITY_COL_CITY,
|
||||
CITY_COL_REGION,
|
||||
CITY_COL_ZONE,
|
||||
CITY_NUM_COLS
|
||||
};
|
||||
|
||||
struct _CcDateTimePanelPrivate
|
||||
{
|
||||
GtkBuilder *builder;
|
||||
|
@ -325,9 +332,9 @@ get_regions (TzLocation *loc,
|
|||
}
|
||||
|
||||
gtk_list_store_insert_with_values (data->city_store, NULL, 0,
|
||||
0, split[1],
|
||||
1, split[0],
|
||||
2, loc->zone,
|
||||
CITY_COL_CITY, split[1],
|
||||
CITY_COL_REGION, split[0],
|
||||
CITY_COL_ZONE, loc->zone,
|
||||
-1);
|
||||
|
||||
g_strfreev (split);
|
||||
|
@ -348,10 +355,10 @@ city_model_filter_func (GtkTreeModel *model,
|
|||
combo_model = gtk_combo_box_get_model (combo);
|
||||
gtk_combo_box_get_active_iter (combo, &combo_iter);
|
||||
gtk_tree_model_get (combo_model, &combo_iter,
|
||||
0, &active_region, -1);
|
||||
CITY_COL_CITY, &active_region, -1);
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
1, &city_region, -1);
|
||||
CITY_COL_REGION, &city_region, -1);
|
||||
|
||||
if (g_strcmp0 (active_region, city_region) == 0)
|
||||
result = TRUE;
|
||||
|
@ -370,10 +377,11 @@ static void
|
|||
load_regions_model (GtkListStore *regions, GtkListStore *cities)
|
||||
{
|
||||
struct get_region_data data;
|
||||
TzDB *db = tz_load_db ();
|
||||
TzDB *db;
|
||||
GHashTable *table;
|
||||
|
||||
|
||||
db = tz_load_db ();
|
||||
table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
|
||||
|
||||
data.table = table;
|
||||
|
@ -384,13 +392,11 @@ load_regions_model (GtkListStore *regions, GtkListStore *cities)
|
|||
|
||||
g_hash_table_destroy (table);
|
||||
|
||||
tz_db_free (db);
|
||||
|
||||
/* sort the models */
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (regions), 0,
|
||||
GTK_SORT_ASCENDING);
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (cities), 0,
|
||||
GTK_SORT_ASCENDING);
|
||||
|
||||
tz_db_free (db);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -417,7 +423,7 @@ city_changed_cb (GtkComboBox *box,
|
|||
if (gtk_combo_box_get_active_iter (box, &iter))
|
||||
{
|
||||
gtk_tree_model_get (gtk_combo_box_get_model (box), &iter,
|
||||
2, &zone, -1);
|
||||
CITY_COL_ZONE, &zone, -1);
|
||||
|
||||
cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), zone);
|
||||
|
||||
|
@ -433,13 +439,14 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
|||
CcDateTimePanelPrivate *priv;
|
||||
gchar *objects[] = { "datetime-panel", "adjustment_min", "adjustment_hour",
|
||||
"adjustment_sec", "region-liststore", "city-liststore",
|
||||
"city-modelfilter", NULL };
|
||||
"city-modelfilter", "city-modelsort", NULL };
|
||||
GtkWidget *widget;
|
||||
GError *err = NULL;
|
||||
GDate *date;
|
||||
struct tm *ltime;
|
||||
time_t t;
|
||||
GtkTreeModelFilter *city_modelfilter;
|
||||
GtkTreeModelSort *city_modelsort;
|
||||
int ret;
|
||||
|
||||
priv = self->priv = DATE_TIME_PANEL_PRIVATE (self);
|
||||
|
@ -510,6 +517,10 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
|||
g_signal_connect (widget, "changed", G_CALLBACK (region_changed_cb),
|
||||
city_modelfilter);
|
||||
|
||||
city_modelsort = GTK_TREE_MODEL_SORT (gtk_builder_get_object (priv->builder, "city-modelsort"));
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (city_modelsort), 0,
|
||||
GTK_SORT_ASCENDING);
|
||||
|
||||
gtk_tree_model_filter_set_visible_func (city_modelfilter,
|
||||
(GtkTreeModelFilterVisibleFunc) city_model_filter_func,
|
||||
widget,
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
<child>
|
||||
<object class="GtkComboBox" id="city_combobox">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">city-modelfilter</property>
|
||||
<property name="model">city-modelsort</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
||||
<attributes>
|
||||
|
@ -285,4 +285,7 @@
|
|||
<object class="GtkTreeModelFilter" id="city-modelfilter">
|
||||
<property name="child_model">city-liststore</property>
|
||||
</object>
|
||||
<object class="GtkTreeModelSort" id="city-modelsort">
|
||||
<property name="model">city-modelfilter</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
Loading…
Add table
Reference in a new issue