aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog36
-rwxr-xr-xconfigure20
-rw-r--r--configure.ac2
-rw-r--r--debian/changelog8
-rw-r--r--src/datetime-prefs-locations.c62
-rw-r--r--src/datetime-prefs.c31
-rw-r--r--src/datetime-service.c2
7 files changed, 120 insertions, 41 deletions
diff --git a/ChangeLog b/ChangeLog
index 09fa847..06d28f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,41 @@
# Generated by Makefile. Do not edit.
+2012-03-28 Charles Kerr <charles.kerr@canonical.com>
+
+ 0.3.93
+
+2012-03-28 Charles Kerr <charles.kerr@canonical.com>
+
+ on shutdown, free icaltimezone's builtin timezones.
+
+2012-03-27 Charles Kerr <charles.kerr@canonical.com>
+
+ free icaltimezone's list of builtin timezones when shutting down
+
+2012-03-28 Charles Kerr <charles.kerr@canonical.com>
+
+ ensure that our ntp_query_answered() and tz_query_answered() dbus callbacks are cancelled when the datetime prefs page is disposed
+
+2012-03-27 Charles Kerr <charles.kerr@canonical.com>
+
+ cancel the ntp_query_answered() and tz_query_answered() callbacks when the prefs panel is disposed.
+
+2012-03-26 Charles Kerr <charles.kerr@canonical.com>
+
+ merge lp:~charlesk/indicator-datetime/fix-location-leak to fix several memory leaks in datetime's preferences ui reported in lp bug #965533
+
+2012-03-20 Charles Kerr <charles.kerr@canonical.com>
+
+ fix more leaks related to getting strings from COL_NAME and COL_ZONE... these columns are of type G_TYPE_STRING, so we need to g_free() the copies that we pull from the model with gtk_tree_model_get()...
+
+2012-03-20 Charles Kerr <charles.kerr@canonical.com>
+
+ improvements based on feedback from desrt
+
+2012-03-16 Charles Kerr <charles.kerr@canonical.com>
+
+ fix memory leak when saving user-specified timezone locations
+
2012-03-21 Charles Kerr <charles.kerr@canonical.com>
0.3.92
diff --git a/configure b/configure
index 7619854..366d21a 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for indicator-datetime 0.3.92.
+# Generated by GNU Autoconf 2.68 for indicator-datetime 0.3.93.
#
# Report bugs to <http://bugs.launchpad.net/indicator-datetime>.
#
@@ -572,8 +572,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='indicator-datetime'
PACKAGE_TARNAME='indicator-datetime'
-PACKAGE_VERSION='0.3.92'
-PACKAGE_STRING='indicator-datetime 0.3.92'
+PACKAGE_VERSION='0.3.93'
+PACKAGE_STRING='indicator-datetime 0.3.93'
PACKAGE_BUGREPORT='http://bugs.launchpad.net/indicator-datetime'
PACKAGE_URL='http://launchpad.net/indicator-datetime'
@@ -1395,7 +1395,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures indicator-datetime 0.3.92 to adapt to many kinds of systems.
+\`configure' configures indicator-datetime 0.3.93 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1466,7 +1466,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of indicator-datetime 0.3.92:";;
+ short | recursive ) echo "Configuration of indicator-datetime 0.3.93:";;
esac
cat <<\_ACEOF
@@ -1600,7 +1600,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-indicator-datetime configure 0.3.92
+indicator-datetime configure 0.3.93
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -1971,7 +1971,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by indicator-datetime $as_me 0.3.92, which was
+It was created by indicator-datetime $as_me 0.3.93, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2795,7 +2795,7 @@ fi
# Define the identity of the package.
PACKAGE='indicator-datetime'
- VERSION='0.3.92'
+ VERSION='0.3.93'
cat >>confdefs.h <<_ACEOF
@@ -15043,7 +15043,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by indicator-datetime $as_me 0.3.92, which was
+This file was extended by indicator-datetime $as_me 0.3.93, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15110,7 +15110,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-indicator-datetime config.status 0.3.92
+indicator-datetime config.status 0.3.93
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 6377b9a..0bd8b89 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_INIT([indicator-datetime],
- [0.3.92],
+ [0.3.93],
[http://bugs.launchpad.net/indicator-datetime],
[indicator-datetime],
[http://launchpad.net/indicator-datetime])
diff --git a/debian/changelog b/debian/changelog
index 5bafd8d..932cea8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+indicator-datetime (0.3.93-0ubuntu1~ppa1) precise; urgency=low
+
+ * New upstream release.
+ * Fix g-c-c crash caused by datetime's prefs panel (LP: #942450)
+ * Fix several memory leaks in datetime's preferences page (LP: #965533)
+
+ -- Charles Kerr <charles.kerr@canonical.com> Wed, 28 Mar 2012 16:10:35 -0700
+
indicator-datetime (0.3.92-0ubuntu1) precise; urgency=low
* New upstream release.
diff --git a/src/datetime-prefs-locations.c b/src/datetime-prefs-locations.c
index 9c71f8e..c0452d0 100644
--- a/src/datetime-prefs-locations.c
+++ b/src/datetime-prefs-locations.c
@@ -164,9 +164,10 @@ handle_edit (GtkCellRendererText * renderer, gchar * path, gchar * new_text,
// edit), so we set the error icon here if needed. Common way to get to
// this code path is to lose entry focus.
if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &iter, path)) {
- const gchar * name;
+ gchar * name;
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, COL_NAME, &name, -1);
gboolean correct = g_strcmp0 (name, new_text) == 0;
+ g_free (name);
gtk_list_store_set (store, &iter,
COL_VISIBLE_NAME, new_text,
@@ -179,32 +180,36 @@ static gboolean
timezone_selected (GtkEntryCompletion * widget, GtkTreeModel * model,
GtkTreeIter * iter, GtkWidget * dlg)
{
- const gchar * zone, * name;
+ gchar * zone = NULL;
+ gchar * name = NULL;
gtk_tree_model_get (model, iter,
CC_TIMEZONE_COMPLETION_ZONE, &zone,
CC_TIMEZONE_COMPLETION_NAME, &name,
-1);
- if (zone == NULL || zone[0] == 0) {
- const gchar * strlon, * strlat;
- gdouble lon = 0.0, lat = 0.0;
+ /* if no explicit timezone, try to determine one from latlon */
+ if (!zone || !*zone)
+ {
+ gchar * strlat = NULL;
+ gchar * strlon = NULL;
+ gdouble lat = 0;
+ gdouble lon = 0;
gtk_tree_model_get (model, iter,
- CC_TIMEZONE_COMPLETION_LONGITUDE, &strlon,
CC_TIMEZONE_COMPLETION_LATITUDE, &strlat,
+ CC_TIMEZONE_COMPLETION_LONGITUDE, &strlon,
-1);
- if (strlon != NULL && strlon[0] != 0) {
- lon = strtod(strlon, NULL);
- }
-
- if (strlat != NULL && strlat[0] != 0) {
- lat = strtod(strlat, NULL);
- }
+ if (strlat && *strlat) lat = atof(strlat);
+ if (strlon && *strlon) lon = atof(strlon);
CcTimezoneMap * tzmap = CC_TIMEZONE_MAP (g_object_get_data (G_OBJECT (widget), "tzmap"));
- zone = cc_timezone_map_get_timezone_at_coords (tzmap, lon, lat);
+ g_free (zone);
+ zone = g_strdup (cc_timezone_map_get_timezone_at_coords (tzmap, lon, lat));
+
+ g_free (strlat);
+ g_free (strlon);
}
GtkListStore * store = GTK_LIST_STORE (g_object_get_data (G_OBJECT (widget), "store"));
@@ -219,6 +224,10 @@ timezone_selected (GtkEntryCompletion * widget, GtkTreeModel * model,
update_times (dlg);
+ /* cleanup */
+ g_free (name);
+ g_free (zone);
+
return FALSE; // Do normal action too
}
@@ -280,11 +289,11 @@ update_times (GtkWidget * dlg)
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)) {
do {
- const gchar * strzone;
+ gchar * strzone;
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, COL_ZONE, &strzone, -1);
- if (strzone != NULL && strzone[0] != 0) {
+ if (strzone && *strzone) {
GTimeZone * tz = g_time_zone_new (strzone);
GDateTime * now_tz = g_date_time_to_timezone (now, tz);
gchar * format = generate_format_string_at_time (now_tz);
@@ -297,6 +306,7 @@ update_times (GtkWidget * dlg)
g_date_time_unref (now_tz);
g_time_zone_unref (tz);
}
+ g_free (strzone);
} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
}
@@ -343,21 +353,23 @@ save_to_settings (GObject * store, GSettings * conf)
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)) {
+ GString * gstr = g_string_new (NULL);
do {
- const gchar * strzone, * strname;
-
+ gchar * strname;
+ gchar * strzone;
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
COL_NAME, &strname,
COL_ZONE, &strzone,
-1);
-
- if (strzone != NULL && strzone[0] != 0 && strname != NULL && strname[0] != 0) {
- gchar * settings_string = g_strdup_printf("%s %s", strzone, strname);
- g_variant_builder_add (&builder, "s", settings_string);
- g_free (settings_string);
+ if (strzone && *strzone && strname && *strname) {
+ g_string_printf (gstr, "%s %s", strzone, strname);
+ g_variant_builder_add (&builder, "s", gstr->str);
empty = FALSE;
}
+ g_free (strname);
+ g_free (strzone);
} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
+ g_string_free (gstr, TRUE);
}
if (empty) {
@@ -366,9 +378,7 @@ save_to_settings (GObject * store, GSettings * conf)
g_settings_set_strv (conf, SETTINGS_LOCATIONS_S, NULL);
}
else {
- GVariant * locations = g_variant_builder_end (&builder);
- g_settings_set_strv (conf, SETTINGS_LOCATIONS_S, g_variant_get_strv (locations, NULL));
- g_variant_unref (locations);
+ g_settings_set_value (conf, SETTINGS_LOCATIONS_S, g_variant_builder_end (&builder));
}
}
diff --git a/src/datetime-prefs.c b/src/datetime-prefs.c
index bfe75c0..fbb8ea1 100644
--- a/src/datetime-prefs.c
+++ b/src/datetime-prefs.c
@@ -70,6 +70,8 @@ struct _IndicatorDatetimePanelPrivate
gboolean changing_time;
GtkWidget * loc_dlg;
CcTimezoneCompletion * completion;
+ GCancellable * tz_query_cancel;
+ GCancellable * ntp_query_cancel;
};
struct _IndicatorDatetimePanelClass
@@ -214,6 +216,8 @@ ntp_query_answered (GObject *object, GAsyncResult *res, IndicatorDatetimePanel *
GError * error = NULL;
GVariant * answers = g_dbus_proxy_call_finish (G_DBUS_PROXY (object), res, &error);
+ g_clear_object (&self->priv->ntp_query_cancel);
+
if (error != NULL) {
g_warning("Could not query DBus proxy for SettingsDaemon: %s", error->message);
g_error_free(error);
@@ -265,6 +269,8 @@ tz_query_answered (GObject *object, GAsyncResult *res, IndicatorDatetimePanel *
GError * error = NULL;
GVariant * answers = g_dbus_proxy_call_finish (G_DBUS_PROXY (object), res, &error);
+ g_clear_object (&self->priv->tz_query_cancel);
+
if (error != NULL) {
g_warning("Could not query DBus proxy for SettingsDaemon: %s", error->message);
g_error_free(error);
@@ -286,6 +292,7 @@ static void
proxy_ready (GObject *object, GAsyncResult *res, IndicatorDatetimePanel * self)
{
GError * error = NULL;
+ IndicatorDatetimePanelPrivate * priv = self->priv;
self->priv->proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
@@ -296,10 +303,16 @@ proxy_ready (GObject *object, GAsyncResult *res, IndicatorDatetimePanel * self)
}
/* And now, do initial proxy configuration */
- g_dbus_proxy_call (self->priv->proxy, "GetUsingNtp", NULL, G_DBUS_CALL_FLAGS_NONE, -1,
- NULL, (GAsyncReadyCallback)ntp_query_answered, self);
- g_dbus_proxy_call (self->priv->proxy, "GetTimezone", NULL, G_DBUS_CALL_FLAGS_NONE, -1,
- NULL, (GAsyncReadyCallback)tz_query_answered, self);
+ if (priv->ntp_query_cancel == NULL) {
+ priv->ntp_query_cancel = g_cancellable_new();
+ g_dbus_proxy_call (priv->proxy, "GetUsingNtp", NULL, G_DBUS_CALL_FLAGS_NONE, -1,
+ priv->ntp_query_cancel, (GAsyncReadyCallback)ntp_query_answered, self);
+ }
+ if (priv->tz_query_cancel == NULL); {
+ priv->tz_query_cancel = g_cancellable_new();
+ g_dbus_proxy_call (priv->proxy, "GetTimezone", NULL, G_DBUS_CALL_FLAGS_NONE, -1,
+ priv->tz_query_cancel, (GAsyncReadyCallback)tz_query_answered, self);
+ }
}
static void
@@ -784,6 +797,16 @@ indicator_datetime_panel_dispose (GObject * object)
g_clear_object (&priv->builder);
g_clear_object (&priv->proxy);
+ if (priv->tz_query_cancel != NULL) {
+ g_cancellable_cancel (priv->tz_query_cancel);
+ g_clear_object (&priv->tz_query_cancel);
+ }
+
+ if (priv->ntp_query_cancel != NULL) {
+ g_cancellable_cancel (priv->ntp_query_cancel);
+ g_clear_object (&priv->ntp_query_cancel);
+ }
+
if (priv->loc_dlg) {
gtk_widget_destroy (priv->loc_dlg);
priv->loc_dlg = NULL;
diff --git a/src/datetime-service.c b/src/datetime-service.c
index a10cbb5..fb95928 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -1479,6 +1479,8 @@ main (int argc, char ** argv)
g_object_unref(G_OBJECT(server));
g_object_unref(G_OBJECT(root));
+ icaltimezone_free_builtin_timezones();
+
geo_address_clean();
geo_client_clean();