[gnome-control-center] datetime: Use g_signal_connect_object for all signal handlers



commit 417fc57392b328d9cb38263ea4561f2c6cacfbea
Author: Robert Ancell <robert ancell canonical com>
Date:   Tue Oct 9 09:19:02 2018 +1300

    datetime: Use g_signal_connect_object for all signal handlers
    
    This ensures they wont be called when the handling object is destroyed.
    Also connect all in "swapped" form for improved readability.

 panels/datetime/cc-datetime-panel.c | 113 ++++++++++++++++--------------------
 panels/datetime/cc-timezone-map.c   |  12 ++--
 2 files changed, 55 insertions(+), 70 deletions(-)
---
diff --git a/panels/datetime/cc-datetime-panel.c b/panels/datetime/cc-datetime-panel.c
index 6a70928fb..d19af225e 100644
--- a/panels/datetime/cc-datetime-panel.c
+++ b/panels/datetime/cc-datetime-panel.c
@@ -184,9 +184,8 @@ cc_date_time_panel_get_help_uri (CcPanel *panel)
   return "help:gnome-help/clock";
 }
 
-static void clock_settings_changed_cb (GSettings       *settings,
-                                       gchar           *key,
-                                       CcDateTimePanel *panel);
+static void clock_settings_changed_cb (CcDateTimePanel *panel,
+                                       gchar           *key);
 
 static void
 change_clock_settings (GObject         *gobject,
@@ -216,13 +215,12 @@ change_clock_settings (GObject         *gobject,
 }
 
 static void
-clock_settings_changed_cb (GSettings       *settings,
-                           gchar           *key,
-                           CcDateTimePanel *self)
+clock_settings_changed_cb (CcDateTimePanel *self,
+                           gchar           *key)
 {
   GDesktopClockFormat value;
 
-  value = g_settings_get_enum (settings, CLOCK_FORMAT_KEY);
+  value = g_settings_get_enum (self->clock_settings, CLOCK_FORMAT_KEY);
   self->clock_format = value;
 
   g_signal_handlers_block_by_func (self->format_combobox, change_clock_settings, self);
@@ -463,10 +461,10 @@ change_date (CcDateTimePanel *self)
 }
 
 static gboolean
-city_changed_cb (GtkEntryCompletion *entry_completion,
+city_changed_cb (CcDateTimePanel    *self,
                  GtkTreeModel       *model,
                  GtkTreeIter        *iter,
-                 CcDateTimePanel *self)
+                 GtkEntryCompletion *completion)
 {
   GtkWidget *entry;
   g_autofree gchar *zone = NULL;
@@ -475,7 +473,7 @@ city_changed_cb (GtkEntryCompletion *entry_completion,
                       CITY_COL_ZONE, &zone, -1);
   cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->map), zone);
 
-  entry = gtk_entry_completion_get_entry (GTK_ENTRY_COMPLETION (entry_completion));
+  entry = gtk_entry_completion_get_entry (completion);
   gtk_entry_set_text (GTK_ENTRY (entry), "");
 
   return TRUE;
@@ -563,9 +561,8 @@ update_timezone (CcDateTimePanel *self)
 }
 
 static void
-location_changed_cb (CcTimezoneMap   *map,
-                     TzLocation      *location,
-                     CcDateTimePanel *self)
+location_changed_cb (CcDateTimePanel *self,
+                     TzLocation      *location)
 {
   g_autoptr(GDateTime) old_date = NULL;
   g_autoptr(GTimeZone) timezone = NULL;
@@ -622,15 +619,13 @@ load_regions_model (GtkListStore *cities)
 }
 
 static void
-day_changed (GtkWidget       *widget,
-             CcDateTimePanel *panel)
+day_changed (CcDateTimePanel *panel)
 {
   change_date (panel);
 }
 
 static void
-month_year_changed (GtkWidget       *widget,
-                    CcDateTimePanel *self)
+month_year_changed (CcDateTimePanel *self)
 {
   guint mon, y;
   guint num_days;
@@ -654,9 +649,8 @@ month_year_changed (GtkWidget       *widget,
 }
 
 static void
-on_clock_changed (GnomeWallClock  *clock,
-                 GParamSpec      *pspec,
-                 CcDateTimePanel *panel)
+on_clock_changed (CcDateTimePanel *panel,
+                 GParamSpec      *pspec)
 {
   g_date_time_unref (panel->date);
   panel->date = g_date_time_new_now_local ();
@@ -702,9 +696,8 @@ change_time (CcDateTimePanel *self)
 }
 
 static void
-change_ntp (GObject         *gobject,
-            GParamSpec      *pspec,
-            CcDateTimePanel *self)
+change_ntp (CcDateTimePanel *self,
+            GParamSpec      *pspec)
 {
   queue_set_ntp (self);
 }
@@ -729,11 +722,8 @@ is_ntp_available (CcDateTimePanel *self)
 }
 
 static void
-on_permission_changed (GPermission *permission,
-                       GParamSpec  *pspec,
-                       gpointer     data)
+on_permission_changed (CcDateTimePanel *self)
 {
-  CcDateTimePanel *self = CC_DATE_TIME_PANEL (data);
   gboolean allowed, location_allowed, tz_allowed, auto_timezone, using_ntp;
 
   allowed = (self->permission != NULL && g_permission_get_allowed (self->permission));
@@ -756,11 +746,9 @@ on_permission_changed (GPermission *permission,
 }
 
 static void
-on_location_settings_changed (GSettings       *settings,
-                              const char      *key,
-                              CcDateTimePanel *panel)
+on_location_settings_changed (CcDateTimePanel *panel)
 {
-  on_permission_changed (panel->permission, NULL, panel);
+  on_permission_changed (panel);
 }
 
 static void
@@ -778,10 +766,9 @@ on_timezone_changed (CcDateTimePanel *self)
 }
 
 static void
-on_timedated_properties_changed (GDBusProxy       *proxy,
+on_timedated_properties_changed (CcDateTimePanel  *self,
                                  GVariant         *changed_properties,
-                                 const gchar     **invalidated_properties,
-                                 CcDateTimePanel  *self)
+                                 const gchar     **invalidated_properties)
 {
   guint i;
 
@@ -791,7 +778,7 @@ on_timedated_properties_changed (GDBusProxy       *proxy,
         g_autoptr(GError) error = NULL;
 
         /* See https://bugs.freedesktop.org/show_bug.cgi?id=37632 for the reason why we're doing this */
-        variant = g_dbus_proxy_call_sync (proxy,
+        variant = g_dbus_proxy_call_sync (G_DBUS_PROXY (self->dtm),
                                           "org.freedesktop.DBus.Properties.Get",
                                           g_variant_new ("(ss)", "org.freedesktop.timedate1", 
invalidated_properties[i]),
                                           G_DBUS_CALL_FLAGS_NONE,
@@ -804,7 +791,7 @@ on_timedated_properties_changed (GDBusProxy       *proxy,
                 GVariant *v;
 
                 g_variant_get (variant, "(v)", &v);
-                g_dbus_proxy_set_cached_property (proxy, invalidated_properties[i], v);
+                g_dbus_proxy_set_cached_property (G_DBUS_PROXY (self->dtm), invalidated_properties[i], v);
         }
     }
 }
@@ -1080,8 +1067,8 @@ setup_datetime_dialog (CcDateTimePanel *self)
   /* Month */
   gtk_combo_box_set_active (GTK_COMBO_BOX (self->month_combobox),
                             g_date_time_get_month (self->date) - 1);
-  g_signal_connect (G_OBJECT (self->month_combobox), "changed",
-                    G_CALLBACK (month_year_changed), self);
+  g_signal_connect_object (G_OBJECT (self->month_combobox), "changed",
+                           G_CALLBACK (month_year_changed), self, G_CONNECT_SWAPPED);
 
   /* Day */
   num_days = g_date_get_days_in_month (g_date_time_get_month (self->date),
@@ -1090,8 +1077,8 @@ setup_datetime_dialog (CcDateTimePanel *self)
                                                     num_days + 1, 1, 10, 1);
   gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (self->day_spinbutton),
                                   adjustment);
-  g_signal_connect (G_OBJECT (self->day_spinbutton), "value-changed",
-                    G_CALLBACK (day_changed), self);
+  g_signal_connect_object (G_OBJECT (self->day_spinbutton), "value-changed",
+                           G_CALLBACK (day_changed), self, G_CONNECT_SWAPPED);
 
   /* Year */
   adjustment = (GtkAdjustment*) gtk_adjustment_new (g_date_time_get_year (self->date),
@@ -1099,8 +1086,8 @@ setup_datetime_dialog (CcDateTimePanel *self)
                                                     10, 1);
   gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (self->year_spinbutton),
                                   adjustment);
-  g_signal_connect (G_OBJECT (self->year_spinbutton), "value-changed",
-                    G_CALLBACK (month_year_changed), self);
+  g_signal_connect_object (G_OBJECT (self->year_spinbutton), "value-changed",
+                           G_CALLBACK (month_year_changed), self, G_CONNECT_SWAPPED);
 
   /* Hours and minutes */
   gtk_spin_button_set_increments (GTK_SPIN_BUTTON (self->h_spinbutton), 1, 0);
@@ -1219,8 +1206,8 @@ cc_date_time_panel_init (CcDateTimePanel *self)
   self->tz_permission = polkit_permission_new_sync (DATETIME_TZ_PERMISSION, NULL, NULL, NULL);
   if (self->permission != NULL)
     {
-      g_signal_connect (self->permission, "notify",
-                        G_CALLBACK (on_permission_changed), self);
+      g_signal_connect_object (self->permission, "notify",
+                               G_CALLBACK (on_permission_changed), self, G_CONNECT_SWAPPED);
     }
   else
     {
@@ -1230,9 +1217,9 @@ cc_date_time_panel_init (CcDateTimePanel *self)
   gtk_lock_button_set_permission (GTK_LOCK_BUTTON (self->lock_button), self->permission);
 
   self->location_settings = g_settings_new (LOCATION_SETTINGS);
-  g_signal_connect (self->location_settings, "changed",
-                    G_CALLBACK (on_location_settings_changed), self);
-  on_location_settings_changed (self->location_settings, NULL, self);
+  g_signal_connect_object (self->location_settings, "changed",
+                           G_CALLBACK (on_location_settings_changed), self, G_CONNECT_SWAPPED);
+  on_location_settings_changed (self);
 
   self->date = g_date_time_new_now_local ();
 
@@ -1253,8 +1240,8 @@ cc_date_time_panel_init (CcDateTimePanel *self)
   g_object_bind_property (self->dtm, "ntp",
                           self->network_time_switch, "active",
                           G_BINDING_SYNC_CREATE);
-  g_signal_connect (self->network_time_switch, "notify::active",
-                    G_CALLBACK (change_ntp), self);
+  g_signal_connect_object (self->network_time_switch, "notify::active",
+                           G_CALLBACK (change_ntp), self, G_CONNECT_SWAPPED);
 
   gtk_widget_set_visible (self->auto_datetime_row, is_ntp_available (self));
 
@@ -1275,11 +1262,11 @@ cc_date_time_panel_init (CcDateTimePanel *self)
 
   /* setup the time itself */
   self->clock_tracker = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
-  g_signal_connect (self->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), self);
+  g_signal_connect_object (self->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), self, 
G_CONNECT_SWAPPED);
 
-  clock_settings_changed_cb (self->clock_settings, CLOCK_FORMAT_KEY, self);
-  g_signal_connect (self->clock_settings, "changed::" CLOCK_FORMAT_KEY,
-                    G_CALLBACK (clock_settings_changed_cb), self);
+  clock_settings_changed_cb (self, CLOCK_FORMAT_KEY);
+  g_signal_connect_object (self->clock_settings, "changed::" CLOCK_FORMAT_KEY,
+                           G_CALLBACK (clock_settings_changed_cb), self, G_CONNECT_SWAPPED);
 
   update_time (self);
 
@@ -1292,19 +1279,19 @@ cc_date_time_panel_init (CcDateTimePanel *self)
    * the model is filled up */
   get_initial_timezone (self);
 
-  g_signal_connect (gtk_entry_get_completion (GTK_ENTRY (self->timezone_searchentry)),
-                    "match-selected", G_CALLBACK (city_changed_cb), self);
+  g_signal_connect_object (gtk_entry_get_completion (GTK_ENTRY (self->timezone_searchentry)),
+                           "match-selected", G_CALLBACK (city_changed_cb), self, G_CONNECT_SWAPPED);
 
-  g_signal_connect (self->map, "location-changed",
-                    G_CALLBACK (location_changed_cb), self);
+  g_signal_connect_object (self->map, "location-changed",
+                           G_CALLBACK (location_changed_cb), self, G_CONNECT_SWAPPED);
 
   /* Watch changes of timedated remote service properties */
-  g_signal_connect (self->dtm, "g-properties-changed",
-                    G_CALLBACK (on_timedated_properties_changed), self);
-  g_signal_connect_swapped (self->dtm, "notify::can-ntp",
-                            G_CALLBACK (on_can_ntp_changed), self);
-  g_signal_connect_swapped (self->dtm, "notify::timezone",
-                            G_CALLBACK (on_timezone_changed), self);
+  g_signal_connect_object (self->dtm, "g-properties-changed",
+                           G_CALLBACK (on_timedated_properties_changed), self, G_CONNECT_SWAPPED);
+  g_signal_connect_object (self->dtm, "notify::can-ntp",
+                           G_CALLBACK (on_can_ntp_changed), self, G_CONNECT_SWAPPED);
+  g_signal_connect_object (self->dtm, "notify::timezone",
+                           G_CALLBACK (on_timezone_changed), self, G_CONNECT_SWAPPED);
   /* We ignore UTC <--> LocalRTC changes at the moment */
 
   self->filechooser_settings = g_settings_new (FILECHOOSER_SCHEMA);
diff --git a/panels/datetime/cc-timezone-map.c b/panels/datetime/cc-timezone-map.c
index ad54b91c6..3c813a68c 100644
--- a/panels/datetime/cc-timezone-map.c
+++ b/panels/datetime/cc-timezone-map.c
@@ -517,10 +517,9 @@ set_location (CcTimezoneMap *map,
 }
 
 static gboolean
-button_press_event (GtkWidget      *widget,
+button_press_event (CcTimezoneMap  *map,
                     GdkEventButton *event)
 {
-  CcTimezoneMap *map = CC_TIMEZONE_MAP (widget);
   gint x, y;
   guchar r, g, b, a;
   guchar *pixels;
@@ -554,13 +553,13 @@ button_press_event (GtkWidget      *widget,
          }
     }
 
-  gtk_widget_queue_draw (widget);
+  gtk_widget_queue_draw (GTK_WIDGET (map));
 
   /* work out the co-ordinates */
 
   array = tz_get_locations (map->tzdb);
 
-  gtk_widget_get_allocation (widget, &alloc);
+  gtk_widget_get_allocation (GTK_WIDGET (map), &alloc);
   width = alloc.width;
   height = alloc.height;
 
@@ -582,7 +581,7 @@ button_press_event (GtkWidget      *widget,
   distances = g_list_sort (distances, (GCompareFunc) sort_locations);
 
 
-  set_location (CC_TIMEZONE_MAP (widget), (TzLocation*) distances->data);
+  set_location (map, (TzLocation*) distances->data);
 
   g_list_free (distances);
 
@@ -634,8 +633,7 @@ cc_timezone_map_init (CcTimezoneMap *map)
 
   map->tzdb = tz_load_db ();
 
-  g_signal_connect (map, "button-press-event", G_CALLBACK (button_press_event),
-                    NULL);
+  g_signal_connect_object (map, "button-press-event", G_CALLBACK (button_press_event), map, 
G_CONNECT_SWAPPED);
 }
 
 CcTimezoneMap *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]