This simplifies the code that now doesn't have to do any magic preventing
infinite loops caused by signals and UI elements updating.
Signed-off-by: Vratislav Podzimek <vpodzime(a)redhat.com>
---
widgets/python/AnacondaWidgets.py | 7 +++++++
widgets/src/TimezoneMap.c | 19 ++++++++++++-------
widgets/src/TimezoneMap.h | 5 +++--
3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/widgets/python/AnacondaWidgets.py b/widgets/python/AnacondaWidgets.py
index edb9f35..6e8570d 100644
--- a/widgets/python/AnacondaWidgets.py
+++ b/widgets/python/AnacondaWidgets.py
@@ -75,3 +75,10 @@ class DiskOverview(Anaconda.DiskOverview):
DiskOverview = override(DiskOverview)
__all__.append('DiskOverview')
+
+class TimezoneMap(Anaconda.TimezoneMap):
+ def set_timezone(self, timezone, no_signal=False):
+ Anaconda.TimezoneMap.set_timezone(self, timezone, no_signal)
+
+TimezoneMap = override(TimezoneMap)
+__all__.append('TimezoneMap')
diff --git a/widgets/src/TimezoneMap.c b/widgets/src/TimezoneMap.c
index a494e70..a939c3c 100644
--- a/widgets/src/TimezoneMap.c
+++ b/widgets/src/TimezoneMap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2012 Red Hat, Inc
+/* Copyright (C) 2012-2013 Red Hat, Inc
*
* Heavily based on the code from gnome-control-center, Copyright (C) 2010 Intel, Inc.
* Written by Thomas Wood <thomas.wood(a)intel.com>
@@ -437,7 +437,8 @@ sort_locations (TzLocation *a,
static void
set_location (AnacondaTimezoneMap *map,
TzLocation *location,
- gboolean no_city) {
+ gboolean no_city,
+ gboolean no_signal) {
AnacondaTimezoneMapPrivate *priv = map->priv;
TzInfo *info;
@@ -448,11 +449,13 @@ set_location (AnacondaTimezoneMap *map,
if (no_city) {
priv->location = NULL;
- g_signal_emit (map, signals[TIMEZONE_CHANGED], 0, "");
+ if (!no_signal)
+ g_signal_emit (map, signals[TIMEZONE_CHANGED], 0, "");
}
else {
priv->location = location;
- g_signal_emit (map, signals[TIMEZONE_CHANGED], 0, priv->location->zone);
+ if (!no_signal)
+ g_signal_emit (map, signals[TIMEZONE_CHANGED], 0, priv->location->zone);
}
tz_info_free (info);
@@ -520,7 +523,7 @@ button_press_event (GtkWidget *widget,
distances = g_list_sort (distances, (GCompareFunc) sort_locations);
- set_location (ANACONDA_TIMEZONE_MAP (widget), (TzLocation*) distances->data,
FALSE);
+ set_location (ANACONDA_TIMEZONE_MAP (widget), (TzLocation*) distances->data, FALSE,
FALSE);
g_list_free (distances);
@@ -565,6 +568,7 @@ anaconda_timezone_map_init (AnacondaTimezoneMap *self) {
* anaconda_timezone_map_set_timezone:
* @map: an #AnacondaTimezoneMap
* @timezone: timezone name
+ * @no_signal: whether the timezone-changed signal should be emitted or not
*
* Modifies the map to show @timezone as selected. Also modifies the internal
* data of the @map.
@@ -573,7 +577,8 @@ anaconda_timezone_map_init (AnacondaTimezoneMap *self) {
*/
gboolean
anaconda_timezone_map_set_timezone (AnacondaTimezoneMap *map,
- const gchar *timezone) {
+ const gchar *timezone,
+ gboolean no_signal) {
GPtrArray *locations;
guint i;
char *real_tz;
@@ -596,7 +601,7 @@ anaconda_timezone_map_set_timezone (AnacondaTimezoneMap *map,
TzLocation *loc = locations->pdata[i];
if (!g_strcmp0 (loc->zone, real_tz ? real_tz : timezone)) {
- set_location (map, loc, no_city);
+ set_location (map, loc, no_city, no_signal);
ret = TRUE;
break;
}
diff --git a/widgets/src/TimezoneMap.h b/widgets/src/TimezoneMap.h
index 0018266..3a857bd 100644
--- a/widgets/src/TimezoneMap.h
+++ b/widgets/src/TimezoneMap.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Red Hat, Inc
+ * Copyright (C) 2012-2013 Red Hat, Inc
*
* Heavily based on the gnome-control-center code,
* Copyright (c) 2010 Intel, Inc
@@ -74,7 +74,8 @@ GType anaconda_timezone_map_get_type (void) G_GNUC_CONST;
GtkWidget *anaconda_timezone_map_new (void);
gboolean anaconda_timezone_map_set_timezone (AnacondaTimezoneMap *map,
- const gchar *timezone);
+ const gchar *timezone,
+ gboolean no_signal);
gchar *anaconda_timezone_map_get_timezone (AnacondaTimezoneMap *map);
--
1.7.11.7