datetime: don't try to set timezone when initially loading model
This commit is contained in:
parent
15a0ad5fad
commit
d69eba8c17
3 changed files with 80 additions and 49 deletions
|
@ -338,6 +338,54 @@ static void
|
||||||
location_changed_cb (CcTimezoneMap *map,
|
location_changed_cb (CcTimezoneMap *map,
|
||||||
TzLocation *location,
|
TzLocation *location,
|
||||||
CcDateTimePanel *self)
|
CcDateTimePanel *self)
|
||||||
|
{
|
||||||
|
g_debug ("location changed");
|
||||||
|
|
||||||
|
self->priv->current_location = location;
|
||||||
|
|
||||||
|
queue_set_timezone (self);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
region_changed_cb (GtkComboBox *box,
|
||||||
|
CcDateTimePanel *self)
|
||||||
|
{
|
||||||
|
GtkTreeModelFilter *modelfilter;
|
||||||
|
|
||||||
|
modelfilter = GTK_TREE_MODEL_FILTER (gtk_builder_get_object (self->priv->builder, "city-modelfilter"));
|
||||||
|
|
||||||
|
gtk_tree_model_filter_refilter (modelfilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
city_changed_cb (GtkComboBox *box,
|
||||||
|
CcDateTimePanel *self)
|
||||||
|
{
|
||||||
|
static gboolean inside = FALSE;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
gchar *zone;
|
||||||
|
|
||||||
|
/* prevent re-entry from location changed callback */
|
||||||
|
if (inside)
|
||||||
|
return;
|
||||||
|
|
||||||
|
inside = TRUE;
|
||||||
|
|
||||||
|
if (gtk_combo_box_get_active_iter (box, &iter))
|
||||||
|
{
|
||||||
|
gtk_tree_model_get (gtk_combo_box_get_model (box), &iter,
|
||||||
|
CITY_COL_ZONE, &zone, -1);
|
||||||
|
|
||||||
|
cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), zone);
|
||||||
|
|
||||||
|
g_free (zone);
|
||||||
|
}
|
||||||
|
|
||||||
|
inside = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_timezone (CcDateTimePanel *self)
|
||||||
{
|
{
|
||||||
CcDateTimePanelPrivate *priv = self->priv;
|
CcDateTimePanelPrivate *priv = self->priv;
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
|
@ -347,15 +395,13 @@ location_changed_cb (CcTimezoneMap *map,
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkTreeModel *model;
|
GtkTreeModel *model;
|
||||||
|
|
||||||
priv->current_location = location;
|
|
||||||
|
|
||||||
/* tz.c updates the local timezone, which means the spin buttons can be
|
/* tz.c updates the local timezone, which means the spin buttons can be
|
||||||
* updated with the current time of the new location */
|
* updated with the current time of the new location */
|
||||||
|
|
||||||
t = time (NULL);
|
t = time (NULL);
|
||||||
ltime = localtime (&t);
|
ltime = localtime (&t);
|
||||||
|
|
||||||
split = g_strsplit (location->zone, "/", 2);
|
split = g_strsplit (priv->current_location->zone, "/", 2);
|
||||||
|
|
||||||
/* remove underscores */
|
/* remove underscores */
|
||||||
g_strdelimit (split[1], "_", ' ');
|
g_strdelimit (split[1], "_", ' ');
|
||||||
|
@ -406,8 +452,6 @@ location_changed_cb (CcTimezoneMap *map,
|
||||||
while (gtk_tree_model_iter_next (model, &iter));
|
while (gtk_tree_model_iter_next (model, &iter));
|
||||||
|
|
||||||
g_strfreev (split);
|
g_strfreev (split);
|
||||||
|
|
||||||
queue_set_timezone (self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -415,10 +459,31 @@ get_timezone_cb (CcDateTimePanel *self,
|
||||||
const gchar *timezone,
|
const gchar *timezone,
|
||||||
GError *error)
|
GError *error)
|
||||||
{
|
{
|
||||||
|
GtkWidget *widget;
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
g_warning ("Could not get current timezone: %s", error->message);
|
{
|
||||||
|
g_warning ("Could not get current timezone: %s", error->message);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), timezone);
|
{
|
||||||
|
cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), timezone);
|
||||||
|
self->priv->current_location = cc_timezone_map_get_location (CC_TIMEZONE_MAP (self->priv->map));
|
||||||
|
update_timezone (self);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now that the initial state is loaded set connect the signals */
|
||||||
|
widget = (GtkWidget*) gtk_builder_get_object (self->priv->builder,
|
||||||
|
"region_combobox");
|
||||||
|
g_signal_connect (widget, "changed", G_CALLBACK (region_changed_cb), self);
|
||||||
|
|
||||||
|
widget = (GtkWidget*) gtk_builder_get_object (self->priv->builder,
|
||||||
|
"city_combobox");
|
||||||
|
g_signal_connect (widget, "changed", G_CALLBACK (city_changed_cb), self);
|
||||||
|
|
||||||
|
g_signal_connect (self->priv->map, "location-changed",
|
||||||
|
G_CALLBACK (location_changed_cb), self);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* load region and city tree models */
|
/* load region and city tree models */
|
||||||
|
@ -538,40 +603,6 @@ load_regions_model (GtkListStore *regions, GtkListStore *cities)
|
||||||
GTK_SORT_ASCENDING);
|
GTK_SORT_ASCENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
region_changed_cb (GtkComboBox *box,
|
|
||||||
GtkTreeModelFilter *modelfilter)
|
|
||||||
{
|
|
||||||
gtk_tree_model_filter_refilter (modelfilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
city_changed_cb (GtkComboBox *box,
|
|
||||||
CcDateTimePanel *self)
|
|
||||||
{
|
|
||||||
static gboolean inside = FALSE;
|
|
||||||
GtkTreeIter iter;
|
|
||||||
gchar *zone;
|
|
||||||
|
|
||||||
/* prevent re-entry from location changed callback */
|
|
||||||
if (inside)
|
|
||||||
return;
|
|
||||||
|
|
||||||
inside = TRUE;
|
|
||||||
|
|
||||||
if (gtk_combo_box_get_active_iter (box, &iter))
|
|
||||||
{
|
|
||||||
gtk_tree_model_get (gtk_combo_box_get_model (box), &iter,
|
|
||||||
CITY_COL_ZONE, &zone, -1);
|
|
||||||
|
|
||||||
cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), zone);
|
|
||||||
|
|
||||||
g_free (zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
inside = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_widget_state_for_ntp (CcDateTimePanel *panel,
|
update_widget_state_for_ntp (CcDateTimePanel *panel,
|
||||||
gboolean using_ntp)
|
gboolean using_ntp)
|
||||||
|
@ -763,8 +794,6 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
||||||
|
|
||||||
/* set up timezone map */
|
/* set up timezone map */
|
||||||
priv->map = widget = (GtkWidget *) cc_timezone_map_new ();
|
priv->map = widget = (GtkWidget *) cc_timezone_map_new ();
|
||||||
g_signal_connect (widget, "location-changed",
|
|
||||||
G_CALLBACK (location_changed_cb), self);
|
|
||||||
gtk_widget_show (widget);
|
gtk_widget_show (widget);
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->builder,
|
gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->builder,
|
||||||
|
@ -800,9 +829,6 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
||||||
|
|
||||||
widget = (GtkWidget*) gtk_builder_get_object (priv->builder,
|
widget = (GtkWidget*) gtk_builder_get_object (priv->builder,
|
||||||
"region_combobox");
|
"region_combobox");
|
||||||
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"));
|
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), CITY_COL_CITY_TRANSLATED,
|
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (city_modelsort), CITY_COL_CITY_TRANSLATED,
|
||||||
GTK_SORT_ASCENDING);
|
GTK_SORT_ASCENDING);
|
||||||
|
@ -811,9 +837,6 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
||||||
(GtkTreeModelFilterVisibleFunc) city_model_filter_func,
|
(GtkTreeModelFilterVisibleFunc) city_model_filter_func,
|
||||||
widget,
|
widget,
|
||||||
NULL);
|
NULL);
|
||||||
widget = (GtkWidget*) gtk_builder_get_object (priv->builder,
|
|
||||||
"city_combobox");
|
|
||||||
g_signal_connect (widget, "changed", G_CALLBACK (city_changed_cb), self);
|
|
||||||
|
|
||||||
queue_clock_update (self);
|
queue_clock_update (self);
|
||||||
}
|
}
|
||||||
|
|
|
@ -603,3 +603,9 @@ cc_timezone_map_set_timezone (CcTimezoneMap *map,
|
||||||
|
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (map));
|
gtk_widget_queue_draw (GTK_WIDGET (map));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TzLocation *
|
||||||
|
cc_timezone_map_get_location (CcTimezoneMap *map)
|
||||||
|
{
|
||||||
|
return map->priv->location;
|
||||||
|
}
|
||||||
|
|
|
@ -69,8 +69,10 @@ struct _CcTimezoneMapClass
|
||||||
GType cc_timezone_map_get_type (void) G_GNUC_CONST;
|
GType cc_timezone_map_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
CcTimezoneMap *cc_timezone_map_new (void);
|
CcTimezoneMap *cc_timezone_map_new (void);
|
||||||
|
|
||||||
void cc_timezone_map_set_timezone (CcTimezoneMap *map,
|
void cc_timezone_map_set_timezone (CcTimezoneMap *map,
|
||||||
const gchar *timezone);
|
const gchar *timezone);
|
||||||
|
TzLocation * cc_timezone_map_get_location (CcTimezoneMap *map);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue