diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2021-05-29 12:24:08 +0300 |
---|---|---|
committer | Dmitry Shachnev <mitya57@debian.org> | 2021-09-04 19:43:25 +0100 |
commit | cac1217fd1bf619fe8304a6be6cf65ac70b28846 (patch) | |
tree | 4aa4eced6d99c3523549e9d289b5701fa5d99a2f | |
parent | e7513ce33ea29ff881ff5efef5b3d27ad8781026 (diff) |
clock: store GWeatherTimezone in ClockLocationPrivate
Also make sure that clock_location_get_gweather_timezone returns
new reference.
gweather_location_get_parent is transfer full and might return
newly created GWeatherLocation and gweather_location_get_timezone
is transfer none meaning that timezone might be destroyed when
we will unref location.
https://gitlab.gnome.org/GNOME/gnome-panel/-/issues/33
(cherry picked from commit 5be0672d7f316b17506db3f5d6f36716781812f6)
Gbp-Pq: Name store_gweather_timezone.patch
-rw-r--r-- | modules/clock/clock-location.c | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/modules/clock/clock-location.c b/modules/clock/clock-location.c index cabc00816..d0f26cb83 100644 --- a/modules/clock/clock-location.c +++ b/modules/clock/clock-location.c @@ -27,6 +27,8 @@ struct _ClockLocationPrivate { GWeatherLocation *world; GWeatherLocation *loc; + GWeatherTimezone *wtz; + gdouble latitude; gdouble longitude; @@ -86,6 +88,8 @@ clock_location_new (GnomeWallClock *wall_clock, gweather_location_get_coords (priv->loc, &priv->latitude, &priv->longitude); } + priv->wtz = clock_location_get_gweather_timezone (this); + setup_weather_updates (this); return this; @@ -168,6 +172,8 @@ clock_location_finalize (GObject *g_obj) gweather_location_unref (priv->world); gweather_location_unref (priv->loc); + gweather_timezone_unref (priv->wtz); + if (priv->weather_timeout) g_source_remove (priv->weather_timeout); @@ -244,9 +250,12 @@ clock_location_get_gweather_timezone (ClockLocation *loc) gweather_location_get_name (loc->priv->loc)); return gweather_timezone_get_utc (); } + tz = gweather_location_get_timezone (gloc); + tz = gweather_timezone_ref (tz); gweather_location_unref (gloc); } else { + tz = gweather_timezone_ref (tz); gweather_location_unref (gloc); } @@ -256,19 +265,13 @@ clock_location_get_gweather_timezone (ClockLocation *loc) const gchar * clock_location_get_timezone (ClockLocation *loc) { - GWeatherTimezone *tz; - - tz = clock_location_get_gweather_timezone (loc); - return gweather_timezone_get_name (tz); + return gweather_timezone_get_name (loc->priv->wtz); } const gchar * clock_location_get_tzname (ClockLocation *loc) { - GWeatherTimezone *tz; - - tz = clock_location_get_gweather_timezone (loc); - return gweather_timezone_get_tzid (tz); + return gweather_timezone_get_tzid (loc->priv->wtz); } void @@ -283,14 +286,11 @@ clock_location_get_coords (ClockLocation *loc, GDateTime * clock_location_localtime (ClockLocation *loc) { - GWeatherTimezone *wtz; const char *tzid; GTimeZone *tz; GDateTime *dt; - wtz = clock_location_get_gweather_timezone (loc); - tzid = gweather_timezone_get_tzid (wtz); - + tzid = gweather_timezone_get_tzid (loc->priv->wtz); tz = g_time_zone_new_identifier (tzid); if (tz == NULL) { @@ -309,17 +309,14 @@ clock_location_localtime (ClockLocation *loc) gboolean clock_location_is_current_timezone (ClockLocation *loc) { - GWeatherTimezone *wtz; GTimeZone *timezone; const char *zone; - wtz = clock_location_get_gweather_timezone (loc); - timezone = gnome_wall_clock_get_timezone (loc->priv->wall_clock); zone = g_time_zone_get_identifier (timezone); if (zone) - return strcmp (zone, gweather_timezone_get_tzid (wtz)) == 0; + return strcmp (zone, gweather_timezone_get_tzid (loc->priv->wtz)) == 0; else return clock_location_get_offset (loc) == 0; } @@ -348,14 +345,10 @@ clock_location_is_current (ClockLocation *loc) return FALSE; } - glong clock_location_get_offset (ClockLocation *loc) { - GWeatherTimezone *wtz; - - wtz = clock_location_get_gweather_timezone (loc); - return gweather_timezone_get_offset (wtz); + return gweather_timezone_get_offset (loc->priv->wtz); } typedef struct { @@ -405,7 +398,6 @@ clock_location_make_current (ClockLocation *loc, GDestroyNotify destroy) { MakeCurrentData *mcdata; - GWeatherTimezone *wtz; if (loc == current_location) { if (destroy) @@ -436,10 +428,9 @@ clock_location_make_current (ClockLocation *loc, mcdata->data = data; mcdata->destroy = destroy; - wtz = clock_location_get_gweather_timezone (loc); - set_system_timezone_async (gweather_timezone_get_tzid (wtz), - make_current_cb, - mcdata); + set_system_timezone_async (gweather_timezone_get_tzid (loc->priv->wtz), + make_current_cb, + mcdata); } const gchar * |