[PATCH 2/3] Allow setting timezone on the map without signal

Vratislav Podzimek vpodzime at redhat.com
Mon Apr 29 13:40:58 UTC 2013


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 at 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 at 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



More information about the anaconda-patches mailing list