From ac5525d0fcac51a0a1c812723f2637e40ab8dd19 Mon Sep 17 00:00:00 2001 From: David Shea Date: Fri, 2 May 2014 11:18:12 -0400 Subject: [PATCH] New upstream release libtimezonemap-0.4.2 --- .gitignore | 1 + ...h => 0001-Added-a-glade-catalog-file.patch | 6 +- ...hitespace-and-indentation-consistent.patch | 1339 ----------------- 0002-Remove-the-color-codes-map.patch | 1256 ++++++++++++++++ ...PL-comments-with-the-new-FSF-address.patch | 85 -- ...te-local-copies-of-string-properties.patch | 75 - ...CcTimezoneLocation-into-its-own-file.patch | 1157 -------------- ...-to-clear-the-location-set-for-a-CcT.patch | 75 - ...ne-highlight-to-be-manually-set-sepa.patch | 171 --- ...-r36-from-lp-dshea-timezonemap-trunk.patch | 25 - ...-r38-from-lp-dshea-timezonemap-trunk.patch | 419 ------ ...-r39-from-lp-dshea-timezonemap-trunk.patch | 22 - ...-r37-from-lp-dshea-timezonemap-trunk.patch | 60 - ...location.h-to-timezonemapincludes_HE.patch | 25 - 0017-Set-en_name-correctly.patch | 25 - ...pe_init-on-glib-2.35-it-s-deprecated.patch | 27 - libtimezonemap.spec | 35 +- sources | 2 +- 18 files changed, 1268 insertions(+), 3537 deletions(-) rename 0011-Added-a-glade-catalog-file.patch => 0001-Added-a-glade-catalog-file.patch (96%) delete mode 100644 0001-Make-whitespace-and-indentation-consistent.patch create mode 100644 0002-Remove-the-color-codes-map.patch delete mode 100644 0004-Update-the-GPL-comments-with-the-new-FSF-address.patch delete mode 100644 0005-Create-local-copies-of-string-properties.patch delete mode 100644 0006-Moved-CcTimezoneLocation-into-its-own-file.patch delete mode 100644 0009-Added-a-function-to-clear-the-location-set-for-a-CcT.patch delete mode 100644 0010-Allow-the-timezone-highlight-to-be-manually-set-sepa.patch delete mode 100644 0012-Merge-r36-from-lp-dshea-timezonemap-trunk.patch delete mode 100644 0013-Merge-r38-from-lp-dshea-timezonemap-trunk.patch delete mode 100644 0014-Merge-r39-from-lp-dshea-timezonemap-trunk.patch delete mode 100644 0015-Merge-r37-from-lp-dshea-timezonemap-trunk.patch delete mode 100644 0016-Add-cc-timezone-location.h-to-timezonemapincludes_HE.patch delete mode 100644 0017-Set-en_name-correctly.patch delete mode 100644 0018-Don-t-call-g_type_init-on-glib-2.35-it-s-deprecated.patch diff --git a/.gitignore b/.gitignore index 5baf6ce..5efbe33 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /libtimezonemap_0.4.1.tar.gz +/libtimezonemap_0.4.2.tar.gz diff --git a/0011-Added-a-glade-catalog-file.patch b/0001-Added-a-glade-catalog-file.patch similarity index 96% rename from 0011-Added-a-glade-catalog-file.patch rename to 0001-Added-a-glade-catalog-file.patch index f674ff9..076ef86 100644 --- a/0011-Added-a-glade-catalog-file.patch +++ b/0001-Added-a-glade-catalog-file.patch @@ -1,7 +1,7 @@ -From fc196f9d0c8ea0531183608dd7bcccc36fffd056 Mon Sep 17 00:00:00 2001 +From 9148e44277d558b6f0ca2882e8b511bc31c27f04 Mon Sep 17 00:00:00 2001 From: David Shea Date: Wed, 27 Nov 2013 11:22:42 -0500 -Subject: [PATCH 11/11] Added a glade catalog file. +Subject: [PATCH 1/2] Added a glade catalog file. This allows CcTimezoneMap and CcTimezoneCompletion to be used in glade. --- @@ -99,5 +99,5 @@ index 0000000..a43e925 + + -- -1.8.4.2 +1.9.0 diff --git a/0001-Make-whitespace-and-indentation-consistent.patch b/0001-Make-whitespace-and-indentation-consistent.patch deleted file mode 100644 index 31680b0..0000000 --- a/0001-Make-whitespace-and-indentation-consistent.patch +++ /dev/null @@ -1,1339 +0,0 @@ -From 721adaf8332cf0a67843d8734e9e51a58894f8de Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Tue, 5 Nov 2013 11:31:07 +0000 -Subject: [PATCH 01/10] Make whitespace and indentation consistent - ---- - src/cc-timezone-map.c | 87 +++---- - src/test-timezone.c | 85 +++---- - src/timezone-completion.c | 568 +++++++++++++++++++++++++--------------------- - src/tz.c | 236 +++++++++---------- - 4 files changed, 519 insertions(+), 457 deletions(-) - -diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c -index 652f838..4d7fa40 100644 ---- a/src/cc-timezone-map.c -+++ b/src/cc-timezone-map.c -@@ -974,40 +974,41 @@ get_loc_for_xy (GtkWidget * widget, gint x, gint y) - width = alloc.width; - height = alloc.height; - -- if (x == priv->previous_x && y == priv->previous_y) { -- priv->distances = g_list_next (priv->distances); -- location = (CcTimezoneLocation*) priv->distances->data; -- } else { -- g_list_free (priv->distances); -- priv->distances = NULL; -- for (i = 0; i < array->len; i++) -- { -- gdouble pointx, pointy, dx, dy; -- CcTimezoneLocation *loc = array->pdata[i]; -+ if (x == priv->previous_x && y == priv->previous_y) -+ { -+ priv->distances = g_list_next (priv->distances); -+ location = (CcTimezoneLocation*) priv->distances->data; -+ } else { -+ g_list_free (priv->distances); -+ priv->distances = NULL; -+ for (i = 0; i < array->len; i++) -+ { -+ gdouble pointx, pointy, dx, dy; -+ CcTimezoneLocation *loc = array->pdata[i]; - -- g_object_get_property(G_OBJECT (loc), "longitude", &glon); -- g_object_get_property(G_OBJECT (loc), "latitude", &glat); -- pointx = convert_longtitude_to_x (g_value_get_double(&glon), width); -- pointy = convert_latitude_to_y (g_value_get_double(&glat), height); -+ g_object_get_property(G_OBJECT (loc), "longitude", &glon); -+ g_object_get_property(G_OBJECT (loc), "latitude", &glat); -+ pointx = convert_longtitude_to_x (g_value_get_double(&glon), width); -+ pointy = convert_latitude_to_y (g_value_get_double(&glat), height); - -- dx = pointx - x; -- dy = pointy - y; -+ dx = pointx - x; -+ dy = pointy - y; - -- g_value_set_double(&gdist, (gdouble) dx * dx + dy * dy); -- g_object_set_property(G_OBJECT (loc), "dist", &gdist); -- priv->distances = g_list_prepend (priv->distances, loc); -- } -- priv->distances = g_list_sort (priv->distances, (GCompareFunc) sort_locations); -- location = (CcTimezoneLocation*) priv->distances->data; -- priv->previous_x = x; -- priv->previous_y = y; -- } -+ g_value_set_double(&gdist, (gdouble) dx * dx + dy * dy); -+ g_object_set_property(G_OBJECT (loc), "dist", &gdist); -+ priv->distances = g_list_prepend (priv->distances, loc); -+ } -+ priv->distances = g_list_sort (priv->distances, (GCompareFunc) sort_locations); -+ location = (CcTimezoneLocation*) priv->distances->data; -+ priv->previous_x = x; -+ priv->previous_y = y; -+ } - -- g_value_unset (&glon); -- g_value_unset (&glat); -- g_value_unset (&gdist); -+ g_value_unset (&glon); -+ g_value_unset (&glat); -+ g_value_unset (&gdist); - -- return location; -+ return location; - } - - static gboolean -@@ -1199,20 +1200,20 @@ cc_timezone_map_get_timezone_at_coords (CcTimezoneMap *map, gdouble lon, gdouble - if (zone < G_N_ELEMENTS(olsen_map_timezones)) - city = olsen_map_timezones[zone]; - -- if (city != NULL) { -- return city; -- } -- else { -- GtkAllocation alloc; -- GValue val_zone = {0}; -- g_value_init (&val_zone, G_TYPE_STRING); -- gtk_widget_get_allocation (GTK_WIDGET (map), &alloc); -- x = convert_longtitude_to_x(lon, alloc.width); -- y = convert_latitude_to_y(lat, alloc.height); -- CcTimezoneLocation * loc = get_loc_for_xy(GTK_WIDGET (map), x, y); -- g_value_unset (&val_zone); -- return g_value_get_string(&val_zone); -- } -+ if (city != NULL) -+ { -+ return city; -+ } else { -+ GtkAllocation alloc; -+ GValue val_zone = {0}; -+ g_value_init (&val_zone, G_TYPE_STRING); -+ gtk_widget_get_allocation (GTK_WIDGET (map), &alloc); -+ x = convert_longtitude_to_x(lon, alloc.width); -+ y = convert_latitude_to_y(lat, alloc.height); -+ CcTimezoneLocation * loc = get_loc_for_xy(GTK_WIDGET (map), x, y); -+ g_value_unset (&val_zone); -+ return g_value_get_string(&val_zone); -+ } - } - - void -diff --git a/src/test-timezone.c b/src/test-timezone.c -index 9aaf707..a2271c4 100644 ---- a/src/test-timezone.c -+++ b/src/test-timezone.c -@@ -5,58 +5,61 @@ - - int main (int argc, char **argv) - { -- TzDB *db; -- GPtrArray *locs; -- guint i; -- char *pixmap_dir; -- int retval = 0; -+ TzDB *db; -+ GPtrArray *locs; -+ guint i; -+ char *pixmap_dir; -+ int retval = 0; - - setlocale (LC_ALL, ""); - -- if (argc == 2) { -- pixmap_dir = g_strdup (argv[1]); -- } else if (argc == 1) { -- pixmap_dir = g_strdup ("data/"); -- } else { -- g_message ("Usage: %s [PIXMAP DIRECTORY]", argv[0]); -- return 1; -- } -+ if (argc == 2) -+ { -+ pixmap_dir = g_strdup (argv[1]); -+ } else if (argc == 1) { -+ pixmap_dir = g_strdup ("data/"); -+ } else { -+ g_message ("Usage: %s [PIXMAP DIRECTORY]", argv[0]); -+ return 1; -+ } - -- g_type_init(); -- GValue zone = {0}; -- g_value_init(&zone, G_TYPE_STRING); -+ g_type_init(); -+ GValue zone = {0}; -+ g_value_init(&zone, G_TYPE_STRING); - -- db = tz_load_db (); -- locs = tz_get_locations (db); -- for (i = 0; i < locs->len ; i++) { -- CcTimezoneLocation *loc = locs->pdata[i]; -+ db = tz_load_db (); -+ locs = tz_get_locations (db); -+ for (i = 0; i < locs->len ; i++) -+ { -+ CcTimezoneLocation *loc = locs->pdata[i]; - -- TzInfo *info; -- char *filename, *path; -- gdouble selected_offset; -- char buf[16]; -- g_object_get_property(G_OBJECT (loc), "zone", &zone); -+ TzInfo *info; -+ char *filename, *path; -+ gdouble selected_offset; -+ char buf[16]; -+ g_object_get_property(G_OBJECT (loc), "zone", &zone); - -- info = tz_info_from_location (loc); -- selected_offset = tz_location_get_utc_offset (loc) -- / (60.0*60.0) + ((info->daylight) ? -1.0 : 0.0); -+ info = tz_info_from_location (loc); -+ selected_offset = tz_location_get_utc_offset (loc) -+ / (60.0*60.0) + ((info->daylight) ? -1.0 : 0.0); - -- filename = g_strdup_printf ("timezone_%s.png", -+ filename = g_strdup_printf ("timezone_%s.png", - g_ascii_formatd (buf, sizeof (buf), - "%g", selected_offset)); -- path = g_build_filename (pixmap_dir, filename, NULL); -+ path = g_build_filename (pixmap_dir, filename, NULL); - -- if (g_file_test (path, G_FILE_TEST_IS_REGULAR) == FALSE) { -- g_message ("File '%s' missing for zone '%s'", filename, g_value_get_string(&zone)); -- retval = 1; -- } -+ if (g_file_test (path, G_FILE_TEST_IS_REGULAR) == FALSE) -+ { -+ g_message ("File '%s' missing for zone '%s'", filename, g_value_get_string(&zone)); -+ retval = 1; -+ } - -- g_free (filename); -- g_free (path); -- tz_info_free (info); -- } -- tz_db_free (db); -- g_free (pixmap_dir); -+ g_free (filename); -+ g_free (path); -+ tz_info_free (info); -+ } -+ tz_db_free (db); -+ g_free (pixmap_dir); - -- return retval; -+ return retval; - } -diff --git a/src/timezone-completion.c b/src/timezone-completion.c -index 3d42168..f6ca8c8 100644 ---- a/src/timezone-completion.c -+++ b/src/timezone-completion.c -@@ -138,13 +138,14 @@ json_parse_ready (GObject *object, GAsyncResult *res, gpointer user_data) - g_cancellable_reset (priv->cancel); - } - -- if (error != NULL) { -- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -- save_and_use_model (completion, priv->initial_model); -- g_warning ("Could not parse geoname JSON data: %s", error->message); -- g_error_free (error); -- return; -- } -+ if (error != NULL) -+ { -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ save_and_use_model (completion, priv->initial_model); -+ g_warning ("Could not parse geoname JSON data: %s", error->message); -+ g_error_free (error); -+ return; -+ } - - GtkListStore * store = gtk_list_store_new (CC_TIMEZONE_COMPLETION_LAST, - G_TYPE_STRING, -@@ -156,73 +157,85 @@ json_parse_ready (GObject *object, GAsyncResult *res, gpointer user_data) - - JsonReader * reader = json_reader_new (json_parser_get_root (JSON_PARSER (object))); - -- if (!json_reader_is_array (reader)) { -- g_warning ("Could not parse geoname JSON data"); -- save_and_use_model (completion, priv->initial_model); -- g_object_unref (G_OBJECT (reader)); -- return; -- } -+ if (!json_reader_is_array (reader)) -+ { -+ g_warning ("Could not parse geoname JSON data"); -+ save_and_use_model (completion, priv->initial_model); -+ g_object_unref (G_OBJECT (reader)); -+ return; -+ } - - gint i, count = json_reader_count_elements (reader); -- for (i = 0; i < count; ++i) { -- if (!json_reader_read_element (reader, i)) -- continue; -+ for (i = 0; i < count; ++i) -+ { -+ if (!json_reader_read_element (reader, i)) -+ continue; - -- if (json_reader_is_object (reader)) { -- const gchar * name = NULL; -- const gchar * admin1 = NULL; -- const gchar * country = NULL; -- const gchar * longitude = NULL; -- const gchar * latitude = NULL; -- gboolean skip = FALSE; -- if (json_reader_read_member (reader, "name")) { -- name = json_reader_get_string_value (reader); -- json_reader_end_member (reader); -- } -- if (json_reader_read_member (reader, "admin1")) { -- admin1 = json_reader_get_string_value (reader); -- json_reader_end_member (reader); -- } -- if (json_reader_read_member (reader, "country")) { -- country = json_reader_get_string_value (reader); -- json_reader_end_member (reader); -- } -- if (json_reader_read_member (reader, "longitude")) { -- longitude = json_reader_get_string_value (reader); -- json_reader_end_member (reader); -- } -- if (json_reader_read_member (reader, "latitude")) { -- latitude = json_reader_get_string_value (reader); -- json_reader_end_member (reader); -- } -+ if (json_reader_is_object (reader)) -+ { -+ const gchar * name = NULL; -+ const gchar * admin1 = NULL; -+ const gchar * country = NULL; -+ const gchar * longitude = NULL; -+ const gchar * latitude = NULL; -+ gboolean skip = FALSE; -+ if (json_reader_read_member (reader, "name")) -+ { -+ name = json_reader_get_string_value (reader); -+ json_reader_end_member (reader); -+ } -+ if (json_reader_read_member (reader, "admin1")) -+ { -+ admin1 = json_reader_get_string_value (reader); -+ json_reader_end_member (reader); -+ } -+ if (json_reader_read_member (reader, "country")) -+ { -+ country = json_reader_get_string_value (reader); -+ json_reader_end_member (reader); -+ } -+ if (json_reader_read_member (reader, "longitude")) -+ { -+ longitude = json_reader_get_string_value (reader); -+ json_reader_end_member (reader); -+ } -+ if (json_reader_read_member (reader, "latitude")) -+ { -+ latitude = json_reader_get_string_value (reader); -+ json_reader_end_member (reader); -+ } - - if (g_strcmp0(name, prev_name) == 0 && - g_strcmp0(admin1, prev_admin1) == 0 && -- g_strcmp0(country, prev_country) == 0) { -- // Sometimes the data will have duplicate entries that only differ -- // in longitude and latitude. e.g. "rio de janeiro", "wellington" -- skip = TRUE; -- } -+ g_strcmp0(country, prev_country) == 0) -+ { -+ // Sometimes the data will have duplicate entries that only differ -+ // in longitude and latitude. e.g. "rio de janeiro", "wellington" -+ skip = TRUE; -+ } - -- if (!skip) { -- GtkTreeIter iter; -- gtk_list_store_append (store, &iter); -- gtk_list_store_set (store, &iter, -- CC_TIMEZONE_COMPLETION_ZONE, NULL, -- CC_TIMEZONE_COMPLETION_NAME, name, -- CC_TIMEZONE_COMPLETION_ADMIN1, admin1, -- CC_TIMEZONE_COMPLETION_COUNTRY, country, -- CC_TIMEZONE_COMPLETION_LONGITUDE, longitude, -- CC_TIMEZONE_COMPLETION_LATITUDE, latitude, -- -1); -- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store), -- CC_TIMEZONE_COMPLETION_NAME, sort_zone, -- g_utf8_casefold(priv->request_text, -1), -- g_free); -- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), -- CC_TIMEZONE_COMPLETION_NAME, -- GTK_SORT_ASCENDING); -- } -+ if (!skip) -+ { -+ GtkTreeIter iter; -+ gtk_list_store_append (store, &iter); -+ gtk_list_store_set (store, &iter, -+ CC_TIMEZONE_COMPLETION_ZONE, NULL, -+ CC_TIMEZONE_COMPLETION_NAME, name, -+ CC_TIMEZONE_COMPLETION_ADMIN1, admin1, -+ CC_TIMEZONE_COMPLETION_COUNTRY, country, -+ CC_TIMEZONE_COMPLETION_LONGITUDE, longitude, -+ CC_TIMEZONE_COMPLETION_LATITUDE, latitude, -+ -1); -+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store), -+ CC_TIMEZONE_COMPLETION_NAME, -+ sort_zone, -+ g_utf8_casefold(priv->request_text, -+ -1), -+ g_free); -+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), -+ CC_TIMEZONE_COMPLETION_NAME, -+ GTK_SORT_ASCENDING); -+ } - - prev_name = name; - prev_admin1 = admin1; -@@ -232,19 +245,21 @@ json_parse_ready (GObject *object, GAsyncResult *res, gpointer user_data) - json_reader_end_element (reader); - } - -- if (strlen (priv->request_text) < 4) { -- gchar * lower_text = g_ascii_strdown (priv->request_text, -1); -- if (g_strcmp0 (lower_text, "ut") == 0 || -- g_strcmp0 (lower_text, "utc") == 0) { -- GtkTreeIter iter; -- gtk_list_store_append (store, &iter); -- gtk_list_store_set (store, &iter, -- CC_TIMEZONE_COMPLETION_ZONE, "UTC", -- CC_TIMEZONE_COMPLETION_NAME, "UTC", -- -1); -+ if (strlen (priv->request_text) < 4) -+ { -+ gchar * lower_text = g_ascii_strdown (priv->request_text, -1); -+ if (g_strcmp0 (lower_text, "ut") == 0 || -+ g_strcmp0 (lower_text, "utc") == 0) -+ { -+ GtkTreeIter iter; -+ gtk_list_store_append (store, &iter); -+ gtk_list_store_set (store, &iter, -+ CC_TIMEZONE_COMPLETION_ZONE, "UTC", -+ CC_TIMEZONE_COMPLETION_NAME, "UTC", -+ -1); -+ } -+ g_free (lower_text); - } -- g_free (lower_text); -- } - - save_and_use_model (completion, GTK_TREE_MODEL (store)); - g_object_unref (G_OBJECT (reader)); -@@ -260,17 +275,20 @@ geonames_data_ready (GObject *object, GAsyncResult *res, gpointer user_data) - - stream = g_file_read_finish (G_FILE (object), res, &error); - -- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && priv->cancel) { -- g_cancellable_reset (priv->cancel); -- } -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && priv->cancel) -+ { -+ g_cancellable_reset (priv->cancel); -+ } - -- if (error != NULL) { -- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -- save_and_use_model (completion, priv->initial_model); -- g_warning ("Could not connect to geoname lookup server: %s", error->message); -- g_error_free (error); -- return; -- } -+ if (error != NULL) -+ { -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ save_and_use_model (completion, priv->initial_model); -+ g_warning ("Could not connect to geoname lookup server: %s", -+ error->message); -+ g_error_free (error); -+ return; -+ } - - JsonParser * parser = json_parser_new (); - json_parser_load_from_stream_async (parser, G_INPUT_STREAM (stream), priv->cancel, -@@ -286,11 +304,12 @@ get_locale (void) - const gchar *env = NULL; - gint i; - -- for (i = 0; env_names[i]; i++) { -- env = g_getenv (env_names[i]); -- if (env != NULL && env[0] != 0) -- break; -- } -+ for (i = 0; env_names[i]; i++) -+ { -+ env = g_getenv (env_names[i]); -+ if (env != NULL && env[0] != 0) -+ break; -+ } - - if (env == NULL) - return NULL; -@@ -301,10 +320,11 @@ get_locale (void) - if (split == NULL) - return NULL; - -- if (split[0] == NULL) { -- g_strfreev (split); -- return NULL; -- } -+ if (split[0] == NULL) -+ { -+ g_strfreev (split); -+ return NULL; -+ } - - gchar *locale = g_strdup (split[0]); - g_strfreev (split); -@@ -316,15 +336,16 @@ get_version (void) - { - static gchar *version = NULL; - -- if (version == NULL) { -- gchar *stdout = NULL; -- g_spawn_command_line_sync ("lsb_release -rs", &stdout, NULL, NULL, NULL); -+ if (version == NULL) -+ { -+ gchar *stdout = NULL; -+ g_spawn_command_line_sync ("lsb_release -rs", &stdout, NULL, NULL, NULL); - -- if (stdout != NULL) -- version = g_strstrip (stdout); -- else -- version = g_strdup(""); -- } -+ if (stdout != NULL) -+ version = g_strstrip (stdout); -+ else -+ version = g_strdup(""); -+ } - - return version; - } -@@ -336,15 +357,17 @@ request_zones (CcTimezoneCompletion * completion) - - priv->queued_request = 0; - -- if (priv->entry == NULL) { -- return FALSE; -- } -+ if (priv->entry == NULL) -+ { -+ return FALSE; -+ } - - /* Cancel any ongoing request */ -- if (priv->cancel) { -- g_cancellable_cancel (priv->cancel); -- g_cancellable_reset (priv->cancel); -- } -+ if (priv->cancel) -+ { -+ g_cancellable_cancel (priv->cancel); -+ g_cancellable_reset (priv->cancel); -+ } - g_free (priv->request_text); - - const gchar * text = gtk_entry_get_text (priv->entry); -@@ -371,21 +394,26 @@ entry_changed (GtkEntry * entry, CcTimezoneCompletion * completion) - { - CcTimezoneCompletionPrivate * priv = completion->priv; - -- if (priv->queued_request) { -- g_source_remove (priv->queued_request); -- priv->queued_request = 0; -- } -+ if (priv->queued_request) -+ { -+ g_source_remove (priv->queued_request); -+ priv->queued_request = 0; -+ } - - /* See if we've already got this one */ - const gchar * text = gtk_entry_get_text (priv->entry); - gpointer data; -- if (g_hash_table_lookup_extended (priv->request_table, text, NULL, &data)) { -- gtk_entry_completion_set_model (GTK_ENTRY_COMPLETION (completion), GTK_TREE_MODEL (data)); -- } -- else { -- priv->queued_request = g_timeout_add (300, (GSourceFunc)request_zones, completion); -- gtk_entry_completion_set_model (GTK_ENTRY_COMPLETION (completion), NULL); -- } -+ if (g_hash_table_lookup_extended (priv->request_table, text, NULL, &data)) -+ { -+ gtk_entry_completion_set_model (GTK_ENTRY_COMPLETION (completion), -+ GTK_TREE_MODEL (data)); -+ } -+ else -+ { -+ priv->queued_request = g_timeout_add (300, (GSourceFunc)request_zones, -+ completion); -+ gtk_entry_completion_set_model (GTK_ENTRY_COMPLETION (completion), NULL); -+ } - gtk_entry_completion_complete (GTK_ENTRY_COMPLETION (completion)); - } - -@@ -395,18 +423,21 @@ get_descendent (GtkWidget * parent, GType type) - if (g_type_is_a (G_OBJECT_TYPE (parent), type)) - return parent; - -- if (GTK_IS_CONTAINER (parent)) { -- GList * children = gtk_container_get_children (GTK_CONTAINER (parent)); -- GList * iter; -- for (iter = children; iter; iter = iter->next) { -- GtkWidget * found = get_descendent (GTK_WIDGET (iter->data), type); -- if (found) { -- g_list_free (children); -- return found; -- } -+ if (GTK_IS_CONTAINER (parent)) -+ { -+ GList * children = gtk_container_get_children (GTK_CONTAINER (parent)); -+ GList * iter; -+ for (iter = children; iter; iter = iter->next) -+ { -+ GtkWidget * found = get_descendent (GTK_WIDGET (iter->data), type); -+ if (found) -+ { -+ g_list_free (children); -+ return found; -+ } -+ } -+ g_list_free (children); - } -- g_list_free (children); -- } - - return NULL; - } -@@ -429,20 +460,26 @@ find_popup_treeview (GtkWidget * widget, GtkTreeModel * model) - GtkWindowGroup * group = gtk_window_get_group (GTK_WINDOW (toplevel)); - GList * windows = gtk_window_group_list_windows (group); - GList * iter; -- for (iter = windows; iter; iter = iter->next) { -- if (iter->data == toplevel) -- continue; // Skip our own window, we don't have it -- GtkWidget * view = get_descendent (GTK_WIDGET (iter->data), GTK_TYPE_TREE_VIEW); -- if (view != NULL) { -- GtkTreeModel * tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); -- if (GTK_IS_TREE_MODEL_FILTER (tree_model)) -- tree_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (tree_model)); -- if (tree_model == model) { -- g_list_free (windows); -- return GTK_TREE_VIEW (view); -- } -+ for (iter = windows; iter; iter = iter->next) -+ { -+ if (iter->data == toplevel) -+ continue; // Skip our own window, we don't have it -+ GtkWidget * view = get_descendent (GTK_WIDGET (iter->data), -+ GTK_TYPE_TREE_VIEW); -+ if (view != NULL) -+ { -+ GtkTreeModel * tree_model = -+ gtk_tree_view_get_model (GTK_TREE_VIEW (view)); -+ if (GTK_IS_TREE_MODEL_FILTER (tree_model)) -+ tree_model = gtk_tree_model_filter_get_model ( -+ GTK_TREE_MODEL_FILTER (tree_model)); -+ if (tree_model == model) -+ { -+ g_list_free (windows); -+ return GTK_TREE_VIEW (view); -+ } -+ } - } -- } - g_list_free (windows); - - return NULL; -@@ -453,26 +490,30 @@ entry_keypress (GtkEntry * entry, GdkEventKey *event, CcTimezoneCompletion * co - { - if (event->keyval == GDK_KEY_ISO_Enter || - event->keyval == GDK_KEY_KP_Enter || -- event->keyval == GDK_KEY_Return) { -- /* Make sure that user has a selection to choose, otherwise ignore */ -- GtkTreeModel * model = gtk_entry_completion_get_model (GTK_ENTRY_COMPLETION (completion)); -- GtkTreeView * view = find_popup_treeview (GTK_WIDGET (entry), model); -- if (view == NULL) { -- // Just beep if popup hasn't appeared yet. -- gtk_widget_error_bell (GTK_WIDGET (entry)); -- return TRUE; -- } -+ event->keyval == GDK_KEY_Return) -+ { -+ /* Make sure that user has a selection to choose, otherwise ignore */ -+ GtkTreeModel * model = gtk_entry_completion_get_model ( -+ GTK_ENTRY_COMPLETION (completion)); -+ GtkTreeView * view = find_popup_treeview (GTK_WIDGET (entry), model); -+ if (view == NULL) -+ { -+ // Just beep if popup hasn't appeared yet. -+ gtk_widget_error_bell (GTK_WIDGET (entry)); -+ return TRUE; -+ } - -- GtkTreeSelection * sel = gtk_tree_view_get_selection (view); -- GtkTreeModel * sel_model = NULL; -- if (!gtk_tree_selection_get_selected (sel, &sel_model, NULL)) { -- // No selection, we should help them out and select first item in list -- GtkTreeIter iter; -- if (gtk_tree_model_get_iter_first (sel_model, &iter)) -- gtk_tree_selection_select_iter (sel, &iter); -- // And fall through to normal handler code -+ GtkTreeSelection * sel = gtk_tree_view_get_selection (view); -+ GtkTreeModel * sel_model = NULL; -+ if (!gtk_tree_selection_get_selected (sel, &sel_model, NULL)) -+ { -+ // No selection, we should help them out and select first item in list -+ GtkTreeIter iter; -+ if (gtk_tree_model_get_iter_first (sel_model, &iter)) -+ gtk_tree_selection_select_iter (sel, &iter); -+ // And fall through to normal handler code -+ } - } -- } - - return FALSE; - } -@@ -482,32 +523,37 @@ cc_timezone_completion_watch_entry (CcTimezoneCompletion * completion, GtkEntry - { - CcTimezoneCompletionPrivate * priv = completion->priv; - -- if (priv->queued_request) { -- g_source_remove (priv->queued_request); -- priv->queued_request = 0; -- } -- if (priv->entry) { -- g_signal_handler_disconnect (priv->entry, priv->changed_id); -- priv->changed_id = 0; -- g_signal_handler_disconnect (priv->entry, priv->keypress_id); -- priv->keypress_id = 0; -- g_object_remove_weak_pointer (G_OBJECT (priv->entry), (gpointer *)&priv->entry); -- gtk_entry_set_completion (priv->entry, NULL); -- } -+ if (priv->queued_request) -+ { -+ g_source_remove (priv->queued_request); -+ priv->queued_request = 0; -+ } -+ if (priv->entry) -+ { -+ g_signal_handler_disconnect (priv->entry, priv->changed_id); -+ priv->changed_id = 0; -+ g_signal_handler_disconnect (priv->entry, priv->keypress_id); -+ priv->keypress_id = 0; -+ g_object_remove_weak_pointer (G_OBJECT (priv->entry), (gpointer *)&priv->entry); -+ gtk_entry_set_completion (priv->entry, NULL); -+ } - - priv->entry = entry; - -- if (entry) { -- guint id = g_signal_connect (entry, "changed", G_CALLBACK (entry_changed), completion); -- priv->changed_id = id; -+ if (entry) -+ { -+ guint id = g_signal_connect (entry, "changed", -+ G_CALLBACK (entry_changed), completion); -+ priv->changed_id = id; - -- id = g_signal_connect (entry, "key-press-event", G_CALLBACK (entry_keypress), completion); -- priv->keypress_id = id; -+ id = g_signal_connect (entry, "key-press-event", -+ G_CALLBACK (entry_keypress), completion); -+ priv->keypress_id = id; - -- g_object_add_weak_pointer (G_OBJECT (entry), (gpointer *)&priv->entry); -+ g_object_add_weak_pointer (G_OBJECT (entry), (gpointer *)&priv->entry); - -- gtk_entry_set_completion (entry, GTK_ENTRY_COMPLETION (completion)); -- } -+ gtk_entry_set_completion (entry, GTK_ENTRY_COMPLETION (completion)); -+ } - } - - static GtkListStore * -@@ -525,37 +571,38 @@ get_initial_model (void) - G_TYPE_STRING); - - gint i; -- for (i = 0; i < locations->len; ++i) { -- CcTimezoneLocation * loc = g_ptr_array_index (locations, i); -- GtkTreeIter iter; -- gtk_list_store_append (store, &iter); -+ for (i = 0; i < locations->len; ++i) -+ { -+ CcTimezoneLocation * loc = g_ptr_array_index (locations, i); -+ GtkTreeIter iter; -+ gtk_list_store_append (store, &iter); - -- gchar * zone; -- gchar * country; -- gchar * en_name; // FIXME: need something better for non-English locales -- gdouble longitude; -- gdouble latitude; -- g_object_get (loc, "zone", &zone, "country", &country, "en_name", &en_name, -- "longitude", &longitude, "latitude", &latitude, -- NULL); -+ gchar * zone; -+ gchar * country; -+ gchar * en_name; // FIXME: need something better for non-English locales -+ gdouble longitude; -+ gdouble latitude; -+ g_object_get (loc, "zone", &zone, "country", &country, "en_name", &en_name, -+ "longitude", &longitude, "latitude", &latitude, -+ NULL); - -- gchar * longitude_s = g_strdup_printf ("%f", longitude); -- gchar * latitude_s= g_strdup_printf ("%f", latitude); -+ gchar * longitude_s = g_strdup_printf ("%f", longitude); -+ gchar * latitude_s= g_strdup_printf ("%f", latitude); - -- gtk_list_store_set (store, &iter, -- CC_TIMEZONE_COMPLETION_ZONE, NULL, -- CC_TIMEZONE_COMPLETION_NAME, en_name, -- CC_TIMEZONE_COMPLETION_COUNTRY, country, -- CC_TIMEZONE_COMPLETION_LONGITUDE, longitude_s, -- CC_TIMEZONE_COMPLETION_LATITUDE, latitude_s, -- -1); -+ gtk_list_store_set (store, &iter, -+ CC_TIMEZONE_COMPLETION_ZONE, NULL, -+ CC_TIMEZONE_COMPLETION_NAME, en_name, -+ CC_TIMEZONE_COMPLETION_COUNTRY, country, -+ CC_TIMEZONE_COMPLETION_LONGITUDE, longitude_s, -+ CC_TIMEZONE_COMPLETION_LATITUDE, latitude_s, -+ -1); - -- g_free (latitude_s); -- g_free (longitude_s); -- g_free (en_name); -- g_free (country); -- g_free (zone); -- } -+ g_free (latitude_s); -+ g_free (longitude_s); -+ g_free (en_name); -+ g_free (country); -+ g_free (zone); -+ } - - GtkTreeIter iter; - gtk_list_store_append (store, &iter); -@@ -581,13 +628,14 @@ data_func (GtkCellLayout *cell_layout, GtkCellRenderer *cell, - -1); - - gchar * user_name; -- if (country == NULL || country[0] == 0) { -- user_name = g_strdup (name); -- } else if (admin1 == NULL || admin1[0] == 0) { -- user_name = g_strdup_printf ("%s (%s)", name, country); -- } else { -- user_name = g_strdup_printf ("%s (%s, %s)", name, admin1, country); -- } -+ if (country == NULL || country[0] == 0) -+ { -+ user_name = g_strdup (name); -+ } else if (admin1 == NULL || admin1[0] == 0) { -+ user_name = g_strdup_printf ("%s (%s)", name, country); -+ } else { -+ user_name = g_strdup_printf ("%s (%s, %s)", name, admin1, country); -+ } - - g_object_set (G_OBJECT (cell), "markup", user_name, NULL); - } -@@ -641,49 +689,57 @@ cc_timezone_completion_dispose (GObject * object) - CcTimezoneCompletion * completion = CC_TIMEZONE_COMPLETION (object); - CcTimezoneCompletionPrivate * priv = completion->priv; - -- if (priv->changed_id) { -- if (priv->entry) -- g_signal_handler_disconnect (priv->entry, priv->changed_id); -- priv->changed_id = 0; -- } -+ if (priv->changed_id) -+ { -+ if (priv->entry) -+ g_signal_handler_disconnect (priv->entry, priv->changed_id); -+ priv->changed_id = 0; -+ } - -- if (priv->keypress_id) { -- if (priv->entry) -- g_signal_handler_disconnect (priv->entry, priv->keypress_id); -- priv->keypress_id = 0; -- } -+ if (priv->keypress_id) -+ { -+ if (priv->entry) -+ g_signal_handler_disconnect (priv->entry, priv->keypress_id); -+ priv->keypress_id = 0; -+ } - -- if (priv->entry != NULL) { -- gtk_entry_set_completion (priv->entry, NULL); -- g_object_remove_weak_pointer (G_OBJECT (priv->entry), (gpointer *)&priv->entry); -- priv->entry = NULL; -- } -+ if (priv->entry != NULL) -+ { -+ gtk_entry_set_completion (priv->entry, NULL); -+ g_object_remove_weak_pointer (G_OBJECT (priv->entry), (gpointer *)&priv->entry); -+ priv->entry = NULL; -+ } - -- if (priv->initial_model != NULL) { -- g_object_unref (G_OBJECT (priv->initial_model)); -- priv->initial_model = NULL; -- } -+ if (priv->initial_model != NULL) -+ { -+ g_object_unref (G_OBJECT (priv->initial_model)); -+ priv->initial_model = NULL; -+ } - -- if (priv->queued_request) { -- g_source_remove (priv->queued_request); -- priv->queued_request = 0; -- } -+ if (priv->queued_request) -+ { -+ g_source_remove (priv->queued_request); -+ priv->queued_request = 0; -+ } - -- if (priv->cancel != NULL) { -- g_cancellable_cancel (priv->cancel); -- g_object_unref (priv->cancel); -- priv->cancel = NULL; -- } -+ if (priv->cancel != NULL) -+ { -+ g_cancellable_cancel (priv->cancel); -+ g_object_unref (priv->cancel); -+ priv->cancel = NULL; -+ } - -- if (priv->request_text != NULL) { -- g_free (priv->request_text); -- priv->request_text = NULL; -- } -+ if (priv->request_text != NULL) -+ { -+ g_free (priv->request_text); -+ priv->request_text = NULL; -+ } - -- if (priv->request_table != NULL) { -- g_hash_table_destroy (priv->request_table); -- priv->request_table = NULL; -- } -+ if (priv->request_table != NULL) -+ { -+ g_hash_table_destroy (priv->request_table); -+ priv->request_table = NULL; -+ } - - return; - } -diff --git a/src/tz.c b/src/tz.c -index 2aa10ca..969119a 100644 ---- a/src/tz.c -+++ b/src/tz.c -@@ -50,16 +50,16 @@ G_DEFINE_TYPE (CcTimezoneLocation, cc_timezone_location, G_TYPE_OBJECT) - - struct _CcTimezoneLocationPrivate - { -- gchar *country; -- gchar *full_country; -- gchar *en_name; -- gchar *state; -- gdouble latitude; -- gdouble longitude; -- gchar *zone; -- gchar *comment; -+ gchar *country; -+ gchar *full_country; -+ gchar *en_name; -+ gchar *state; -+ gdouble latitude; -+ gdouble longitude; -+ gchar *zone; -+ gchar *comment; - -- gdouble dist; /* distance to clicked point for comparison */ -+ gdouble dist; /* distance to clicked point for comparison */ - }; - - enum { -@@ -82,8 +82,7 @@ cc_timezone_location_get_property (GObject *object, - GParamSpec *pspec) - { - CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -- switch (property_id) -- { -+ switch (property_id) { - case PROP_COUNTRY: - g_value_set_string (value, priv->country); - break; -@@ -123,8 +122,7 @@ cc_timezone_location_set_property (GObject *object, - GParamSpec *pspec) - { - CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -- switch (property_id) -- { -+ switch (property_id) { - case PROP_COUNTRY: - priv->country = g_value_get_string(value); - break; -@@ -162,31 +160,31 @@ cc_timezone_location_dispose (GObject *object) - { - CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; - -- if (priv->country) -+ if (priv->country) - { - g_free (priv->country); - priv->country = NULL; - } - -- if (priv->full_country) -+ if (priv->full_country) - { - g_free (priv->full_country); - priv->full_country = NULL; - } - -- if (priv->state) -+ if (priv->state) - { - g_free (priv->state); - priv->state = NULL; - } - -- if (priv->zone) -+ if (priv->zone) - { - g_free (priv->zone); - priv->zone = NULL; - } - -- if (priv->comment) -+ if (priv->comment) - { - g_free (priv->comment); - priv->comment = NULL; -@@ -304,19 +302,20 @@ void parse_file (const char * filename, - FILE *fh = fopen (filename, "r"); - char buf[4096]; - -- if (!fh) { -+ if (!fh) -+ { - g_warning ("Could not open *%s*\n", filename); - fclose (fh); - return; -- } -+ } - -- while (fgets (buf, sizeof(buf), fh)) -- { -+ while (fgets (buf, sizeof(buf), fh)) -+ { - if (*buf == '#') continue; - - g_strchomp (buf); - func (g_strsplit (buf,"\t", ncolumns), user_data); -- } -+ } - - fclose (fh); - } -@@ -438,22 +437,25 @@ tz_load_db (void) - char buf[4096]; - - tz_data_file = tz_data_file_get ("TZ_DATA_FILE", TZ_DATA_FILE); -- if (!tz_data_file) { -+ if (!tz_data_file) -+ { - g_warning ("Could not get the TimeZone data file name"); - return NULL; -- } -+ } - - admin1_file = tz_data_file_get ("ADMIN1_FILE", ADMIN1_FILE); -- if (!admin1_file) { -+ if (!admin1_file) -+ { - g_warning ("Could not get the admin1 data file name"); - return NULL; -- } -+ } - - country_file = tz_data_file_get ("COUNTRY_FILE", COUNTRY_FILE); -- if (!country_file) { -+ if (!country_file) -+ { - g_warning ("Could not get the country data file name"); - return NULL; -- } -+ } - - GHashTable *stateHash = g_hash_table_new_full (g_str_hash, - g_str_equal, g_free, g_free); -@@ -491,9 +493,9 @@ tz_load_db (void) - void - tz_db_free (TzDB *db) - { -- g_ptr_array_foreach (db->locations, (GFunc) g_object_unref, NULL); -- g_ptr_array_free (db->locations, TRUE); -- g_free (db); -+ g_ptr_array_foreach (db->locations, (GFunc) g_object_unref, NULL); -+ g_ptr_array_free (db->locations, TRUE); -+ g_free (db); - } - - static gint -@@ -548,103 +550,103 @@ convert_latitude_to_y (gdouble latitude, gdouble map_height) - GPtrArray * - tz_get_locations (TzDB *db) - { -- return db->locations; -+ return db->locations; - } - --glong -+ glong - tz_location_get_utc_offset (CcTimezoneLocation *loc) - { -- TzInfo *tz_info; -- glong offset; -+ TzInfo *tz_info; -+ glong offset; - -- tz_info = tz_info_from_location (loc); -- offset = tz_info->utc_offset; -- tz_info_free (tz_info); -- return offset; -+ tz_info = tz_info_from_location (loc); -+ offset = tz_info->utc_offset; -+ tz_info_free (tz_info); -+ return offset; - } - - gint - tz_location_set_locally (CcTimezoneLocation *loc) - { -- time_t curtime; -- struct tm *curzone; -- gboolean is_dst = FALSE; -- gint correction = 0; -+ time_t curtime; -+ struct tm *curzone; -+ gboolean is_dst = FALSE; -+ gint correction = 0; - -- g_return_val_if_fail (loc != NULL, 0); -- g_return_val_if_fail (loc->priv->zone != NULL, 0); -- -- curtime = time (NULL); -- curzone = localtime (&curtime); -- is_dst = curzone->tm_isdst; -+ g_return_val_if_fail (loc != NULL, 0); -+ g_return_val_if_fail (loc->priv->zone != NULL, 0); - -- setenv ("TZ", loc->priv->zone, 1); -+ curtime = time (NULL); -+ curzone = localtime (&curtime); -+ is_dst = curzone->tm_isdst; -+ -+ setenv ("TZ", loc->priv->zone, 1); - #if 0 -- curtime = time (NULL); -- curzone = localtime (&curtime); -+ curtime = time (NULL); -+ curzone = localtime (&curtime); - -- if (!is_dst && curzone->tm_isdst) { -- correction = (60 * 60); -- } -- else if (is_dst && !curzone->tm_isdst) { -- correction = 0; -- } -+ if (!is_dst && curzone->tm_isdst) { -+ correction = (60 * 60); -+ } -+ else if (is_dst && !curzone->tm_isdst) { -+ correction = 0; -+ } - #endif - -- return correction; -+ return correction; - } - --TzInfo * -+ TzInfo * - tz_info_from_location (CcTimezoneLocation *loc) - { -- TzInfo *tzinfo; -- time_t curtime; -- struct tm *curzone; -- -- g_return_val_if_fail (loc != NULL, NULL); -- g_return_val_if_fail (loc->priv->zone != NULL, NULL); -- -- setenv ("TZ", loc->priv->zone, 1); -- -+ TzInfo *tzinfo; -+ time_t curtime; -+ struct tm *curzone; -+ -+ g_return_val_if_fail (loc != NULL, NULL); -+ g_return_val_if_fail (loc->priv->zone != NULL, NULL); -+ -+ setenv ("TZ", loc->priv->zone, 1); -+ - #if 0 -- tzset (); -+ tzset (); - #endif -- tzinfo = g_new0 (TzInfo, 1); -+ tzinfo = g_new0 (TzInfo, 1); - -- curtime = time (NULL); -- curzone = localtime (&curtime); -+ curtime = time (NULL); -+ curzone = localtime (&curtime); - - #ifndef __sun -- /* Currently this solution doesnt seem to work - I get that */ -- /* America/Phoenix uses daylight savings, which is wrong */ -- tzinfo->tzname_normal = g_strdup (curzone->tm_zone); -- if (curzone->tm_isdst) -- tzinfo->tzname_daylight = -- g_strdup (&curzone->tm_zone[curzone->tm_isdst]); -- else -- tzinfo->tzname_daylight = NULL; -+ /* Currently this solution doesnt seem to work - I get that */ -+ /* America/Phoenix uses daylight savings, which is wrong */ -+ tzinfo->tzname_normal = g_strdup (curzone->tm_zone); -+ if (curzone->tm_isdst) -+ tzinfo->tzname_daylight = -+ g_strdup (&curzone->tm_zone[curzone->tm_isdst]); -+ else -+ tzinfo->tzname_daylight = NULL; - -- tzinfo->utc_offset = curzone->tm_gmtoff; -+ tzinfo->utc_offset = curzone->tm_gmtoff; - #else -- tzinfo->tzname_normal = NULL; -- tzinfo->tzname_daylight = NULL; -- tzinfo->utc_offset = 0; -+ tzinfo->tzname_normal = NULL; -+ tzinfo->tzname_daylight = NULL; -+ tzinfo->utc_offset = 0; - #endif - -- tzinfo->daylight = curzone->tm_isdst; -- -- return tzinfo; -+ tzinfo->daylight = curzone->tm_isdst; -+ -+ return tzinfo; - } - - --void -+ void - tz_info_free (TzInfo *tzinfo) - { -- g_return_if_fail (tzinfo != NULL); -- -- if (tzinfo->tzname_normal) g_free (tzinfo->tzname_normal); -- if (tzinfo->tzname_daylight) g_free (tzinfo->tzname_daylight); -- g_free (tzinfo); -+ g_return_if_fail (tzinfo != NULL); -+ -+ if (tzinfo->tzname_normal) g_free (tzinfo->tzname_normal); -+ if (tzinfo->tzname_daylight) g_free (tzinfo->tzname_daylight); -+ g_free (tzinfo); - } - - /* ----------------- * -@@ -665,38 +667,38 @@ tz_data_file_get (gchar *env, gchar *defaultfile) - static float - convert_pos (gchar *pos, int digits) - { -- gchar whole[10]; -- gchar *fraction; -- gint i; -- float t1, t2; -- -- if (!pos || strlen(pos) < 4 || digits > 9) return 0.0; -- -- for (i = 0; i < digits + 1; i++) whole[i] = pos[i]; -- whole[i] = '\0'; -- fraction = pos + digits + 1; -+ gchar whole[10]; -+ gchar *fraction; -+ gint i; -+ float t1, t2; - -- t1 = g_strtod (whole, NULL); -- t2 = g_strtod (fraction, NULL); -+ if (!pos || strlen(pos) < 4 || digits > 9) return 0.0; - -- if (t1 >= 0.0) return t1 + t2/pow (10.0, strlen(fraction)); -- else return t1 - t2/pow (10.0, strlen(fraction)); -+ for (i = 0; i < digits + 1; i++) whole[i] = pos[i]; -+ whole[i] = '\0'; -+ fraction = pos + digits + 1; -+ -+ t1 = g_strtod (whole, NULL); -+ t2 = g_strtod (fraction, NULL); -+ -+ if (t1 >= 0.0) return t1 + t2/pow (10.0, strlen(fraction)); -+ else return t1 - t2/pow (10.0, strlen(fraction)); - } - #endif - --static int -+ static int - compare_country_names (const void *a, const void *b) - { -- const CcTimezoneLocation *tza = * (CcTimezoneLocation **) a; -- const CcTimezoneLocation *tzb = * (CcTimezoneLocation **) b; -- -- return strcmp (tza->priv->zone, tzb->priv->zone); -+ const CcTimezoneLocation *tza = * (CcTimezoneLocation **) a; -+ const CcTimezoneLocation *tzb = * (CcTimezoneLocation **) b; -+ -+ return strcmp (tza->priv->zone, tzb->priv->zone); - } - - --static void -+ static void - sort_locations_by_country (GPtrArray *locations) - { -- qsort (locations->pdata, locations->len, sizeof (gpointer), -- compare_country_names); -+ qsort (locations->pdata, locations->len, sizeof (gpointer), -+ compare_country_names); - } --- -1.8.4.2 - diff --git a/0002-Remove-the-color-codes-map.patch b/0002-Remove-the-color-codes-map.patch new file mode 100644 index 0000000..4fcaae1 --- /dev/null +++ b/0002-Remove-the-color-codes-map.patch @@ -0,0 +1,1256 @@ +From c12a2a74c81032c04949b7c6c6bd8af2a1b5b567 Mon Sep 17 00:00:00 2001 +From: David Shea +Date: Mon, 2 Dec 2013 16:55:01 -0500 +Subject: [PATCH 2/2] Remove the color codes map. + +cc.png is used to map locations on a map (usually mouse clicks) to time zone +offsets. However, in every case except one, the offset set by get_loc_for_xy() +is immediately overwritten by set_location(). For the exception case +(cc_timezone_map_get_timezone_at_coords), having the selected_offset property +change during the call is an unexpected side effect. + +Furthermore, the data in the color_codes array was not entirely in sync with +the data in cc.png (e.g., no color_codes entry for UTC+14), and the borders +between zones in cc.png are feathered instead of being zones of a single pixel +value, so clicks around the borders would result in no zone being selected. If +cc.png is ever revived, it needs to be regenerated from the SVG source. +--- + src/Makefile.am | 1 - + src/cc-timezone-map.c | 102 -------------------------------------------------- + src/data/cc.png | Bin 53948 -> 0 bytes + 3 files changed, 103 deletions(-) + delete mode 100644 src/data/cc.png + +diff --git a/src/Makefile.am b/src/Makefile.am +index 2eec6d7..fdf465c 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -3,7 +3,6 @@ CLEANFILES = + uidir = $(pkgdatadir)/ui + dist_ui_DATA = \ + data/bg.png \ +- data/cc.png \ + data/olsen_map.png \ + data/pin.png \ + data/timezone_0.png \ +diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c +index 993f379..97d1221 100644 +--- a/src/cc-timezone-map.c ++++ b/src/cc-timezone-map.c +@@ -46,15 +46,10 @@ typedef struct + struct _CcTimezoneMapPrivate + { + GdkPixbuf *orig_background; +- GdkPixbuf *orig_color_map; + + GdkPixbuf *background; +- GdkPixbuf *color_map; + GdkPixbuf *olsen_map; + +- guchar *visible_map_pixels; +- gint visible_map_rowstride; +- + gint olsen_map_channels; + guchar *olsen_map_pixels; + gint olsen_map_rowstride; +@@ -86,50 +81,6 @@ enum { + + static guint signals[LAST_SIGNAL]; + +- +-static CcTimezoneMapOffset color_codes[] = +-{ +- {-11.0, 43, 0, 0, 255 }, +- {-10.0, 85, 0, 0, 255 }, +- {-9.5, 102, 255, 0, 255 }, +- {-9.0, 128, 0, 0, 255 }, +- {-8.0, 170, 0, 0, 255 }, +- {-7.0, 212, 0, 0, 255 }, +- {-6.0, 255, 0, 1, 255 }, // north +- {-6.0, 255, 0, 0, 255 }, // south +- {-5.0, 255, 42, 42, 255 }, +- {-4.5, 192, 255, 0, 255 }, +- {-4.0, 255, 85, 85, 255 }, +- {-3.5, 0, 255, 0, 255 }, +- {-3.0, 255, 128, 128, 255 }, +- {-2.0, 255, 170, 170, 255 }, +- {-1.0, 255, 213, 213, 255 }, +- {0.0, 43, 17, 0, 255 }, +- {1.0, 85, 34, 0, 255 }, +- {2.0, 128, 51, 0, 255 }, +- {3.0, 170, 68, 0, 255 }, +- {3.5, 0, 255, 102, 255 }, +- {4.0, 212, 85, 0, 255 }, +- {4.5, 0, 204, 255, 255 }, +- {5.0, 255, 102, 0, 255 }, +- {5.5, 0, 102, 255, 255 }, +- {5.75, 0, 238, 207, 247 }, +- {6.0, 255, 127, 42, 255 }, +- {6.5, 204, 0, 254, 254 }, +- {7.0, 255, 153, 85, 255 }, +- {8.0, 255, 179, 128, 255 }, +- {9.0, 255, 204, 170, 255 }, +- {9.5, 170, 0, 68, 250 }, +- {10.0, 255, 230, 213, 255 }, +- {10.5, 212, 124, 21, 250 }, +- {11.0, 212, 170, 0, 255 }, +- {11.5, 249, 25, 87, 253 }, +- {12.0, 255, 204, 0, 255 }, +- {12.75, 254, 74, 100, 248 }, +- {13.0, 255, 85, 153, 250 }, +- {-100, 0, 0, 0, 0 } +-}; +- + static const gchar * olsen_map_timezones[] = { + "Africa/Abidjan", + "Africa/Accra", +@@ -558,12 +509,6 @@ cc_timezone_map_dispose (GObject *object) + priv->orig_background = NULL; + } + +- if (priv->orig_color_map) +- { +- g_object_unref (priv->orig_color_map); +- priv->orig_color_map = NULL; +- } +- + if (priv->olsen_map) + { + g_object_unref (priv->olsen_map); +@@ -580,15 +525,6 @@ cc_timezone_map_dispose (GObject *object) + priv->background = NULL; + } + +- if (priv->color_map) +- { +- g_object_unref (priv->color_map); +- priv->color_map = NULL; +- +- priv->visible_map_pixels = NULL; +- priv->visible_map_rowstride = 0; +- } +- + if (priv->alias_db) + { + g_hash_table_destroy (priv->alias_db); +@@ -671,17 +607,6 @@ cc_timezone_map_size_allocate (GtkWidget *widget, + allocation->height, + GDK_INTERP_BILINEAR); + +- if (priv->color_map) +- g_object_unref (priv->color_map); +- +- priv->color_map = gdk_pixbuf_scale_simple (priv->orig_color_map, +- allocation->width, +- allocation->height, +- GDK_INTERP_BILINEAR); +- +- priv->visible_map_pixels = gdk_pixbuf_get_pixels (priv->color_map); +- priv->visible_map_rowstride = gdk_pixbuf_get_rowstride (priv->color_map); +- + GTK_WIDGET_CLASS (cc_timezone_map_parent_class)->size_allocate (widget, + allocation); + } +@@ -946,7 +871,6 @@ get_loc_for_xy (GtkWidget * widget, gint x, gint y) + { + CcTimezoneMapPrivate *priv = CC_TIMEZONE_MAP (widget)->priv; + guchar r, g, b, a; +- guchar *pixels; + gint rowstride; + gint i; + +@@ -955,28 +879,11 @@ get_loc_for_xy (GtkWidget * widget, gint x, gint y) + GtkAllocation alloc; + CcTimezoneLocation* location; + +- rowstride = priv->visible_map_rowstride; +- pixels = priv->visible_map_pixels; +- +- r = pixels[(rowstride * y + x * 4)]; +- g = pixels[(rowstride * y + x * 4) + 1]; +- b = pixels[(rowstride * y + x * 4) + 2]; +- a = pixels[(rowstride * y + x * 4) + 3]; +- +- + if ((x - priv->previous_x < 5 && x - priv->previous_x > -5) && + (y - priv->previous_y < 5 && y - priv->previous_y > -5)) { + x = priv->previous_x; + y = priv->previous_y; + } +- for (i = 0; color_codes[i].offset != -100; i++) +- { +- if (color_codes[i].red == r && color_codes[i].green == g +- && color_codes[i].blue == b && color_codes[i].alpha == a) +- { +- priv->selected_offset = color_codes[i].offset; +- } +- } + + gtk_widget_queue_draw (widget); + +@@ -1106,15 +1013,6 @@ cc_timezone_map_init (CcTimezoneMap *self) + g_clear_error (&err); + } + +- priv->orig_color_map = gdk_pixbuf_new_from_file (DATADIR "/cc.png", +- &err); +- if (!priv->orig_color_map) +- { +- g_warning ("Could not load background image: %s", +- (err) ? err->message : "Unknown error"); +- g_clear_error (&err); +- } +- + priv->olsen_map = gdk_pixbuf_new_from_file (DATADIR "/olsen_map.png", + &err); + if (!priv->olsen_map) +diff --git a/src/data/cc.png b/src/data/cc.png +deleted file mode 100644 +index 54fb66827518a9a01341358b8adb586884dace18..0000000000000000000000000000000000000000 +GIT binary patch +literal 0 +HcmV?d00001 + +literal 53948 +zcmXtf19&7)(D%m1#n#2Pjf-vD+Ss;jU2NOBn3v>Y+cv-a-}ig>nSEw^W_G%&x~jVB +z*VPdUa^eWEIIsW!06|hhR0#k8BLV+yS!XYOj-Nh+yTG+q&yd-g`39%BY9;{dRk{#| +zjn4*N$9tjqe8gHyPac$y&UyH%-;B?>k5N5VCBHzE6nG(JWWoO&pwu9WEwq+yfbX`o +zD#ZNoKS8xIxYoL_CqqB*$OfwaZdXuy{8UC0Q$!P6(NX~|uu-*om-ucdq76a*cbl3G +ztbkIgS^;iEG@2*0g;ru{s3L2%7wT46 +zL2}S4n38VA_7iah5v14(=l}2p3n5@^JQ6?Wy<=@`+zr@w9K3%(AQolNF1K-IU%Oc! +z!IkIFHP^IDP1EHp3dk%-oNRU_jFTX5!hT_DB?6E~eQoj4N?4i1_yql6iw$xi&8V-6j0G7?#0jmCQM +zHV}!ccI(L9r_pbZo_Qjteo?3xtrlA^Xk(pc50dVxsYV_|dWuJvpD?mVKYb8VWS1l( +zlJa4>M+5m1>Kt57cJ4s(mnp%Om5v`hldMxOF5y5X3_=wpT@7!HGp{4M#PY2jw=aMYVdM!%Fd|Wm +z(mVc`7^EBbE{jYs;`OGM*uA?P@5A?Y@h?AzP$@;~(ZuJA*d6pJHFIjLkOE2<;cshG +zf`c~>wYZ1ex%S=uIO-{}gjrqX@4vDao`0o^{lzapa^foR(YoZ79UH409eqE$W_?z6 +zTJmi)2RH*)dBaDjZ8}i?;Hk~Q$=F4cMw&1N1jMX@zb);YeK3bmy1~$3)g{S~>Z%}6 +zU?dsc5$0*9V@(@dIsNn;-`!b+%cf2vjRYqCvt}xU?=g{TW{%d(%&OhHgJ6ta^51Qs +zX?>%gnlf(NP!yy{%Yu+e9K-hR;j`v-bD+wsSz0^~+w#i@4aF)s5tNdoPy3k`)Xv2K +z3@R=T61-12I=&K!ntx$e*q+Yer#(BF>Dzk=U(%!bT-#Y5sW)~TGaGT>&Ps5ECC;S0 +z9MUwiyJR8YXN?$ox6nc)CS9qD0&>c!t3&41g3Q}M1s=Q@QbrmfHG}Ba+7q_65nE#Gx8pFA +zndS6%YfEF?zLW(1=is|{{K3ITl{tP(4Z{yuT?)L#Sym_(7V}Y)b&W+_ea_pJ5ONIR +zHXwJD^!D5d6dJ6^v-e1w!yffgEulVBXa+VGp7*PR_1O^~H#p+RC)-FRxTTCU+k*jMvHg +zq7x0k=ZVypCZD<6xN7-yv>?A}Ovv;wb5xr`rJU=u1Oh&Du@dSL49P59#NKt6DS +zM}~$&hGQ!pUfNB`N*9rQnB>?U(0639iYb1Xhf;trXaP1?%W0-<*%LvH8Fys{tZVz) +zQ+4)<5DA;!cFx@%j%n2C{bUD}t5EFi4H+LE8CqCeEFp$n0k5|?5fCW+)n_EAB9-(m +z4WQF{ea(oKnV=ABHxwzyL(9QMsnDs2I){yOOk;}F_V0%5j_jUvJ-vj&L4K#ZLnn}7 +zz2mj=NQw+<10=Y{2L|}y!H5P=1;o|cg=>jlE5teR_U<32>)XnlUK}%>UoQ~!tBVh) +zJKY!zuwDx*jJ1FMr3va1mBwr{H-|^T2yo>wR!BxKHU +zW`6!ax^_=wWhXGFVT++nQpt4-wW;}A0%vyxvxXZ~P*oOhFFfuQm$^VKHKhm>Ua&lL +zmLswhRd^wccKs$$T1*yZ$=`Xi9)(=Zd+Cv%9BU~zx4=3$Itl_Cl9I*3o#Wxm7n2O5 +zR8Covv3w4$cbh_QMGNtk40U{fsBuoa$t +zdx)cxbF{cbr0;otTyn^Ha_+oRJy}Zme<(i~Z}fU%6vk`jNv5Mp@_2D<5$+!u9Yq4& +zeuyo!gfKI2W#Rj!zCfNWIZ8S1{{#rY~*xFKF07x&OXW`4I1;ns&; +z_RC9;xzx2(&uvO0XO7iH(6@xf&3`fJrpOBhW09;=sSDIqks>~YS#)TLDFpo|!GC=X +z-WsV$04gVT@j^h6(vKDl-e8mciW827cR_pp}RBJ4TpeVx-Y>;0v4Z +zOH~+Q3a+c|tUz|NJeJzKFV{TA`H#$U_I4e3pNB_uDF|Bn$2}k|6XP}H_TW`356QQr +zOO>QIo(ogjQ)lhwmaC0BvMQYi3rM3-aXJ=Xz*c`E?JB?I1%KZ_>1!u?RlhcmKrM0obr3t4zZ|94}oVEJA +z_Zi>Y@4(|bx)S8~LK<9AOLek-HD`ScX3C~e6KJzBgJDJ5jVfDO=Pvkz;|{y7o-4tvzpb$z=ZNx(Xb}D? +zlLK2Sr;YS`QQn~fo_KGW+fp)5*f^a}`6u6`vrvPq2+NGF;t!_oId0_FJ46c-1(q}e +zu0R+$o-kr!(wJmbFDh_cTztlN2JJzMSWXtE);RcIR^RmJ%?{1Xy!G;|;L9nc9wg{o +zQdvR%PRU!GpNMj7QEf;rNrn^Sbf9qhJP!R%PLUEk-D-fM=Mag)J +zIeW9Oefv4hft}U~-1G*!x5pQPFJ&nziV|{ix`{-5Tl@n}^N-{Wmj`sQa1 +znDCwV@ZrlGi%_4jFf$$UIn-fbZWA43v5^X>lK!q;+XCp6-LkP8qjv0?58*_^Y*RBC +z5dalc92)Yfz!JMvANqyi;dxg3CJw +z*Zp@o(ZVaT+vv1roCoL>$Bo!HHx@;;4ZMlwCuH$tW$%TH5{v}??6w)$MfR>()e!auV`g}A?{Bae(qJR<>P(H-&9aHbZD{RyuP+I>6 +z5caCHai|`4&dIMg=g8E1OaX9AcP9vGk!@9fg%ws8ScQ@!oj34c9l-SO +zn=rvRcU~pVcpV?7_Z^JqThh!(k)iNNkWOzuRA4e@eVk0qOos^*eBf@q4*zIf8#R}?QaK9 +z-L&`$hXK_ezJVMjozK_LZc2t?l=xLtr2ZiccV#eD{DM^rEtK9b@^Tdix|*4%_?sL0 +zu1(3n{`vhojJrG8XYV_AUX-}fXGq}JXV&@p3oy|0N +zoIdTYr~V7!s`g``_JR$5aG}}A>oxCL{xho36kdd`UnzNR?AyFVe`}%}loMdD2RH?D +z$C8NFZuC<=D#A!y)ahI+V%l)1uvMOt6$^%gmbA+-x8qa6wdpva!ICR08|u_}tga;; +zd!or&``vO*INn_Efac^}lw~RK?0-F^z-^UikgveR&m8giUF5x6Q5ZZt-REUxXTVzu +zCvCmn^Si}%^;yHM!KwXxJ8t?J`7xy`9!7J-F +zSW2)W-T%f6%hunK{$<(o)Vq`0lRh0hg>{~HnEl8zEGQvNy{GRM4itKh)C8)3n=r8AQJZp*nsDcJSWXs{F(KPLrI8WR%v%5ycHaul1G0cg}TrmD6+kDDq@hN|mv~pi}UEU3v-^n8CrD@KdSZS3FF=@lY +zo8(#Dg2vw|ki)<@75)%z#m$DK8Qp1_Gi=iQrYcj`yX*CU7A=kCm>k%7C3drxg=ZD+JY8R$2< +z!Y>(Et$xj(-Nb`@P`uC=c?+82uaW@SMyK+#e;n9O-5aYfm2`5_nvpTK1B{+s<&IqH +zbQEKmxCK64&Vy4WEF<*IDcu;SS!1Q0(IX&Ou3!H2*Sx$w)7dWFz(BVv(@gyf7d84D!eHyuZ +ztI_FYcHeFe;<<=bRzwrDXbndUo|XLGM%T_yw=ggoY8(GP$SBzo%?M$qG0Qa +zjfCSJk|(5TXZxGoasbzhj+l~*IFUq@&z!F|zpKxy +zMwXW9U#RP@r;nF@j%P)H2k#2@4v*a9KE2?U{vX*LMP`D@nFT2E)I4Z@6k-}4XVJWo2pPa>>ZAb>&v-q$LTCqyY9ssfQP%Hzhj`HeX`=Yj +z<_A)N=b$}jmu^cpi^ztdgKP1b*<~M4m#bS6*_oB^M5-z*6Qn-FA4=BhQG_Z*-OM*$9@Hjrt2JK^{ZU+~SL8Bgz!mv2*h?}U*T;ZDl(xRMn +z$`#G@ootx9aYi-}P=nNKg8zbWUd0bn5-)OQTqL9Apu5UbDsN@J_E;@>k_hQwL$I +zE9ep=BVtFnCMqx!NOokL;=;fnapx^eFOd=iWM+vk_xgeM_Tm!%R?r|N$TM|aH1gyg +zUDv@x9AT!Ano++NI=$$7*fM>4v +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 +z&=?K^>E}-ta|1Dwvyx +zJhQ7~${@GP>$#Oq7cwGoL%GVEEFnT~i$F4ev~X5<35_T2`3s;c05X-B4dw<$Vz}?F +zbvqt}9?lVkw!7^c7|GKCeI?^mimw=o5m2SdLP(O@=wtOc_5>&9{$X@R?=ag09?<8q +zx{3&L(HG_#R+OB&wcj8@f$lO-Zy+=N`(57Nv~`?~&$OPB*CP+Wc`+bL2G +zJ;)W;Yng1Ioox_>G}w;0EM2y7IXW)L`)7wrQXhK*8eI4P4BW4ucs}p-5ED<^G9_&$rzz;p;L)vv+lUrV +zgJ*ldGh)(KkqO#K{9wDizYRFDw$WN~tTPPa%&o+~k{GWT{?743jGC=s5!n62&gvrUvDw_L4E{zZrsiRZFexnwlAh&emaEUxXil`F0FcwPQV8<2edo7a=eQ^b*66RE_%ubUD1`#%$J2#l2NQL_Ta +zv=wAXjA>=PC9ZZ}JuhQ*`Q+O6jI;SW{SFV}MObP`L=oK>MSi!NylLL9l%I5B`qc%L +zRud#s?>{tLari~C^uE&IeeEvkNeDg;o?tM_Fv?z^%#sppm@KhSIJ;nc#hXHgvbCKA +zhY~Z!2@j%8g2VtYcT$mp)erEq*yG?OW-${!w{f=4$aqHwgJGcRor-Gs_b(8C8-WH) +zG&Q&XZF=npC`VPA6Uf+=sTHy!>f6ysomuok1Zn>Sv?5#-kBu11-6Ya)Wg6HoAjsPN +z!eoh7(8+BjgAQ=v2wf-G544Se)~D}#{}2)Ngt`&8?xtR71aJK`qj>vj*>I>5hn;GR +zEjfsv>jRS4e|v5lu**Ky&2Gj%t41bJdpJ1mKNY$oR7WX>6hk3d(CoHXV#v; +zU1RpE{ujgy*>8sRt_R`5vDD3MitO2=AShj+GX+upEWiha)_<=`PtOK!bymUZmDs(no&*?U?jI6ydB28USQEh48NC8u|{pfr4Y(~sNg^kkc=tVX{aT{$}T2gr*zSx=Z +z^@f^hwNa?ZdVKPY)h#Ss?{gR|7@e+6GI(o@tz-95>lDsJIC@t&^?@Ka82b{`qOXZ-a>ac08n5#(GCNN$hRZAA0#scdS+oPF5v2a79>?VzNl +zp^_M|mf;7~k>JP&w@9I;_>(8BEa=$NJ?r390w@a)|uu)|Zs2&Hqsez~LR`*|{!F +zvigWAbog8_p4SRsDUzwP{=Q>p2GO*NKf%IUr0N$0p8q&u<7K{h$;jSUF)CK&To51U +z=3mtu^Ey7B%Nw?>@B!=#5GcY_J-vgHgqizfyEcZBk{$=Z2NU2pX+HBzjZdfbWWH +z<#YzuBBiFKC@brcnsyW+3K@Ve!PUR8KqpL$nr6-Nrq6nKNH9CAkS)AqZNT8?_azSP +zP^D7(cJlSYA$I`xa-@goC~P7dcjR1NQ~zVkMCrGle$Qz71mo&qzIip$@dFEOSqF0i +zn-J>$rtMH=1oe3>KD*;KJ8`bwiwI)ZFxte(U=x1YC! +zRz_y$k&52+zK`2Ka8W@$|7Q4{iP;tSrA$LTDA|GF;3hRZ(~1a}mNRUA$ts0immkx= +z77zlJJUx`kov=bt=V>=N+jXuQyxc&Zi2)dxVHsIoaW5~loo=PelUa+ClRt{OM3t4B +zpBfTGNeFkGQ=Rc�x|2JToorO=~HVOpz=d0rf2or7L4YND15y!F9?@cADjPHis_ +z4PU1_pGneS-04EM$)o41ONO9Cgvi+M}68k%jXjO*S_k%&u3nSrw +zs8Ql;A9>ghuru{=O^X{>Umc0`iNkb7_(Z&%PStJkFe4?ge;c3!IHsdLcy +zz;cqSH@#C6akIv7i<;+?_I!>fECYrkoF_))5S9p@DZP6A4=7p~b0NT#HW95aL#MAe +zWpdW%^j{R#xnqbX`kaBAO>^M-c$5b*BO%mt6yTAj@^6sH*RXPefh);vVL26UR!UdFHOt@NF$r +zZk|BogiEACS#8_kn3)pJ{eAZE2|NH)w>D=hN6GaD&%P9P-R11QaTxbNG?!0_nNmf0 +zAT7a`pym>~=EGczjkYpiVUF_B08_ZilEL~PPPcoY#1;x$L$ps!;3T{U(+1((ayOFf +z);**nu}q`&5@GaK?~PN;g3=7yL2nlXbB& +zAAXvXM~9PY^30HJwoc;}td-Fzdyd^(zsbv5JVA@*4==e%{r)vzww5%w{uEJ~XV}=< +zUeg7=Bm|BA@v$qBSiMk*QV=WzbKF<;M!?`!P=pXCA4Dl_Sx!SXuEK!1TLZdLF;9*X +zvu!oZ=~+k@FLMUL@bEX-HT)Cjdl5)2p_$XuKI2&{7J)Mz%|N^L&HC +zMw^wY$3L(>YW|&LOQKNqwn5dzjzT6z<=MQ_GN*O>>}+(F?H8IAE3H2t=zDU{mx4?V +z)L37qqQWD1UclA9OKFJe)bAcXN2neV{ovqfOmGBd1#HsxV +zia&R)3q2^;3D^!{6k}i_C>M|bYR*&SJZecKH>e0FcOJmPeO`Y4)WB7oy_X$^%G9<1 +zXA2n&t|Bg$Up;>Ciq-n|Z|d~duU>KTc|m)5K +z^RoF6I_m>AEH_;F3e`p5e`QBp@eMHxM!4l-*Bm*e<-M-d2c7RsRqtT5G*LUt(tKC- +zx_DP$4j}RtA_&48J$zt1hVnlc}8y+ij$d9~{$dm*Pkkaqe8 +z(Gl@9cbt%ZJ8?X-V;hU5cxv$@L0$Pf_pk6PqQCCSXn87{p+Xi7gYKoL?+1^HCjdiC2kr#=ksp{ +z1)JbbJ%|W#R4cR9MA{X6krggp%wu2Uunj|-@RN?PS@U#kM`jMAI^J#sDwaxtx=`o~ +z?#)oy2N%b-&Q8zAkGxZY%5ell$JaA~q3IWoOnsO2jx%#O%2Dz8HtwQkwyL2Gl4uA{ +zMSmo2tKux1kM#U%TiXu}ZXUT*j_>LjDIrW9`7oxfr^ +z9Pk*ce6D_`937gi~oey=bC +zYg;u*M|ZFpAG|!Tv}c{j(3(n4pXL`nA4PKCz=IQ{8}Y4`(Lp+z98cgK=JW_Azh~h> +zJ{4KQN0PwK{MU8NuF?u#dM6PdSmO`IUcxFWPBzd_$>mhAFB(*2e5Ea@C7oF(h)Y)C +z7O+i78TFjBvkh={JUehfK1ph!aN+`4@e4$ea=MNZI_-b$e}p8cK3pMx!#Xqlu^aF&u95@dysU0+wF9s)TO(486yZfJ9AUj&CSUT?WRn~un{qJ4U|7?@yc1=KRoWw!C-h~?49s${-h +zab><~r170{-Ws7^5C;Ltr!zpu;CKbL`h8vEhsk}9!&B%)=N@f5rJ?gUm!}3-Tn;?Ii?WS3rcW7RquH|s6Q7JHq5`aKZQDr-FX)C>zAuOhSLWv?rxyPTIo2- +zAW&(q@4P^Z^MBxmeW`k|Tv0&~nyY+p^f{etfusTI>SLA4{EgH03*7o&X!`T?-*wrH +zQ|ZGe+8$;^S-k!C1{Xaue9~Gx5i_*`du5{PjR6_v}x45rap6) +zcAxJvJ2_aTPK8GrHzf|3(c#?H`zqy~J*;@WFxZ6Nv#K)tryrq>HD=@Ec2=hdI5>v^ +zkewomE%af-8d+(QVWIla;6q}ouJoq$MWp%_>e8+K2DN$QL^_!)i@D_LIrhRc#dMt_ +z%bW=mb6#P)o2w}hTIBUlT$EymmH%)ZTvoPHYfYZ`cQ=6xZ?vh}B^)uA5}gw5cU=x)hb8?4cHkny<=Ttr%b)UfQgcn**4F_eff`fH +z)GbsJ!t^=OQ&4=r5rs +z3)TlQ0B7x!{^U=Nmz?~J9kI+juD3OXfA3EBiuO_5h|r>0#v%3XHL5@lCP?+bCjAi{h72qaMCn=wW+-ztJUQ6SUN|4F=GEOpUBWa!c>GEK8htd`lkN1nu-on;3 +z=7+}1h0NB?d`l_&Ya&+{NBBJ}pjM6_kZO+72Fm6#b0;OdF77tD17skn*3FU>RNK9^ +z^D<z4;72dv4NXejGnJ$Qi7c3x4 +z@5=3GJYZ?W@lQ)oa^@mpa!;H3iap41jpga|~DFFbQ-CftTyp<@Hu05u7 +ziGv6noQT%Uw)N9|?aHTLK{IpF;5(0ED0es~2WrlHrSCEULSqWvl +zsY-5^+00<&jNPi(_}`k_8!*kC0hi^pj|^K1Xr}n!`#RiuvdHMO1?v6Cfg)QPTd=Zq +z3xwMx<@I6QlKeQ?@VOR4%uTyqqH%FQWM>ifNlC@3F(Yr-`2G;akW|Y!JWCx*WSDzc +zVI#Z$l&i8yZGS_6CcV6-4M=s3*Td5jM6)>G3~^GH{!24~-xh&O&WqEgQQh!5cs5Y-^-{nl=QvZX7|7BP|^|Se~9sCc7G$d)#EKV>LzALMs +zpGf_m3P9a9u|dk7j}>SQeSf~(GcHJ6-f#I5e70lDKsXlQ05v3)S!_? +z3g-Sh3rq|xIZcPbo%PD1u&|$ZNG>`mu%dZ*OG4D)i0-~L?yxBxfHF^I4>hIYF_qIq$8!|=mm+P?<<1fHUD-dq{(R021K<{^Jdx^GiW +zvnMA;53YD{+6@F>9k77bgorbA*!FQ=mz6p1vx|Zk(Q)F3;)8mll+cEsUE{=|lySK` +zf!JZ!rH62MUn{0faeTqmF~Bn6Tea(|EdI9xMYDH^R!LHGrZF^V62O^0X8N?&PR7K8F%1X4oO*!QAgKaF4^UEw6zm^R+UK}JMZVfcD +zZk$AE5VZSrOOj3@N``HKB__8s0ftSZTJdz9-h3XjR^52iU0-(=8D9a&Gr$F-fk#Je +z?{6Hajxc|qTh)0XiDksCuLSUZSv-9&{5K+5s){qKfi12YTt}HjJ#AT6$e05pW(5K- +zYWqhJk$=XW7Ml~lBS3!ubO7#vle6nZf@c$Pn27=O?bU_Cq7t}JaNZS4(w%7zUJ&~XG)m|(erdE^g@C1-DTC|c~MD2#^>Q72zXco^V +zCC{G=yE~^m%>q|98kX#;=1Fze$OHIfT)JWw!z6N7TFj-Sa$h)?0w$>;VdfGHy6Q-_y6`KJ;FCxN|@eIuCU6zV;XIOn2|{#{>|0&+2{lP}-?& +zbtTbqs6exZ~RIBG%|7jP3LU@3`M^TJq89 +z(^Ny0K#n9VVkX6nKzT_p=nG@OqTPCUC$KS;QYCPfOr-AbX%c*WUW8(Qa%z`_U9cV` +z$vNE-zJtm}MIG4x>dgNUP84l*EnMDcUS;`uz)$;U+h8Z7*~peLCEy%9J1^LcImNQ? +zXX?&Akq)E@$RWW%RWOJ@mW_O0Gwh#y%I~^L@|Sn_kQ%j}MNX+^$)lUCxOs(mn+jSd1J<5oGmY_gb@R!aPD+VR|s?Hrk0;ga}Q^;mF_7y^IkCqXXQuym|47%{7%0A +zMlfy>i)ayf$uR}Unfzjx7c5Kc;*zvF!c+20?e?kXJpYyXriVb;*KzuWADkE$rPA9T +zuB`x&+V2%YYF`3n94$z*e1RqpKU-^t#OOaK<>yr+_QBXWcblO<)Epp-SRgS=h_}G# +zAe}*TNxe@4y8Xp5(o~uo2NrxW-S>c}pDYu3p}CsAs+Jz^dx+UH=ugqSD@~;NwrE~!Y(i`EW!-me3dA-@7|#qg|3_oOfV# +zhJiIbUB&S{f9|)@gL8k!^9?lCE=i-d#;buZt~9Y^X$*Jg3p?Q!v#>147ac(&&cqr$ +z1&=2&YuD{{G#4ZzKrUH{un@_m=Y>F(8eHQw>4&0zF`Pd`+hIoL!O8c9z+H1Vxc5yg +zp<^b-u|um#hvnemnH^xdT@c*I^h2Q|O0HPVo#xM~Y4wW(b|y8e^*6xQDvlByLt!gBV$rS9qbpg`xZTqIN-KhTAd`auH50rnW +z>#?fLFa8MA{wBY77GSelMz;Gn3`t(Gh|{9`If&Q@QqM`en7iS-Bl*kG5e@|pFgtg;`dEQ5ZchHPt^aMb+56IbXR^vspy +z!yck)6B->L^OI{+B61;6jK7nRMj*;e<+htlURfU{*!FFbRE_N;L?x<$6-%cw@r#Kx +z4?Dz)#xB#BxKIk6BaNpKC{egP?EUiBuh{_a)tk|Nd4Wn}1=PD|4eOVz`jw)UxDX1C +z?qTrSwrk(Mb5PWU>tjZ`r17wm&hc$^^|Ltb$YZJzLgMLFaJOWk!!NIoM~a9U2Z#<3 +zD7wx=!NW0g=J~6|bx3wz~ +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 +zery@ +zbzTZjN2+2IZ+!2;XD5A$o6h;VusivqZ>`;#k2x$d=gj%j7e4>x&kv4GjP1PTr5MF= +z2xN92w1? +zdXU-iz4+>uU+k`^$FVu%R5k4^uAGh$2U&4nej(_1$(!kT{1@o?yFa3OVz|6g^DPG? +zN5xP?(S|(Qq$o*hI-)2x^E;Lo +zn?TDT6sSf+a}82V$zoMIjK9H#)1RMyV}?FMcyjscz*tD&t6R=HCa}9t-BgTTMD*m$ +z6wtWjfn|!@&yII}hRAdK`S!nko);N9Wsz=XIUu=XAAEK*vK-rBD2G%am;Na1tg#>3K-`oU{SowMzm04XM;~;aBBlK +zil8-bgBpg$$hk&*4ZV1(YZ0QN(oq&i8bqcCuseNu?GfUtIzq6uP#cdEDC!V~-iFV3e?1rf^j(BbKTYXMMqk5nK=Ol_g`H>NL^srH#rvXblia~)scPCmS}33}3-|EEKBSSYz=kLa-Z +zJlJR8a1o~!wuqHCn{)PWM^#1>KVw)5M3uTr?VURNangHE? +z_O1^SY4Px&BG^c}0J&V84*LGaG67)z&6=_ao3;cNnii!tFWbQNPBiy{+^F4?Vlpe}NynjAlE0W2Bd%(u%Q>G +zo8eG^!sZqmuyG0w2C;JfD~eQVN#&oP`~7_vhO46m$&a@vF4;stMEWKoBxu*43phAb +z=S0^OHbZXeQD)*)*}KADnA(rUm`k$Z`p@U4*`O+ndo}v}8WFF?I_4>9Ef=rG;N}`u +z0KV-_cq1uJfk}#Fo|-E_VVd=oB2Hf|jcX;D)J(dAPv8#5k;W;6(u|bj7^z9-CQ^87 +zov5}#+-nsQ;mbHYnKc8IGQ#NjGZ?A#_eW2`$hlEe?J#Pif~25E#5%EA%WWUN@3APbw27%S-bit0KKYSPf>O0J3Pb%dbx*WOR-j@Qxi +zrnj|%NA9tT26JEKAbQ8lP4 +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 +z)fJh5<$#nitD$-=tSzPJ$2EiibJ~F1gQ; +z*fIYemG^5&&lR?hM(N4m(EN*tOkG|{eD-|a$1N0w9yQwpiyV-$fmD1d$3aqzo{6 +zX-(C({ObO$&0pUtgldXXs6`s92E-!oNN}7(KC}T5qL@wYgc!tTD-Q*%G$rLYT9`v9 +zG&Q;B$?u*0=0E>cAQlb3Xib19&r53iBwS7zTum5^0!~e#I+9|-uAoiE@wimNc7?4O +zPM1m;9JxG4ZIzv2O~LSL)GC6F05P4teIXuQ6X01@&{~M!H&aHVwD>dz9BRS3kei7V +zX5N1%23Ft-43UbtNye__08vj41r;!zfqy9t59vd +zIQ`w^dXJeM?ISYTN_FQTnzI$KgA9YPA&oFXagk0p({7t9*g8sDg{&mLlNK3aps1%X +z^i8PRbJ*S4d5}|syGVq0=4wo9!*6dn)BkHTLeZvHZ24Es;a*Xob&2&AT`rabQpUt# +zKn1S=hg!@?!xDHA6V;f|P)vwBglsB +zvaH6Kxza;4v@;*(sERkx)c9NfRn__C9jeXe$;X%$`N48P%9sn+8V%avz{=-)fS67c +z={D(}VMRbJ%8tgS_C`ffCk#VxEc9Gec5Gv%=4mW|AuC%~|KcnUclzk5b(XM`B{G)n +z)tS1KA`wZa+9ZY+?nNbyh4b!H@cRmi;wk`R>ZR3nCamV#^50IWKJo2gzp3xNUUE-}0Gj?^R +zhe8BeZ7kN0BpJKN2ww~g>QClHuSRBzjPuRPp!H2wOS{8tL$VYJvo1hNQ!5sa>g)2}x!9rvX>GlP(^YVHeIOw!1l*DJ7G-xt36XJ{vuxm12UTG|<;CQW*2NZz`i-*NA +zBsbNRNx4W(1Q2vAeuhOB4`-fukWh +z?)L-t<<&lm!k}tLsBUk<<|x(d0*R}thhXbYvkkGx9LoW*$O{7E&4{Nwixn#t8Y#_- +zzF1gffRs|c<}I&2cy;vZqC5OHg}Q9#NE#d(3g51*Bp_*58H($41|1xnj&q+hyBEdt +zjCK2{E=A`f8%|ELZYs|H^+9}^l372bCO3P73(F4cqNU +zVsr&6AJul0`c?N+%3J*Yh67fydHG?e$FV51(6;Kf{P4Up3VnANNlzSljgRtSdw@C{yTO( +zef;R6H5n4Lgn>f#*XE>d+|-oxdUH;3eujH4%`qUsp5@pD!H}$*NzfflagGY=<@1ww +zKD6iDqis9i__3e2U261SzW#h~Td;rom)~^$A78O)`!`;^-U*-xBAP<&Qe#S(D5T8= +zVfBuzqj?r3LCGu8S(GQ117eX^oKR)b)PhvXoc<%(Vs%2lYxslz^Zs2u`+Ig~a_nq^ +zYMyr-mW#jB$5YoII8`oQ|5<`Im*kE`?w +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 +z+H5NYP0{5d>WS#&MQfx`O!@H$l(t?tr^Lk +z%Xv=-zy1%rSskJUfFWA=H2)t?Vtmu}w$U$jeKl6C%i7vJHS@H{3njG?U{N_(4oHO( +zgn}sZ*kIBQK78+q)JS{4cdKY_KHjI>kv$=uFUc +ze}1gX5c^c#BG#RA{mVMuKpFp6UVG|myydpAv@|*wm +zfc)GCUXZWhGNZ1in~@jJfLM0COqF`-SI+(8p|_p+a_V~>uT)<$_`?;;dH*Z;{_ubE +zvIQN|m~QiaZ)EkQ*ET)3YPq&q6cj53%c3Ay4oHP!z}joo*U|@1Ho_WhiKs{b4hJCO +zfo(kRfY1(;S7Gl2JSMD*k%fh+1RYeVg3V^k-QuA+6Xyd!5%}7@JUbF4q#Jlrl1|{Z +zg|CE`q`|PJ6een$EdmnlUgD}?dm+X@et+v+A;w)4$7n0-|IbA(zU?H@=EpL5OJn5f +z_?yoE)9E!cXOq8n=BwKQ+oK}~mOXV6ZOQeiQ-JYIdtYOHBtQQ=q)NaZ7D +z;Ry|PH!kgfL_ORwWum$fwrbF$QnF3YBzMYHjYivxZ;FLQVF)^SN&!>4t^-65k?8%#%5hIBoKv)IhN?r)vT@1ZbN^)9+8z7evijX!hxUJL-A{ua +zHBoRSM~fvXxpT7=5eRE@cA1p6f{{hum;?J##|*%uDR_E;mz5gW;YZ$!*;0})dF}rp +z;1qBeICAaZUf?MpEjKAd)CBu7LrUwyZjliI2Zz=MIN#*v5h2V;SF$M_3pltpmoa=A +z8&~?-+T!7;fB|5-+07YEDNg;$a?vG$ktkORF?Mh=QrFcxUi{u5BR}&LDepa*9J+q$ +zxr?4uI48;J6tgV#?VoJx0g^FQy^v58OH$p!qJps1 +zrx$Aq+{mpFOZpx$21BDlgA7Zw+BMEpU0fTmETj&@GS{!DU2#eJL`+=?V +zo|^-D0WZ)+?j3*iMaGx}PNaX7JK#nk>;y2s^LYrwE?iE5l--PsJcZxih}*p;N82nc +ziiz}ToM?8l7R>8-?$zk&@Mcs{o)G~%4+iWQ5)46U7N0AEh*#rGqdPaJYcW3Z+uwaG +z;<1OMz!+=vO?>xt_YCfPV#Urv&4=L#GxVCyOb^$LWKNya4V3ZE^4<$$)Ga%W?NYR= +zdE3EXjlS_+KX~e7tE>Ht*V}Sz_wIcgW@oqMVv~i1MPYHn8IfMcEsCuc9${X-zeVM8 +z75ds2aXA_P={jDYX}n}KTJ +zLEtDihlXoz8P5-LC(-CG&YT%X${kEjMp&`p5)OxzmSs`0xNV$qs!Z3r@F{|JAfw&t +zLNb@+9$hk{irZ^AazH87K0;2F3*CNdf%^(MkC0OF%*Fix-r0EIy&wC@3RO3D?f#in +zI}0(NU5|HXzWx72Y~4ai+YA_M2bmf0@rN{~qqyRSW-e}m}+IRoMf%aaA20{J*MMLy=IR7ybX +z;rZx@1krOX3bHVUv2)%dH+_9JIyz3{c3Zi{7A1u$80+$J-mdZh8EpgRRPCX+5x!=1c0YNZez*REjhmsQU_ugS$fkDvYGz=D%P)G_FFA13PqKj!z~`# +zxjD75q=@NRoNr}w4bg +z;FE?j@{!YzIzH0(Go1jcFwmvKe~+%}KKsJIiDPAq6b76905x6NIe4n=)(i-XGQe^` +zDgYIpt%ccnPsu4z66y51<%~0xKda=!AT9%~3mkA9WHo73t({p+paPyOjSJ`SUJHx7 +zQ}03o4QAW17hfEMX{U^3yTbiq)3@YTgDqU#bcokpwsG(DW)ykTx+ShCj?Z;9o6Slm6wf; +zZ7?7Za2>89cV1k#k$A={$_TA&d}E-F}}0@$u6SCO+8v@&%jrJ~P{@ +zzVOhmcfD|SJpPG)sqJd}jUPN&|H^|!?j&hpQ8`!+NCi^`_b(@j`4Vhin^u|1*A1^5 +zoIjCmtWhY3EG#lXQ!2L!>0FXcb4hTi>~YzO-(mhv +ztUY;k-8WwH6{F`xs}6thcec0as*?9cjY(Cp8$wJdQf9RoBoQ;4IZ+kD?=nzgQv{dQ +z9X(?v?GN##ZqSUgJU%|m&y1`=l{P}!H0_Za=~tgzv102dSKMO4@7yzTpKYw|)$X4@ +z$;i1U0GQ~1kcoZ(KGwTq^h2X>sy8xFMX%8leEb_Valmoq8{47!09*o0@t5<^UgEw~CLf-?iv_5{hpsY&hxNcSrf&4=SIiYfz^ab*_J5 +zdL-KOjo5|nd_!JLI#SaBsgS$+(idNzcc-ufh=3Tn@lUAMMzuvju)bIpH_;1Qy>PMv +zZc`u05|wn{kn6jO&7`9s=3*EXn@(a;INtZp-`)PccmD2@#~FrUy#Ci-xBtxfGmm95 +z?sS}oW)n=ed)ec%@fal-9h*%uTUBb>TzSTjc!$EAYxU4T32o5TgrdG(zw!01zx%m+ +z_Wj4sHDb#KUTTVxuTE+^0!AN|%x8Cm*Qf3qN +zPAV8u!7vOIGyYcTZ{uaxPTq6x8CK3+;SGZ;sE@TEo)ht6J5ov8zU{!!2S`m&zS$4?Hr(pC2E)^zfmk2H>{n +zPU32Cp&G~X#b!TF-OBkX-7O0qYhjTCmIGpO8*{M9fYS=(Nvc*p0PF{$k-nH+hRT)m +z%otg*87+4;r_P@0ee1h_H5rbCGjcwzqe}u8XL;PKak9;WO9)Cv^3$epq^W=n`AUgU +zg8O1l_BhqjNX44ZTfcLB+grbL{En}whEyMX?#f8deeD@txBua5yPo`&1Lt;-eXkSk +zhrDFdhxo|eKjjaX^B64Il_1caQw&z$_an@szkb +z@yB1>ypAWAM~UHVuKh{ZyPAqW;=ToscVe3c;9C9A?X +zcJkPnv5B$lo3C9%f;JpxXYUN-hUB??*p>^1WX+{Ho-*5xVxdcdgL7Om+m7W@KNYDz +z@}{pkKKYrS9DVP<9NPD~AD`aUH8j27AC8~2C-pwXkRw3&?LE&;-163tAvs0b=?Y62 +zG$dytDfXlco?dLuckidAeN5NukU +zOIF#{&g`6-GqZbrKOcQSQ||kcrJXs~x$pbB#I*F;H2M=_9((H0kNW}J`YNPM +zTF;M?X%6t?u$x^t*daZd#_6hYMKzITqhaxarj*y#Gf&F!zTwEF`zFBwo%(K-=Mxzk +zncNJjrcKr;kg+DO3vQMuUm14u+=3YjmhWNz)=EalN2#o^!l?g6b7PG2!WK$f?0|^c#3@%OncJ50V +zul7-zOQIRpjHlR`GHFhkw4_a%VDjJE-LD->vH3>q{@ZaCtjb^Ff4@|yc=Pe^RlifI +zV&2}7UD3(-Tx5JYhSyCxa4^03o*r3GTu$~)H|BzOK4l`whY)#@6%cV>-LNGHFSJe` +z97ifKLQ#@^)F_%Z)HS}j;0Kb)?ITJUp>wfj&V~x|Ec^ZFy +zX`<$}C$CtBl2*OxCGcw1tvO&`+*}aOlLTZANWnvACJ(DxulzFa`dok(#Z=5D-kh=(H|;ICF)r=`K+n6ffvh5`X4F+SCE +z?~Q!e`a$BMigyRUo%urKO}Yz{uYNwHq`m1b)o@K){i^RfTbFeHe~-1fYsb3ReeRPc +zb1MOnl^szOl7P$&DwCC_?#syI@B0P>+a?;ve0er~LmczLiQkC+efXpIJpQ2T +zZ2A{{Umstgb$GrId6S-+%p(+6V*2C*AkkIV29O#Ew;ECJOIje2>q=k(GjkSIFRSxK +z;(ioaIm(eFAR;RfSbrHVwn1Ej^-jk#BUSaFX>!3M3htBt_;+V4%i3G)c`c~AGQr~^ +z7e8(dvKUxY>=+D-wUIPL(r_b2wAs(`N)HeA$2mNhU+S9+p|4xoj<$Z#0jDMI9E$gMR#;KTQ^7+`? +z+NMfCe$n$)H{iBVOn|?7vA+wZ@B1;8mwxFtTUUJi^9OzH{nM?0PM&v%T^OX$0BBCFTBJaMYqob3T4%9bP`B5QG2)(IC{;E)I8 +zLr2Ve>2x~vw2qj&!I)D*^DD*X+9t_SquuZ~nOzVtu%Sv8LD>M!!ouDg?u5EIb} +zLNnCPDm*W#Oaiwa!|Sq8G78qsYo0io)`4NH1r!BK+w3`GCH2ajR}zhgx6)NR5xnOK +z%e;V*9%Q(?9e>p&A_J>&`+G=6R$y7%0Ei6iBr*UsZTs=uJA^~(F*Dh1w@zDU3ml7> +z!{+SXT~QcuSbiPqm^@!1@?lxB*S3sVmSsKs*v^i0CY{qA(?T#UnmWdK-9VflgQJz3 +zR3<+krc*VRV(+<8%xh7eGA*Xun=kIqu&78FEbWf48HhR%g84drc-~KJ*;jb`9e3{6 +z^77Sw>U-Do;#CLYxoNK}c92OnGv2!k)2Jaau?}mBR_y77%H$SjA?6K9Kt#^su)=^B +zosL5YCv{!xx)zN^S34cY?FJIO=F&LB8H*R3j%5awV<{dzJ4*U`l&4M0k&EcEr%YZz +zdmWhC_kZ|_me=y5m+yW;!!X^XD(V=BDGn7>Qn0L__kH`>3-xb2_7}mwb$_n%k9{h} +z?F|UMn8pTf+Xb@woDylcR+)2A2Q%sNU;e}syF32$9X>2&Jbty|u$9)%5vtEVnHlff +z#c=maq~nLMOvg%X3sFq61xw6I24W>$_9KxPMb|G(`@Gv-kES`ck6M(!^Bv~~fJREJ +zFhkN{;e}Ba)_FNp=i@`zqX +zGiUVtg5@XP{3kR&{`FMj6E6+p)iXH_kQm=cVjTQc$ElpM|Dh0biX@ggm6@4xU%Zc|LD*6u2{O_zFnf7)D>aRSc-iXbUGbNHeTtr +zzU%A=ox{odci*1xRE4NZEr~{u-v7au_WmsYu{S_;<;@2Vusg36h1sf9C&vG$@4s`Z +z2&enT)~$cv-c#Xa`)Ae7U3H}{)I4`h&1?=2y>i +znl{Svb-w@KDu2IGCzJDP +zhATMq;L^9hccANge{_7{xu4sb#amK<9$s^5U;DfNe!X5X=2TNqQKA%u^s?6CoySvE +z{KcBf4w8U~taZbtmC&KUQm11nX@*gWWnD+p);JxCC@j-7%_o2SWI0@TXv0air%g__ +zmQ1zJnVA-AyCUGxIJ~r?bT77x!K-n(&PP|!#S#V9IvvkU-p*GpeuDRBb0MF%KL~#I +znLi7CY76;xj91LMg^&GNU1DI#xrxp#)8A}U%^Ms3>OC$LOVxuDkLER}n9EF;PEmda +z%8?`>B5NiD&O%!~9H@bI1spFwTCxW>|*;je)%^-@BO{^7HW7~MbfN`Om-W{R7hept6uZ{RagJ>FAU4nrYeMx3bb7s +zv2#8l<|8?TE@mYIbr&Eo3Qt>b#p!rTieUt?tO=*X5XG@^{ib%OW5|^Pxs?c=rz{I^ +zcZ5g!;vB`9hJWk^u2UpCRs`cN#r^m@F+`fgE +z<)FC`d6EP~%vuKOufro}V9{BK^uaSg(&@NLfQo4jI~{~5nw(00mIz5eaxjsm35Uu8 +zCk+;5Oinm4cRm(yZFQKjf+TGp34Q9|S1RAXQ75yY5aR>XZ~FIXV;?%YCjbt0SrjEo +za?)H$0wQc-LU0haUxBLzoN+oH$E8x^PKO|h-n1#ackC_8Bh0 jxMcW +zAew&!2G-rPbTF8Z=U$<7e7;WpQDN*3CK)> +zE?!(-$+%l(8xA)`jHX$gHhIp;7-r-3{GiXy@xGw_%E@JVXHlBqj(6<3REYuqgPOQPP*ts;kLXW-KqE0s!r%>nkiRF*g$N3I^@yLRkLvEIoS +zpZ!aI@4znh7pt>+Cf2*ct7sVmz*pCCdF6Y4_Hx6vf87yke|FP?*Z&GUYp +zvgl#pQaRop;{393alflng{W7fC|iBzGB>HVPxI?XX7k?1`Oc}6Jka!N@=;V?RZlMS +z)?Ipd;T!*K3s~XXpY%7K2?F?9J5!2k6!u20Wd<3&zLy(k{X~cN0cG`>BgAy{G(1az +z_P1&fP+@%`#ulQa8Ab{*QEiYScJ=TCS1=Xbxk+37f@;?=ke&=z7`Rj60M4+Mdh +zSALa+kc(tMFa8QsotNi;J;k1PE_x?lT=1*>qiLe%ltlgkA0GvL1qv${_r$Hbk}k~` +zJKg?2KV7^e)iV8z-Pp@`Z-P+$K7utXKq=OiG%*83kt$d>nJ}n8YNpre7hwxFb`ZT? +z7@jMeZ#p6DW*9wanj|1|)NlRaZ;k*xlP#}U>h%q +zC12xb_CLWla!Tm>sV~_xgSu~Yg|GhnSu^R2s_vA(sFPckm+`*6xV%5c6O;r*l$>+0 +zDx238^g~vePlt|$xLYPO=5z?6aK85Wudh}VWr7kckD4|)<#Y`B3b`0i9I8H*F>yOF +z?_Bj$eDfg>$((vbU1LEh-%@r5Tc1mu{?OlDH{$+Lr-Koq92NQyx+EZC{z@j(c*^=F +z^xSac#%^xhnE7=L4F{>M-IeXIl@*nNPyf|Fy!dPH|9?tun`w81>ctiG0S!*aG8?MG +z#pVDHJ2k&wC+^hTQ#m`rqPrif^zcHnzdX+J0N!8bvq%4)_h!9i=_S?`rSFP`68VSN +z&pm(l<3Hp5L8x9Gp7y_Q)9!z)>pk>Ki_ib%pC4HLr@!sM*+$v(Bg$Jr6A)Pe5%XF+ +z?xLc?=_o`2egDT#4tw05j#N6;Xjztv64~~YFj#tNoUSDmi~@zJ(o;aDMTO$vHmC|0 +z1?#XqU%i=cCI6oHX8roJteWb>)Anl$6E*(cu|K{ifoRuy_C4m=KkfTeS7LG9rmr0z +zJo!Yc-7yIl(X$TQ=iN0P1LFG@E78)|CHA$hNaGU{ZhZ}i(sK+DRQkNM2=(& +zmJo%KNHpI4kb#9(knd38gbiyp@Y0zV`vBE6&5~N~GAzO!V{G?oTx#%hEufcARi~~9 +zt<8RpS9#c4%z5j5?5p+iP%-D6OU|+K$WgYXZ+|RE#QJHzzBfo@)gwH8?r9!bnax-9O^9Os)0C_kL=B(_^_EvKMoWB%!$~^cE~3<}b_AFwL_s?(K*w +zrlPDpv}{vf#l%4KctxGlp$U8Z?yvvu!+isN2cA0c)QSQcWlm21_Do +zdIROvcD80D#o4MNZfMh0hHAa6r!-2xmZi_|9_8=&?K>{Ss~8#oX}%7?*ZJvGJ^hA( +zcHiOx_4E%v!8aUD1P!zqi%Teq30T(1b32r#$G%a7sP33tF0n*eEA$e#WQ1bg=~<#Z +zXRTg+g_SF-P}NmLHP@w`mpH$^^JT?rB;|)c&ECV`J5sZ9`Kn&avO-SB +zbURfc>Qd?b-kJqXqka<_TACXeoV^nvew^?L)4zV(q|%d#B5lfEFxWmO^Tvcjb( +zk|u0gBvqww)x~s`fwmwWn!@Tr&5^J65H1ClI~|7|6fEDb@K47+$!|@&#p*dW-*bMh +zfTli#jyB_Gh70+_4t6&9$oA4THc8v +z?Rv|n9~@~Jth77%5H_o;sjK_IZ+zgHzy9=Jw;6`f>|`t>NxV(|@+`x9Q^w-K&IpGV +zg$mab#H(@Lqp`hEv;TT)A)gipq$;O1^zc +z(>s6mUE8;9-hSohe)<3ENG6kxm2(|Qvc;oupxT22P15WW%djJ3(yy!JRK_)1wO+<& +zewE0^hxqWrAL7GzKYY*DwhG2qZsNq{6Kq<1`{Nph@pXQhFk=tm3A{`)wgN0iwqqI0 +zScZ2fw6SjkIJH|$z5$Bq>PzoF5FJ0UYT6fA=H?=XGba@K42Te=r>bf{H8or89CD&U +z?HpY{(QKKJ+}hvPUp?My%_99)RnYFbEuib@{-6~O?;hTode_Bm&;G;r{Fj&BIB!qn +z@?%;E%N8$N^y$C+2gmz@#4-e&j==_oq7?2bPgijlYHTqrE6iBx?g!t%_fJtqn&do3Ro5x<9cU%N8<|l;VNz0Hg8*7 +zT~+;plQE2^*kr*qCu7K$rf^Ov;Fr5;Ar*{@PyGz<8NL01BkVZ%9Ufn=U`-~?o8efP`hXss$Nszxb9DG9f>mMNT*pL9OZHqb>05Ew#kGN&0GkL{-3}4?u+05#CKloSlfNt?m2{g)~sAx3fp_`TXCq= +z85Zl#j^Z0ma@5XoD?J>o^KsCl(q!kjB0EdCwC#($b05Ge&R*HhGq*RLOrfZg+fcm~ +zyU<)WiXGowhtSjbDh|-NY5|_$nqtQ?4M{;nS(7bTV*W`KZf8uxQGa+gTd%U^^;v<6 +zhljWN+T!c6uK)lJ% +zf;um|6othzze5zl&+~74hp0JqhSd#lTctC%?-JbFKB!UEdZBPpOx?ly)**CNJ5Al< +zYgD!FMo}Cu4}2TB#1dsKt3&7>IOU(kT{OS^fQV8Qi|t`}_!+9JZLfTjt}rvENk&x* +zTi_wu<$dY(A9!qop8t=S?Bpt-#chk*{_|h|>&g@F{;7~@nzasvQFcuTr(;2LSA=8B +z!{l|i-vZyoF}!tN4pw>C0a=th5(QDs@VzB$74^<-aW3yRH1`FHc;Y)sz#>?4h>FIY +zl;pKc35Fy@4zjvPYJeAl@a_V~B1G{RMnUdMFMh_eb?mPf>>qmVsA_mkm+z`48C@9< +zcoro#X_|fC75azWuGZd~g?SDo-(m%}Z1J*1-}u5eul(MJKXCrSr3+4!?3`1F +ztkWi2FN|@#J;VaHI{Q+s8I#%@F?M-04*2!*t`s)sq>~MIJ>nry-AjD5wE(kCc@yTG +zwk}A;!Ge{47Gl23DgjZ!U+6%Dm@6LqV#OZ5_-f@z3)uIUy-!(>4L@o}_21Z4-;3)$ +z^-!>>w_3K2l!;}Fmo56{zx?N-kNw@B@Bi{QzPuTVSDi|^cdKm#2o`Jp0#MQ>TRX<+ +zTvRr33Ox;nw`1p)R|xY=t{d?H_FrWzOqUTx@^j8qk7GD~5K9Ud+v$JzvnlExD} +zO=4mL#ksK~H;+VFlLSP}Ps-H$ehV@c@bDisKeW$l?Ds}=!*rX9|B}y&)TdB>b};9p +z#M@Chv7ozdeL;d11@(u&{YQJ=_}a(L{nj7-W^{0Pa8ohn?2Zz1sT@n2_)H6T(x6#Y +z=n1>IT<>E85GqC-cC(;uG{v!M57Tzk&eruPJ1g9b0bv_L6Zz9f$4}$(?ZPt8Gchnk +zGO`1g_ln&U=@`w{^1X)$)!)6^v1f+2rtt(`#$PpzCs>23tpXmvGEdWYp%v4pAXI-4 +zm*=)j=C%)e<>n{4wZIikb0Xm4Q9I)kc^JI16W!fSCbgpAb4?69gvw&xEStUOx=>pxV+i@JBkeMB3SzpsMg3V8fDi2*#^tUhWiP&M;IZu2mSb`f}BDT-`gbMpwMh +zKJ^vjqD2Ss``6xQh{?Q1QI^u!xM(&p2zz|&k3YWmwR>JKTFlh|03ZNKL_t({@`E4$ +zV`Xf7?A~fXMUXP6;ML^Aq=foIDbQ;{*sXG^!H3VVi2HP!yxQcUal>L%0gs}P*LD<5 +zfoc!l(GX~1T!r+xKbxW?IDD64TWE!U!>CSG&uBN?> +z`SI`3%WNBtTFfqS5su302OtScr>Mbu)e9|ASe9=PQ825Zr(CxI2$3^IO$1H(^!>y#tQ<&isLG9RG(~JYMN@l-w5qVGm~q@qRXDS%l9i@K +zTveuCrPCBD^PQ*B&%SC8+W>E!j|re+ruT?B%CcJN?|7Mp6#*2*Gvn(s$%XWtAEkcj +z^Qij9?B_9)B%|5ha2U>dTp`LxUcCxbSQdnrBXGaFtyv8<2A3)&0TJ_rC!J}uE_si$ +zHoo=l=TdQXbklp^;J&`C`_$Nq!PNM={?=um+7fNKT;CQ*c~;-|_OzzO3Kz8~q#av# +zuKU8@|I5ImZ+)cba}UIMcp(1j?=3i0^dRnHfp}FXk9!hYy$xkBRv6hE9p{X=l7Gr>>D%?ES{F?i{ +zPs~%9eD$9lj*l!v_c`g&lq4ukoQlYy!P +zoXB?^A+qG?fm;i#7vFUy;r3cnZXwZXQ#DB~lL81w{8d>cA2(gTyo*@us7;{?;TW$5 +zUX3Mr4rA&nD->u^6;|Jtdnmq5}@*6Fe*Iqk6>j`>$n|SrkSriz-FdW}j +zBg#Y4U=(nCJKtD}aMIvvK4WMKix&AM +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 +z%|1|{I%E`BlJmqvO +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 +z&AELRES%Jp<=`jw2bex +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 +HcTf5su~nL$ + +-- +1.9.0 + diff --git a/0004-Update-the-GPL-comments-with-the-new-FSF-address.patch b/0004-Update-the-GPL-comments-with-the-new-FSF-address.patch deleted file mode 100644 index a467dd4..0000000 --- a/0004-Update-the-GPL-comments-with-the-new-FSF-address.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 817161c4596df2fba45e5d801ed26ddc0bb4f4e2 Mon Sep 17 00:00:00 2001 -From: David Shea -Date: Thu, 14 Nov 2013 10:50:49 -0500 -Subject: [PATCH 04/18] Update the GPL comments with the new FSF address. - -The Free Software Foundation's address is now at 51 Franklin St. The -rest of the GPL v2 boilerplate comment is unchanged. ---- - src/cc-timezone-map.c | 6 +++--- - src/cc-timezone-map.h | 6 +++--- - src/tz.c | 6 +++--- - src/tz.h | 6 +++--- - 4 files changed, 12 insertions(+), 12 deletions(-) - -diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c -index 4d7fa40..60297e4 100644 ---- a/src/cc-timezone-map.c -+++ b/src/cc-timezone-map.c -@@ -15,9 +15,9 @@ - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Author: Thomas Wood - * -diff --git a/src/cc-timezone-map.h b/src/cc-timezone-map.h -index 8a6bf9c..ddb6961 100644 ---- a/src/cc-timezone-map.h -+++ b/src/cc-timezone-map.h -@@ -11,9 +11,9 @@ - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Author: Thomas Wood - * -diff --git a/src/tz.c b/src/tz.c -index 969119a..c294b44 100644 ---- a/src/tz.c -+++ b/src/tz.c -@@ -17,9 +17,9 @@ - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - - -diff --git a/src/tz.h b/src/tz.h -index 3ade1f8..005d72f 100644 ---- a/src/tz.h -+++ b/src/tz.h -@@ -17,9 +17,9 @@ - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - - --- -1.8.4.2 - diff --git a/0005-Create-local-copies-of-string-properties.patch b/0005-Create-local-copies-of-string-properties.patch deleted file mode 100644 index fde809c..0000000 --- a/0005-Create-local-copies-of-string-properties.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 94fb062ff98ba6eab156493b3ad7ef210d175a79 Mon Sep 17 00:00:00 2001 -From: David Shea -Date: Thu, 14 Nov 2013 10:50:49 -0500 -Subject: [PATCH 05/18] Create local copies of string properties. - -The string values passed to set_property are owned by the caller, so we -need to create new copies of the strings to store in the private data -structure. - -The dispose method already had code to free the private strings, but was -missing a check for the en_name property: added one. ---- - src/tz.c | 24 ++++++++++++++++++------ - 1 file changed, 18 insertions(+), 6 deletions(-) - -diff --git a/src/tz.c b/src/tz.c -index c294b44..8d83d0a 100644 ---- a/src/tz.c -+++ b/src/tz.c -@@ -124,16 +124,20 @@ cc_timezone_location_set_property (GObject *object, - CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; - switch (property_id) { - case PROP_COUNTRY: -- priv->country = g_value_get_string(value); -+ g_free(priv->country); -+ priv->country = g_strdup(g_value_get_string(value)); - break; - case PROP_FULL_COUNTRY: -- priv->full_country = g_value_get_string(value); -+ g_free(priv->full_country); -+ priv->full_country = g_strdup(g_value_get_string(value)); - break; - case PROP_EN_NAME: -- priv->en_name = g_value_get_string(value); -+ g_free(priv->en_name); -+ priv->en_name = g_strdup(g_value_get_string(value)); - break; - case PROP_STATE: -- priv->state = g_value_get_string(value); -+ g_free(priv->state); -+ priv->state = g_strdup(g_value_get_string(value)); - break; - case PROP_LATITUDE: - priv->latitude = g_value_get_double(value); -@@ -142,10 +146,12 @@ cc_timezone_location_set_property (GObject *object, - priv->longitude = g_value_get_double(value); - break; - case PROP_ZONE: -- priv->zone = g_value_get_string(value); -+ g_strdup(priv->zone); -+ priv->zone = g_strdup(g_value_get_string(value)); - break; - case PROP_COMMENT: -- priv->comment = g_value_get_string(value); -+ g_free(priv->comment); -+ priv->comment = g_strdup(g_value_get_string(value)); - break; - case PROP_DIST: - priv->dist = g_value_get_double(value); -@@ -172,6 +178,12 @@ cc_timezone_location_dispose (GObject *object) - priv->full_country = NULL; - } - -+ if (priv->en_name) -+ { -+ g_free (priv->en_name); -+ priv->en_name = NULL; -+ } -+ - if (priv->state) - { - g_free (priv->state); --- -1.8.4.2 - diff --git a/0006-Moved-CcTimezoneLocation-into-its-own-file.patch b/0006-Moved-CcTimezoneLocation-into-its-own-file.patch deleted file mode 100644 index 86a3f09..0000000 --- a/0006-Moved-CcTimezoneLocation-into-its-own-file.patch +++ /dev/null @@ -1,1157 +0,0 @@ -From f2f3c519595467d34c4f2c5c199cee62439c7e77 Mon Sep 17 00:00:00 2001 -From: David Shea -Date: Thu, 14 Nov 2013 10:50:49 -0500 -Subject: [PATCH 06/18] Moved CcTimezoneLocation into its own file. - -Mixing GObject and non-GObject code in tz.c confuses g-ir-scanner and -adds a lot non-introspectable identifiers to the .gir file. - -Added get and set functions for the CcTimezoneLocation properties. ---- - src/Makefile.am | 15 +- - src/cc-timezone-location.c | 393 +++++++++++++++++++++++++++++++++++++++++++++ - src/cc-timezone-location.h | 95 +++++++++++ - src/cc-timezone-map.c | 53 ++---- - src/cc-timezone-map.h | 1 + - src/tz.c | 319 +++--------------------------------- - src/tz.h | 44 +---- - 7 files changed, 533 insertions(+), 387 deletions(-) - create mode 100644 src/cc-timezone-location.c - create mode 100644 src/cc-timezone-location.h - -diff --git a/src/Makefile.am b/src/Makefile.am -index 05dfb1a..b4461cd 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -63,7 +63,7 @@ AM_CPPFLAGS = \ - - noinst_PROGRAMS = test-timezone - --test_timezone_SOURCES = test-timezone.c tz.c tz.h -+test_timezone_SOURCES = test-timezone.c cc-timezone-location.c tz.c tz.h - test_timezone_LDADD = $(LIBTIMEZONEMAP_LIBS) -lm - test_timezone_CFLAGS = $(LIBTIMEZONEMAP_CFLAGS) - -@@ -76,12 +76,11 @@ check-local: test-timezone - - lib_LTLIBRARIES = libtimezonemap.la - --libtimezonemap_la_SOURCES = \ -- cc-timezone-map.c \ -- cc-timezone-map.h \ -- timezone-completion.c \ -- timezone-completion.h \ -- tz.c tz.h -+libtimezonemap_GISOURCES = cc-timezone-map.c cc-timezone-map.h \ -+ cc-timezone-location.c cc-timezone-location.h \ -+ timezone-completion.c timezone-completion.h -+libtimezonemap_NONGISOURCES = tz.c tz.h -+libtimezonemap_la_SOURCES = $(libtimezonemap_GISOURCES) $(libtimezonemap_NONGISOURCES) - - # Specify 'timezonemap' twice: once for package (so we could eventually add - # a timezonemap-gtk4 for example), and once for namespacing inside code so -@@ -105,7 +104,7 @@ INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) - - INTROSPECTION_GIRS = TimezoneMap-1.0.gir - --introspection_sources = $(libtimezonemap_la_SOURCES) -+introspection_sources = $(libtimezonemap_GISOURCES) - - TimezoneMap-1.0.gir: libtimezonemap.la - TimezoneMap_1_0_gir_INCLUDES = GObject-2.0 Gtk-3.0 Json-1.0 -diff --git a/src/cc-timezone-location.c b/src/cc-timezone-location.c -new file mode 100644 -index 0000000..3bf4cad ---- /dev/null -+++ b/src/cc-timezone-location.c -@@ -0,0 +1,393 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -+/* Generic timezone utilities. -+ * -+ * Copyright (C) 2000-2001 Ximian, Inc. -+ * -+ * Authors: Hans Petter Jansson -+ * -+ * Largely based on Michael Fulbright's work on Anaconda. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ */ -+ -+#include "cc-timezone-location.h" -+ -+G_DEFINE_TYPE (CcTimezoneLocation, cc_timezone_location, G_TYPE_OBJECT) -+ -+#define TIMEZONE_LOCATION_PRIVATE(o) \ -+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocationPrivate)) -+ -+struct _CcTimezoneLocationPrivate -+{ -+ gchar *country; -+ gchar *full_country; -+ gchar *en_name; -+ gchar *state; -+ gdouble latitude; -+ gdouble longitude; -+ gchar *zone; -+ gchar *comment; -+ -+ gdouble dist; /* distance to clicked point for comparison */ -+}; -+ -+enum { -+ PROP_0, -+ PROP_COUNTRY, -+ PROP_FULL_COUNTRY, -+ PROP_EN_NAME, -+ PROP_STATE, -+ PROP_LATITUDE, -+ PROP_LONGITUDE, -+ PROP_ZONE, -+ PROP_COMMENT, -+ PROP_DIST, -+}; -+ -+static void -+cc_timezone_location_get_property (GObject *object, -+ guint property_id, -+ GValue *value, -+ GParamSpec *pspec) -+{ -+ CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -+ switch (property_id) { -+ case PROP_COUNTRY: -+ g_value_set_string (value, priv->country); -+ break; -+ case PROP_FULL_COUNTRY: -+ g_value_set_string (value, priv->full_country); -+ break; -+ case PROP_EN_NAME: -+ g_value_set_string (value, priv->en_name); -+ break; -+ case PROP_STATE: -+ g_value_set_string (value, priv->state); -+ break; -+ case PROP_LATITUDE: -+ g_value_set_double (value, priv->latitude); -+ break; -+ case PROP_LONGITUDE: -+ g_value_set_double (value, priv->longitude); -+ break; -+ case PROP_ZONE: -+ g_value_set_string (value, priv->zone); -+ break; -+ case PROP_COMMENT: -+ g_value_set_string (value, priv->comment); -+ break; -+ case PROP_DIST: -+ g_value_set_double (value, priv->dist); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -+ } -+} -+ -+static void -+cc_timezone_location_set_property (GObject *object, -+ guint property_id, -+ const GValue *value, -+ GParamSpec *pspec) -+{ -+ CcTimezoneLocation *loc = CC_TIMEZONE_LOCATION(object); -+ switch (property_id) { -+ case PROP_COUNTRY: -+ cc_timezone_location_set_country(loc, g_value_get_string(value)); -+ break; -+ case PROP_FULL_COUNTRY: -+ cc_timezone_location_set_full_country(loc, g_value_get_string(value)); -+ break; -+ case PROP_EN_NAME: -+ cc_timezone_location_set_en_name(loc, g_value_get_string(value)); -+ break; -+ case PROP_STATE: -+ cc_timezone_location_set_state(loc, g_value_get_string(value)); -+ break; -+ case PROP_LATITUDE: -+ cc_timezone_location_set_latitude(loc, g_value_get_double(value)); -+ break; -+ case PROP_LONGITUDE: -+ cc_timezone_location_set_longitude(loc, g_value_get_double(value)); -+ break; -+ case PROP_ZONE: -+ cc_timezone_location_set_zone(loc, g_value_get_string(value)); -+ break; -+ case PROP_COMMENT: -+ cc_timezone_location_set_comment(loc, g_value_get_string(value)); -+ break; -+ case PROP_DIST: -+ cc_timezone_location_set_dist(loc, g_value_get_double(value)); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -+ } -+} -+ -+static void -+cc_timezone_location_dispose (GObject *object) -+{ -+ CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -+ -+ if (priv->country) -+ { -+ g_free (priv->country); -+ priv->country = NULL; -+ } -+ -+ if (priv->full_country) -+ { -+ g_free (priv->full_country); -+ priv->full_country = NULL; -+ } -+ -+ if (priv->en_name) -+ { -+ g_free (priv->en_name); -+ priv->en_name = NULL; -+ } -+ -+ if (priv->state) -+ { -+ g_free (priv->state); -+ priv->state = NULL; -+ } -+ -+ if (priv->zone) -+ { -+ g_free (priv->zone); -+ priv->zone = NULL; -+ } -+ -+ if (priv->comment) -+ { -+ g_free (priv->comment); -+ priv->comment = NULL; -+ } -+ -+ G_OBJECT_CLASS (cc_timezone_location_parent_class)->dispose (object); -+} -+ -+static void -+cc_timezone_location_finalize (GObject *object) -+{ -+ CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -+ G_OBJECT_CLASS (cc_timezone_location_parent_class)->finalize (object); -+} -+ -+static void -+cc_timezone_location_class_init (CcTimezoneLocationClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ g_type_class_add_private (klass, sizeof (CcTimezoneLocationPrivate)); -+ -+ object_class->get_property = cc_timezone_location_get_property; -+ object_class->set_property = cc_timezone_location_set_property; -+ object_class->dispose = cc_timezone_location_dispose; -+ object_class->finalize = cc_timezone_location_finalize; -+ -+ g_object_class_install_property(object_class, -+ PROP_COUNTRY, -+ g_param_spec_string ("country", -+ "Country", -+ "The country for the location", -+ "", -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_FULL_COUNTRY, -+ g_param_spec_string ("full_country", -+ "Country (full name)", -+ "The full country name", -+ "", -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_EN_NAME, -+ g_param_spec_string ("en_name", -+ "English Name", -+ "The name of the location", -+ "", -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_STATE, -+ g_param_spec_string ("state", -+ "State", -+ "The state for the location", -+ "", -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_LATITUDE, -+ g_param_spec_double ("latitude", -+ "Latitude", -+ "The latitude for the location", -+ -90.0, -+ 90.0, -+ 0.0, -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_LONGITUDE, -+ g_param_spec_double ("longitude", -+ "Longitude", -+ "The longitude for the location", -+ -180.0, -+ 180.0, -+ 0.0, -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_ZONE, -+ g_param_spec_string ("zone", -+ "Zone", -+ "The time zone for the location", -+ "", -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_COMMENT, -+ g_param_spec_string ("Comment", -+ "Comment", -+ "A comment for the location", -+ "", -+ G_PARAM_READWRITE)); -+ g_object_class_install_property(object_class, -+ PROP_DIST, -+ g_param_spec_double ("dist", -+ "Distance", -+ "The distance for the location", -+ 0.0, -+ DBL_MAX, -+ 0.0, -+ G_PARAM_READWRITE)); -+} -+ -+static void -+cc_timezone_location_init (CcTimezoneLocation *self) { -+ CcTimezoneLocationPrivate *priv; -+ priv = self->priv = TIMEZONE_LOCATION_PRIVATE (self); -+} -+ -+CcTimezoneLocation * -+cc_timezone_location_new (void) -+{ -+ return g_object_new (CC_TYPE_TIMEZONE_LOCATION, NULL); -+} -+ -+const gchar *cc_timezone_location_get_country(CcTimezoneLocation *loc) -+{ -+ return loc->priv->country; -+} -+ -+void cc_timezone_location_set_country(CcTimezoneLocation *loc, const gchar *country) -+{ -+ g_free(loc->priv->country); -+ loc->priv->country = g_strdup(country); -+ -+ g_object_notify(G_OBJECT(loc), "country"); -+} -+ -+const gchar *cc_timezone_location_get_full_country(CcTimezoneLocation *loc) -+{ -+ return loc->priv->full_country; -+} -+ -+void cc_timezone_location_set_full_country(CcTimezoneLocation *loc, const gchar *full_country) -+{ -+ g_free(loc->priv->full_country); -+ loc->priv->full_country = g_strdup(full_country); -+ -+ g_object_notify(G_OBJECT(loc), "full_country"); -+} -+ -+const gchar *cc_timezone_location_get_en_name(CcTimezoneLocation *loc) -+{ -+ return loc->priv->en_name; -+} -+ -+void cc_timezone_location_set_en_name(CcTimezoneLocation *loc, const gchar *en_name) -+{ -+ g_free(loc->priv->en_name); -+ loc->priv->full_country = g_strdup(en_name); -+ -+ g_object_notify(G_OBJECT(loc), "en_name"); -+} -+ -+const gchar *cc_timezone_location_get_state(CcTimezoneLocation *loc) -+{ -+ return loc->priv->state; -+} -+ -+void cc_timezone_location_set_state(CcTimezoneLocation *loc, const gchar *state) -+{ -+ g_free(loc->priv->state); -+ loc->priv->state = g_strdup(state); -+ -+ g_object_notify(G_OBJECT(loc), "state"); -+} -+ -+gdouble cc_timezone_location_get_latitude(CcTimezoneLocation *loc) -+{ -+ return loc->priv->latitude; -+} -+ -+void cc_timezone_location_set_latitude(CcTimezoneLocation *loc, gdouble lat) -+{ -+ loc->priv->latitude = lat; -+ g_object_notify(G_OBJECT(loc), "latitude"); -+} -+ -+gdouble cc_timezone_location_get_longitude(CcTimezoneLocation *loc) -+{ -+ return loc->priv->longitude; -+} -+ -+void cc_timezone_location_set_longitude(CcTimezoneLocation *loc, gdouble lng) -+{ -+ loc->priv->longitude = lng; -+ g_object_notify(G_OBJECT(loc), "longitude"); -+} -+ -+const gchar *cc_timezone_location_get_zone(CcTimezoneLocation *loc) -+{ -+ return loc->priv->zone; -+} -+ -+void cc_timezone_location_set_zone(CcTimezoneLocation *loc, const gchar *zone) -+{ -+ g_free(loc->priv->zone); -+ loc->priv->zone = g_strdup(zone); -+ -+ g_object_notify(G_OBJECT(loc), "zone"); -+} -+ -+const gchar *cc_timezone_location_get_comment(CcTimezoneLocation *loc) -+{ -+ return loc->priv->comment; -+} -+ -+void cc_timezone_location_set_comment(CcTimezoneLocation *loc, const gchar *comment) -+{ -+ g_free(loc->priv->comment); -+ loc->priv->comment = g_strdup(comment); -+ -+ g_object_notify(G_OBJECT(loc), "Comment"); -+} -+ -+gdouble cc_timezone_location_get_dist(CcTimezoneLocation *loc) -+{ -+ return loc->priv->dist; -+} -+ -+void cc_timezone_location_set_dist(CcTimezoneLocation *loc, gdouble dist) -+{ -+ loc->priv->dist = dist; -+ g_object_notify(G_OBJECT(loc), "dist"); -+} -diff --git a/src/cc-timezone-location.h b/src/cc-timezone-location.h -new file mode 100644 -index 0000000..d322794 ---- /dev/null -+++ b/src/cc-timezone-location.h -@@ -0,0 +1,95 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -+/* Timezone location information -+ * -+ * Copyright (C) 2000-2001 Ximian, Inc. -+ * -+ * Authors: Hans Petter Jansson -+ * -+ * Largely based on Michael Fulbright's work on Anaconda. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -+ */ -+ -+#ifndef _CC_TIMEZONE_LOCATION_H -+#define _CC_TIMEZONE_LOCATION_H -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+#define CC_TYPE_TIMEZONE_LOCATION cc_timezone_location_get_type() -+ -+#define CC_TIMEZONE_LOCATION(obj) \ -+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ -+ CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocation)) -+ -+#define CC_TIMEZONE_LOCATION_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_CAST ((klass), \ -+ CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocationClass)) -+ -+#define CC_IS_TIMEZONE_LOCATION(obj) \ -+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ -+ CC_TYPE_TIMEZONE_LOCATION)) -+ -+#define CC_IS_TIMEZONE_LOCATION_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \ -+ CC_TYPE_TIMEZONE_LOCATION)) -+ -+#define CC_TIMEZONE_LOCATION_GET_CLASS(obj) \ -+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ -+ CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocationClass)) -+ -+typedef struct _CcTimezoneLocation CcTimezoneLocation; -+typedef struct _CcTimezoneLocationClass CcTimezoneLocationClass; -+typedef struct _CcTimezoneLocationPrivate CcTimezoneLocationPrivate; -+ -+struct _CcTimezoneLocation -+{ -+ GObject parent; -+ CcTimezoneLocationPrivate *priv; -+}; -+ -+struct _CcTimezoneLocationClass -+{ -+ GObjectClass parent_class; -+}; -+ -+GType cc_timezone_location_get_type (void) G_GNUC_CONST; -+ -+CcTimezoneLocation *cc_timezone_location_new (void); -+ -+const gchar *cc_timezone_location_get_country(CcTimezoneLocation *loc); -+void cc_timezone_location_set_country(CcTimezoneLocation *loc, const gchar *country); -+const gchar *cc_timezone_location_get_full_country(CcTimezoneLocation *loc); -+void cc_timezone_location_set_full_country(CcTimezoneLocation *loc, const gchar *full_country); -+const gchar *cc_timezone_location_get_en_name(CcTimezoneLocation *loc); -+void cc_timezone_location_set_en_name(CcTimezoneLocation *loc, const gchar *en_name); -+const gchar *cc_timezone_location_get_state(CcTimezoneLocation *loc); -+void cc_timezone_location_set_state(CcTimezoneLocation *loc, const gchar *state); -+gdouble cc_timezone_location_get_latitude(CcTimezoneLocation *loc); -+void cc_timezone_location_set_latitude(CcTimezoneLocation *loc, gdouble lat); -+gdouble cc_timezone_location_get_longitude(CcTimezoneLocation *loc); -+void cc_timezone_location_set_longitude(CcTimezoneLocation *loc, gdouble lng); -+const gchar *cc_timezone_location_get_zone(CcTimezoneLocation *loc); -+void cc_timezone_location_set_zone(CcTimezoneLocation *loc, const gchar *zone); -+const gchar *cc_timezone_location_get_comment(CcTimezoneLocation *loc); -+void cc_timezone_location_set_comment(CcTimezoneLocation *loc, const gchar *comment); -+gdouble cc_timezone_location_get_dist(CcTimezoneLocation *loc); -+void cc_timezone_location_set_dist(CcTimezoneLocation *loc, gdouble dist); -+ -+G_END_DECLS -+ -+#endif /* _CC_TIMEZONE_LOCATION_H */ -diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c -index 60297e4..a782089 100644 ---- a/src/cc-timezone-map.c -+++ b/src/cc-timezone-map.c -@@ -24,6 +24,7 @@ - */ - - #include "cc-timezone-map.h" -+#include "cc-timezone-location.h" - #include - #include "tz.h" - -@@ -822,16 +823,10 @@ cc_timezone_map_draw (GtkWidget *widget, - g_clear_error (&err); - } - -- GValue lat = {0}; -- GValue lon = {0}; -- g_value_init (&lat, G_TYPE_DOUBLE); -- g_value_init (&lon, G_TYPE_DOUBLE); -- g_object_get_property(G_OBJECT (priv->location), "latitude", &lat); -- g_object_get_property(G_OBJECT (priv->location), "longitude", &lon); -- pointx = convert_longtitude_to_x (g_value_get_double(&lon), alloc.width); -- pointy = convert_latitude_to_y (g_value_get_double(&lat), alloc.height); -- g_value_unset (&lon); -- g_value_unset (&lat); -+ pointx = convert_longtitude_to_x ( -+ cc_timezone_location_get_longitude(priv->location), alloc.width); -+ pointy = convert_latitude_to_y ( -+ cc_timezone_location_get_latitude(priv->location), alloc.height); - - if (pointy > alloc.height) - pointy = alloc.height; -@@ -881,17 +876,9 @@ static gint - sort_locations (CcTimezoneLocation *a, - CcTimezoneLocation *b) - { -- GValue val_a = {0}; -- GValue val_b = {0}; - gdouble dist_a, dist_b; -- g_value_init (&val_a, G_TYPE_DOUBLE); -- g_value_init (&val_b, G_TYPE_DOUBLE); -- g_object_get_property(G_OBJECT (a), "dist", &val_a); -- g_object_get_property(G_OBJECT (b), "dist", &val_b); -- dist_a = g_value_get_double(&val_a); -- dist_b = g_value_get_double(&val_b); -- g_value_unset (&val_a); -- g_value_unset (&val_b); -+ dist_a = cc_timezone_location_get_dist(a); -+ dist_b = cc_timezone_location_get_dist(b); - if (dist_a > dist_b) - return 1; - -@@ -934,13 +921,6 @@ get_loc_for_xy (GtkWidget * widget, gint x, gint y) - GtkAllocation alloc; - CcTimezoneLocation* location; - -- GValue glon = {0}; -- GValue glat = {0}; -- GValue gdist = {0}; -- g_value_init (&glon, G_TYPE_DOUBLE); -- g_value_init (&glat, G_TYPE_DOUBLE); -- g_value_init (&gdist, G_TYPE_DOUBLE); -- - rowstride = priv->visible_map_rowstride; - pixels = priv->visible_map_pixels; - -@@ -986,16 +966,13 @@ get_loc_for_xy (GtkWidget * widget, gint x, gint y) - gdouble pointx, pointy, dx, dy; - CcTimezoneLocation *loc = array->pdata[i]; - -- g_object_get_property(G_OBJECT (loc), "longitude", &glon); -- g_object_get_property(G_OBJECT (loc), "latitude", &glat); -- pointx = convert_longtitude_to_x (g_value_get_double(&glon), width); -- pointy = convert_latitude_to_y (g_value_get_double(&glat), height); -+ pointx = convert_longtitude_to_x (cc_timezone_location_get_longitude(loc), width); -+ pointy = convert_latitude_to_y (cc_timezone_location_get_latitude(loc), height); - - dx = pointx - x; - dy = pointy - y; - -- g_value_set_double(&gdist, (gdouble) dx * dx + dy * dy); -- g_object_set_property(G_OBJECT (loc), "dist", &gdist); -+ cc_timezone_location_set_dist(loc, (gdouble) dx * dx + dy * dy); - priv->distances = g_list_prepend (priv->distances, loc); - } - priv->distances = g_list_sort (priv->distances, (GCompareFunc) sort_locations); -@@ -1004,10 +981,6 @@ get_loc_for_xy (GtkWidget * widget, gint x, gint y) - priv->previous_y = y; - } - -- g_value_unset (&glon); -- g_value_unset (&glat); -- g_value_unset (&gdist); -- - return location; - } - -@@ -1143,8 +1116,6 @@ cc_timezone_map_set_timezone (CcTimezoneMap *map, - GPtrArray *locations; - guint i; - char *real_tz; -- GValue zone = {0}; -- g_value_init (&zone, G_TYPE_STRING); - - real_tz = g_hash_table_lookup (map->priv->alias_db, timezone); - -@@ -1153,9 +1124,8 @@ cc_timezone_map_set_timezone (CcTimezoneMap *map, - for (i = 0; i < locations->len; i++) - { - CcTimezoneLocation *loc = locations->pdata[i]; -- g_object_get_property(G_OBJECT (loc), "zone", &zone); - -- if (!g_strcmp0 (g_value_get_string(&zone), real_tz ? real_tz : timezone)) -+ if (!g_strcmp0 (cc_timezone_location_get_zone(loc), real_tz ? real_tz : timezone)) - { - set_location (map, loc); - break; -@@ -1163,7 +1133,6 @@ cc_timezone_map_set_timezone (CcTimezoneMap *map, - } - - gtk_widget_queue_draw (GTK_WIDGET (map)); -- g_value_unset (&zone); - } - - void -diff --git a/src/cc-timezone-map.h b/src/cc-timezone-map.h -index ddb6961..15f2e0b 100644 ---- a/src/cc-timezone-map.h -+++ b/src/cc-timezone-map.h -@@ -25,6 +25,7 @@ - - #include - #include "tz.h" -+#include "cc-timezone-location.h" - - G_BEGIN_DECLS - -diff --git a/src/tz.c b/src/tz.c -index 8d83d0a..9393ba2 100644 ---- a/src/tz.c -+++ b/src/tz.c -@@ -43,269 +43,6 @@ static int compare_country_names (const void *a, const void *b); - static void sort_locations_by_country (GPtrArray *locations); - static gchar * tz_data_file_get (gchar *env, gchar *defaultfile); - --G_DEFINE_TYPE (CcTimezoneLocation, cc_timezone_location, G_TYPE_OBJECT) -- --#define TIMEZONE_LOCATION_PRIVATE(o) \ -- (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocationPrivate)) -- --struct _CcTimezoneLocationPrivate --{ -- gchar *country; -- gchar *full_country; -- gchar *en_name; -- gchar *state; -- gdouble latitude; -- gdouble longitude; -- gchar *zone; -- gchar *comment; -- -- gdouble dist; /* distance to clicked point for comparison */ --}; -- --enum { -- PROP_0, -- PROP_COUNTRY, -- PROP_FULL_COUNTRY, -- PROP_EN_NAME, -- PROP_STATE, -- PROP_LATITUDE, -- PROP_LONGITUDE, -- PROP_ZONE, -- PROP_COMMENT, -- PROP_DIST, --}; -- --static void --cc_timezone_location_get_property (GObject *object, -- guint property_id, -- GValue *value, -- GParamSpec *pspec) --{ -- CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -- switch (property_id) { -- case PROP_COUNTRY: -- g_value_set_string (value, priv->country); -- break; -- case PROP_FULL_COUNTRY: -- g_value_set_string (value, priv->full_country); -- break; -- case PROP_EN_NAME: -- g_value_set_string (value, priv->en_name); -- break; -- case PROP_STATE: -- g_value_set_string (value, priv->state); -- break; -- case PROP_LATITUDE: -- g_value_set_double (value, priv->latitude); -- break; -- case PROP_LONGITUDE: -- g_value_set_double (value, priv->longitude); -- break; -- case PROP_ZONE: -- g_value_set_string (value, priv->zone); -- break; -- case PROP_COMMENT: -- g_value_set_string (value, priv->comment); -- break; -- case PROP_DIST: -- g_value_set_double (value, priv->dist); -- break; -- default: -- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -- } --} -- --static void --cc_timezone_location_set_property (GObject *object, -- guint property_id, -- const GValue *value, -- GParamSpec *pspec) --{ -- CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -- switch (property_id) { -- case PROP_COUNTRY: -- g_free(priv->country); -- priv->country = g_strdup(g_value_get_string(value)); -- break; -- case PROP_FULL_COUNTRY: -- g_free(priv->full_country); -- priv->full_country = g_strdup(g_value_get_string(value)); -- break; -- case PROP_EN_NAME: -- g_free(priv->en_name); -- priv->en_name = g_strdup(g_value_get_string(value)); -- break; -- case PROP_STATE: -- g_free(priv->state); -- priv->state = g_strdup(g_value_get_string(value)); -- break; -- case PROP_LATITUDE: -- priv->latitude = g_value_get_double(value); -- break; -- case PROP_LONGITUDE: -- priv->longitude = g_value_get_double(value); -- break; -- case PROP_ZONE: -- g_strdup(priv->zone); -- priv->zone = g_strdup(g_value_get_string(value)); -- break; -- case PROP_COMMENT: -- g_free(priv->comment); -- priv->comment = g_strdup(g_value_get_string(value)); -- break; -- case PROP_DIST: -- priv->dist = g_value_get_double(value); -- break; -- default: -- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -- } --} -- --static void --cc_timezone_location_dispose (GObject *object) --{ -- CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -- -- if (priv->country) -- { -- g_free (priv->country); -- priv->country = NULL; -- } -- -- if (priv->full_country) -- { -- g_free (priv->full_country); -- priv->full_country = NULL; -- } -- -- if (priv->en_name) -- { -- g_free (priv->en_name); -- priv->en_name = NULL; -- } -- -- if (priv->state) -- { -- g_free (priv->state); -- priv->state = NULL; -- } -- -- if (priv->zone) -- { -- g_free (priv->zone); -- priv->zone = NULL; -- } -- -- if (priv->comment) -- { -- g_free (priv->comment); -- priv->comment = NULL; -- } -- -- G_OBJECT_CLASS (cc_timezone_location_parent_class)->dispose (object); --} -- --static void --cc_timezone_location_finalize (GObject *object) --{ -- CcTimezoneLocationPrivate *priv = CC_TIMEZONE_LOCATION (object)->priv; -- G_OBJECT_CLASS (cc_timezone_location_parent_class)->finalize (object); --} -- --static void --cc_timezone_location_class_init (CcTimezoneLocationClass *klass) --{ -- GObjectClass *object_class = G_OBJECT_CLASS (klass); -- g_type_class_add_private (klass, sizeof (CcTimezoneLocationPrivate)); -- -- object_class->get_property = cc_timezone_location_get_property; -- object_class->set_property = cc_timezone_location_set_property; -- object_class->dispose = cc_timezone_location_dispose; -- object_class->finalize = cc_timezone_location_finalize; -- -- g_object_class_install_property(object_class, -- PROP_COUNTRY, -- g_param_spec_string ("country", -- "Country", -- "The country for the location", -- "", -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_FULL_COUNTRY, -- g_param_spec_string ("full_country", -- "Country (full name)", -- "The full country name", -- "", -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_EN_NAME, -- g_param_spec_string ("en_name", -- "English Name", -- "The name of the location", -- "", -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_STATE, -- g_param_spec_string ("state", -- "State", -- "The state for the location", -- "", -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_LATITUDE, -- g_param_spec_double ("latitude", -- "Latitude", -- "The latitude for the location", -- -90.0, -- 90.0, -- 0.0, -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_LONGITUDE, -- g_param_spec_double ("longitude", -- "Longitude", -- "The longitude for the location", -- -180.0, -- 180.0, -- 0.0, -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_ZONE, -- g_param_spec_string ("zone", -- "Zone", -- "The time zone for the location", -- "", -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_COMMENT, -- g_param_spec_string ("Comment", -- "Comment", -- "A comment for the location", -- "", -- G_PARAM_READWRITE)); -- g_object_class_install_property(object_class, -- PROP_DIST, -- g_param_spec_double ("dist", -- "Distance", -- "The distance for the location", -- 0.0, -- DBL_MAX, -- 0.0, -- G_PARAM_READWRITE)); --} -- --static void --cc_timezone_location_init (CcTimezoneLocation *self) { -- CcTimezoneLocationPrivate *priv; -- priv = self->priv = TIMEZONE_LOCATION_PRIVATE (self); --} -- --CcTimezoneLocation * --cc_timezone_location_new (void) --{ -- return g_object_new (CC_TYPE_TIMEZONE_LOCATION, NULL); --} -- - void parse_file (const char * filename, - const guint ncolumns, - GFunc func, -@@ -376,25 +113,24 @@ void parse_cities15000 (gpointer parsed_data, - - CcTimezoneLocation *loc = cc_timezone_location_new (); - -- loc->priv->country = g_strdup (parsed_data_v[8]); -- loc->priv->en_name = g_strdup (parsed_data_v[2]); -+ cc_timezone_location_set_country(loc, parsed_data_v[8]); -+ cc_timezone_location_set_en_name(loc, parsed_data_v[2]); - -- gchar * tmpState = g_strdup_printf ("%s.%s", loc->priv->country, -+ gchar * tmpState = g_strdup_printf ("%s.%s", -+ cc_timezone_location_get_country(loc), - parsed_data_v[10]); -- loc->priv->state = g_strdup ( -- (gchar *) g_hash_table_lookup ( -+ cc_timezone_location_set_state(loc, g_hash_table_lookup( - stateHash, - tmpState)); - g_free (tmpState); - -- loc->priv->full_country = g_strdup ( -- (gchar *) g_hash_table_lookup ( -+ cc_timezone_location_set_full_country(loc, g_hash_table_lookup( - countryHash, -- loc->priv->country)); -+ cc_timezone_location_get_country(loc))); - -- loc->priv->zone = g_strdup (parsed_data_v[17]); -- loc->priv->latitude = g_ascii_strtod(parsed_data_v[4], NULL); -- loc->priv->longitude = g_ascii_strtod(parsed_data_v[5], NULL); -+ cc_timezone_location_set_zone(loc, parsed_data_v[17]); -+ cc_timezone_location_set_latitude(loc, g_ascii_strtod(parsed_data_v[4], NULL)); -+ cc_timezone_location_set_longitude(loc, g_ascii_strtod(parsed_data_v[5], NULL)); - - #ifdef __sun - gchar *latstr, *lngstr, *p; -@@ -423,7 +159,7 @@ void parse_cities15000 (gpointer parsed_data, - g_ptr_array_add (ptr_array, (gpointer) locgrp); - } - #else -- loc->priv->comment = NULL; -+ cc_timezone_location_set_comment(loc, NULL); - #endif - - g_ptr_array_add (ptr_array, (gpointer) loc); -@@ -510,19 +246,6 @@ tz_db_free (TzDB *db) - g_free (db); - } - --static gint --sort_locations (CcTimezoneLocation *a, -- CcTimezoneLocation *b) --{ -- if (a->priv->dist > b->priv->dist) -- return 1; -- -- if (a->priv->dist < b->priv->dist) -- return -1; -- -- return 0; --} -- - static gdouble - convert_longtitude_to_x (gdouble longitude, gint map_width) - { -@@ -584,15 +307,17 @@ tz_location_set_locally (CcTimezoneLocation *loc) - struct tm *curzone; - gboolean is_dst = FALSE; - gint correction = 0; -+ const gchar *zone; - - g_return_val_if_fail (loc != NULL, 0); -- g_return_val_if_fail (loc->priv->zone != NULL, 0); -+ zone = cc_timezone_location_get_zone(loc); -+ g_return_val_if_fail (zone != NULL, 0); - - curtime = time (NULL); - curzone = localtime (&curtime); - is_dst = curzone->tm_isdst; - -- setenv ("TZ", loc->priv->zone, 1); -+ setenv ("TZ", zone, 1); - #if 0 - curtime = time (NULL); - curzone = localtime (&curtime); -@@ -614,11 +339,13 @@ tz_info_from_location (CcTimezoneLocation *loc) - TzInfo *tzinfo; - time_t curtime; - struct tm *curzone; -+ const gchar *zone; - - g_return_val_if_fail (loc != NULL, NULL); -- g_return_val_if_fail (loc->priv->zone != NULL, NULL); -+ zone = cc_timezone_location_get_zone(loc); -+ g_return_val_if_fail (zone != NULL, NULL); - -- setenv ("TZ", loc->priv->zone, 1); -+ setenv ("TZ", zone, 1); - - #if 0 - tzset (); -@@ -701,10 +428,12 @@ convert_pos (gchar *pos, int digits) - static int - compare_country_names (const void *a, const void *b) - { -- const CcTimezoneLocation *tza = * (CcTimezoneLocation **) a; -- const CcTimezoneLocation *tzb = * (CcTimezoneLocation **) b; -+ CcTimezoneLocation *tza = * (CcTimezoneLocation **) a; -+ CcTimezoneLocation *tzb = * (CcTimezoneLocation **) b; -+ const gchar *zone_a = cc_timezone_location_get_zone(tza); -+ const gchar *zone_b = cc_timezone_location_get_zone(tzb); - -- return strcmp (tza->priv->zone, tzb->priv->zone); -+ return strcmp (zone_a, zone_b); - } - - -diff --git a/src/tz.h b/src/tz.h -index 005d72f..8eb55d3 100644 ---- a/src/tz.h -+++ b/src/tz.h -@@ -27,7 +27,8 @@ - #define _E_TZ_H - - #include --#include -+ -+#include "cc-timezone-location.h" - - #ifndef __sun - # define TZ_DATA_FILE "/usr/share/libtimezonemap/ui/cities15000.txt" -@@ -40,49 +41,8 @@ - - G_BEGIN_DECLS - --#define CC_TYPE_TIMEZONE_LOCATION cc_timezone_location_get_type() -- --#define CC_TIMEZONE_LOCATION(obj) \ -- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ -- CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocation)) -- --#define CC_TIMEZONE_LOCATION_CLASS(klass) \ -- (G_TYPE_CHECK_CLASS_CAST ((klass), \ -- CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocationClass)) -- --#define CC_IS_TIMEZONE_LOCATION(obj) \ -- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ -- CC_TYPE_TIMEZONE_LOCATION)) -- --#define CC_IS_TIMEZONE_LOCATION_CLASS(klass) \ -- (G_TYPE_CHECK_CLASS_TYPE ((klass), \ -- CC_TYPE_TIMEZONE_LOCATION)) -- --#define CC_TIMEZONE_LOCATION_GET_CLASS(obj) \ -- (G_TYPE_INSTANCE_GET_CLASS ((obj), \ -- CC_TYPE_TIMEZONE_LOCATION, CcTimezoneLocationClass)) -- - typedef struct _TzDB TzDB; - typedef struct _TzInfo TzInfo; --typedef struct _CcTimezoneLocation CcTimezoneLocation; --typedef struct _CcTimezoneLocationClass CcTimezoneLocationClass; --typedef struct _CcTimezoneLocationPrivate CcTimezoneLocationPrivate; -- --struct _CcTimezoneLocation --{ -- GObject parent; -- CcTimezoneLocationPrivate *priv; --}; -- --struct _CcTimezoneLocationClass --{ -- GObjectClass parent_class; --}; -- --GType cc_timezone_location_get_type (void) G_GNUC_CONST; -- --CcTimezoneLocation *cc_timezone_location_new (void); -- - - struct _TzDB - { --- -1.8.4.2 - diff --git a/0009-Added-a-function-to-clear-the-location-set-for-a-CcT.patch b/0009-Added-a-function-to-clear-the-location-set-for-a-CcT.patch deleted file mode 100644 index 5adb3fa..0000000 --- a/0009-Added-a-function-to-clear-the-location-set-for-a-CcT.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 8ab1e71acd1ca7efbca2d8a4085c2547abe17e26 Mon Sep 17 00:00:00 2001 -From: David Shea -Date: Tue, 26 Nov 2013 16:22:01 -0500 -Subject: [PATCH 09/10] Added a function to clear the location set for a - CcTimezoneMap - ---- - src/cc-timezone-map.c | 31 ++++++++++++++++++++++++++----- - src/cc-timezone-map.h | 1 + - 2 files changed, 27 insertions(+), 5 deletions(-) - -diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c -index 7fd7b08..1eab640 100644 ---- a/src/cc-timezone-map.c -+++ b/src/cc-timezone-map.c -@@ -897,14 +897,20 @@ set_location (CcTimezoneMap *map, - - priv->location = location; - -- info = tz_info_from_location (priv->location); -- -- priv->selected_offset = tz_location_get_utc_offset (priv->location) -- / (60.0*60.0) + ((info->daylight) ? -1.0 : 0.0); -+ if (priv->location) -+ { -+ info = tz_info_from_location (priv->location); -+ priv->selected_offset = tz_location_get_utc_offset (priv->location) -+ / (60.0*60.0) + ((info->daylight) ? -1.0 : 0.0); -+ tz_info_free (info); -+ } -+ else -+ { -+ priv->selected_offset = 0.0; -+ } - - g_signal_emit (map, signals[LOCATION_CHANGED], 0, priv->location); - -- tz_info_free (info); - } - - static CcTimezoneLocation * -@@ -1208,3 +1214,18 @@ cc_timezone_map_get_location (CcTimezoneMap *map) - { - return map->priv->location; - } -+ -+/** -+ * cc_timezone_map_clear_location: -+ * @map: A #CcTimezoneMap -+ * -+ * Clear the location currently set for the #CcTimezoneMap. This will remove -+ * the highlight and reset the map to its original state. -+ * -+ */ -+void -+cc_timezone_map_clear_location (CcTimezoneMap *map) -+{ -+ set_location(map, NULL); -+ gtk_widget_queue_draw (GTK_WIDGET (map)); -+} -diff --git a/src/cc-timezone-map.h b/src/cc-timezone-map.h -index 15f2e0b..4737c0e 100644 ---- a/src/cc-timezone-map.h -+++ b/src/cc-timezone-map.h -@@ -82,6 +82,7 @@ void cc_timezone_map_set_coords (CcTimezoneMap *map, - const gchar * cc_timezone_map_get_timezone_at_coords (CcTimezoneMap *map, - gdouble lon, gdouble lat); - CcTimezoneLocation * cc_timezone_map_get_location (CcTimezoneMap *map); -+void cc_timezone_map_clear_location(CcTimezoneMap *map); - - G_END_DECLS - --- -1.8.4.2 - diff --git a/0010-Allow-the-timezone-highlight-to-be-manually-set-sepa.patch b/0010-Allow-the-timezone-highlight-to-be-manually-set-sepa.patch deleted file mode 100644 index 625397e..0000000 --- a/0010-Allow-the-timezone-highlight-to-be-manually-set-sepa.patch +++ /dev/null @@ -1,171 +0,0 @@ -From 7150253ea59ef6e3688057abc98abe9f9f1daf80 Mon Sep 17 00:00:00 2001 -From: David Shea -Date: Tue, 26 Nov 2013 16:44:20 -0500 -Subject: [PATCH 10/10] Allow the timezone highlight to be manually set - separately from the location. - -Added selected-offset as a property and added get and set functions. Reworked -the widget draw handler to allow drawing a highlight with no location. ---- - src/cc-timezone-map.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++- - src/cc-timezone-map.h | 2 ++ - 2 files changed, 64 insertions(+), 1 deletion(-) - -diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c -index 1eab640..9d773ec 100644 ---- a/src/cc-timezone-map.c -+++ b/src/cc-timezone-map.c -@@ -60,6 +60,7 @@ struct _CcTimezoneMapPrivate - gint olsen_map_rowstride; - - gdouble selected_offset; -+ gboolean show_offset; - - gchar *watermark; - -@@ -78,6 +79,11 @@ enum - LAST_SIGNAL - }; - -+enum { -+ PROP_0, -+ PROP_SELECTED_OFFSET, -+}; -+ - static guint signals[LAST_SIGNAL]; - - -@@ -513,8 +519,12 @@ cc_timezone_map_get_property (GObject *object, - GValue *value, - GParamSpec *pspec) - { -+ CcTimezoneMap *map = CC_TIMEZONE_MAP(object); - switch (property_id) - { -+ case PROP_SELECTED_OFFSET: -+ g_value_set_double(value, map->priv->selected_offset); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -@@ -526,8 +536,12 @@ cc_timezone_map_set_property (GObject *object, - const GValue *value, - GParamSpec *pspec) - { -+ CcTimezoneMap *map = CC_TIMEZONE_MAP(object); - switch (property_id) - { -+ case PROP_SELECTED_OFFSET: -+ cc_timezone_map_set_selected_offset(map, g_value_get_double(value)); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -@@ -783,7 +797,7 @@ cc_timezone_map_draw (GtkWidget *widget, - cairo_stroke(cr); - } - -- if (!priv->location) { -+ if (!priv->show_offset) { - return TRUE; - } - -@@ -814,6 +828,10 @@ cc_timezone_map_draw (GtkWidget *widget, - g_object_unref (orig_hilight); - } - -+ if (!priv->location) { -+ return TRUE; -+ } -+ - /* load pin icon */ - pin = gdk_pixbuf_new_from_file (DATADIR "/pin.png", &err); - -@@ -860,6 +878,14 @@ cc_timezone_map_class_init (CcTimezoneMapClass *klass) - widget_class->realize = cc_timezone_map_realize; - widget_class->draw = cc_timezone_map_draw; - -+ g_object_class_install_property(G_OBJECT_CLASS(klass), -+ PROP_SELECTED_OFFSET, -+ g_param_spec_string ("selected-offset", -+ "Selected offset", -+ "The selecect offset from GMT in hours", -+ "", -+ G_PARAM_READWRITE)); -+ - signals[LOCATION_CHANGED] = g_signal_new ("location-changed", - CC_TYPE_TIMEZONE_MAP, - G_SIGNAL_RUN_FIRST, -@@ -902,10 +928,12 @@ set_location (CcTimezoneMap *map, - info = tz_info_from_location (priv->location); - priv->selected_offset = tz_location_get_utc_offset (priv->location) - / (60.0*60.0) + ((info->daylight) ? -1.0 : 0.0); -+ priv->show_offset = TRUE; - tz_info_free (info); - } - else - { -+ priv->show_offset = FALSE; - priv->selected_offset = 0.0; - } - -@@ -1099,6 +1127,9 @@ cc_timezone_map_init (CcTimezoneMap *self) - priv->olsen_map_pixels = gdk_pixbuf_get_pixels (priv->olsen_map); - priv->olsen_map_rowstride = gdk_pixbuf_get_rowstride (priv->olsen_map); - -+ priv->selected_offset = 0.0; -+ priv->show_offset = FALSE; -+ - priv->tzdb = tz_load_db (); - - g_signal_connect (self, "button-press-event", G_CALLBACK (button_press_event), -@@ -1229,3 +1260,33 @@ cc_timezone_map_clear_location (CcTimezoneMap *map) - set_location(map, NULL); - gtk_widget_queue_draw (GTK_WIDGET (map)); - } -+ -+/** -+ * cc_timezone_map_get_selected_offset: -+ * @map: A #CcTimezoneMap -+ * -+ * Returns the currently selected offset in hours from GMT. -+ * -+ * Returns: The selected offset. -+ * -+ */ -+gdouble cc_timezone_map_get_selected_offset(CcTimezoneMap *map) -+{ -+ return map->priv->selected_offset; -+} -+ -+/** -+ * cc_timezone_map_set_selected_offset: -+ * @map: A #CcTimezoneMap -+ * @offset: The offset from GMT in hours -+ * -+ * Set the currently selected offset for the map and redraw the highlighted -+ * time zone. -+ */ -+void cc_timezone_map_set_selected_offset (CcTimezoneMap *map, gdouble offset) -+{ -+ map->priv->selected_offset = offset; -+ map->priv->show_offset = TRUE; -+ g_object_notify(G_OBJECT(map), "selected-offset"); -+ gtk_widget_queue_draw (GTK_WIDGET (map)); -+} -diff --git a/src/cc-timezone-map.h b/src/cc-timezone-map.h -index 4737c0e..ba6bd37 100644 ---- a/src/cc-timezone-map.h -+++ b/src/cc-timezone-map.h -@@ -83,6 +83,8 @@ const gchar * cc_timezone_map_get_timezone_at_coords (CcTimezoneMap *map, - gdouble lon, gdouble lat); - CcTimezoneLocation * cc_timezone_map_get_location (CcTimezoneMap *map); - void cc_timezone_map_clear_location(CcTimezoneMap *map); -+gdouble cc_timezone_map_get_selected_offset(CcTimezoneMap *map); -+void cc_timezone_map_set_selected_offset (CcTimezoneMap *map, gdouble offset); - - G_END_DECLS - --- -1.8.4.2 - diff --git a/0012-Merge-r36-from-lp-dshea-timezonemap-trunk.patch b/0012-Merge-r36-from-lp-dshea-timezonemap-trunk.patch deleted file mode 100644 index b2cd6b7..0000000 --- a/0012-Merge-r36-from-lp-dshea-timezonemap-trunk.patch +++ /dev/null @@ -1,25 +0,0 @@ -From e2d3309d6ae6adb7f7041766e29333ea2cbc2a31 Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 10:22:22 +0000 -Subject: [PATCH 12/18] Merge r36 from lp:~dshea/timezonemap/trunk - -Don't try to close a NULL file pointer. ---- - src/tz.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/tz.c b/src/tz.c -index c294b44..50ce7a3 100644 ---- a/src/tz.c -+++ b/src/tz.c -@@ -305,7 +305,6 @@ void parse_file (const char * filename, - if (!fh) - { - g_warning ("Could not open *%s*\n", filename); -- fclose (fh); - return; - } - --- -1.8.4.2 - diff --git a/0013-Merge-r38-from-lp-dshea-timezonemap-trunk.patch b/0013-Merge-r38-from-lp-dshea-timezonemap-trunk.patch deleted file mode 100644 index e673891..0000000 --- a/0013-Merge-r38-from-lp-dshea-timezonemap-trunk.patch +++ /dev/null @@ -1,419 +0,0 @@ -From 68dc8c1f23e0d2eec70baf83f6dc6f0ccc8ab0a5 Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 10:28:28 +0000 -Subject: [PATCH 13/18] Merge r38 from lp:~dshea/timezonemap/trunk - -bzrignore some generated files and remove generated INSTALL from the repository ---- - .bzrignore | 21 ++++ - INSTALL | 370 ------------------------------------------------------------- - 2 files changed, 21 insertions(+), 370 deletions(-) - create mode 100644 .bzrignore - delete mode 100644 INSTALL - -diff --git a/.bzrignore b/.bzrignore -new file mode 100644 -index 0000000..e488bbc ---- /dev/null -+++ b/.bzrignore -@@ -0,0 +1,21 @@ -+Makefile -+Makefile.in -+aclocal.m4 -+autom4te.cache -+build-aux -+config.h -+config.h.in -+config.log -+config.status -+configure -+libtool -+stamp-h1 -+m4/*.m4 -+.deps -+.libs -+*.gir -+*.typelib -+*.lo -+*.la -+src/test-timezone -+src/timezonemap.pc -diff --git a/INSTALL b/INSTALL -deleted file mode 100644 -index a1e89e1..0000000 ---- a/INSTALL -+++ /dev/null -@@ -1,370 +0,0 @@ --Installation Instructions --************************* -- --Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, --Inc. -- -- Copying and distribution of this file, with or without modification, --are permitted in any medium without royalty provided the copyright --notice and this notice are preserved. This file is offered as-is, --without warranty of any kind. -- --Basic Installation --================== -- -- Briefly, the shell commands `./configure; make; make install' should --configure, build, and install this package. The following --more-detailed instructions are generic; see the `README' file for --instructions specific to this package. Some packages provide this --`INSTALL' file but do not implement all of the features documented --below. The lack of an optional feature in a given package is not --necessarily a bug. More recommendations for GNU packages can be found --in *note Makefile Conventions: (standards)Makefile Conventions. -- -- The `configure' shell script attempts to guess correct values for --various system-dependent variables used during compilation. It uses --those values to create a `Makefile' in each directory of the package. --It may also create one or more `.h' files containing system-dependent --definitions. Finally, it creates a shell script `config.status' that --you can run in the future to recreate the current configuration, and a --file `config.log' containing compiler output (useful mainly for --debugging `configure'). -- -- It can also use an optional file (typically called `config.cache' --and enabled with `--cache-file=config.cache' or simply `-C') that saves --the results of its tests to speed up reconfiguring. Caching is --disabled by default to prevent problems with accidental use of stale --cache files. -- -- If you need to do unusual things to compile the package, please try --to figure out how `configure' could check whether to do them, and mail --diffs or instructions to the address given in the `README' so they can --be considered for the next release. If you are using the cache, and at --some point `config.cache' contains results you don't want to keep, you --may remove or edit it. -- -- The file `configure.ac' (or `configure.in') is used to create --`configure' by a program called `autoconf'. You need `configure.ac' if --you want to change it or regenerate `configure' using a newer version --of `autoconf'. -- -- The simplest way to compile this package is: -- -- 1. `cd' to the directory containing the package's source code and type -- `./configure' to configure the package for your system. -- -- Running `configure' might take a while. While running, it prints -- some messages telling which features it is checking for. -- -- 2. Type `make' to compile the package. -- -- 3. Optionally, type `make check' to run any self-tests that come with -- the package, generally using the just-built uninstalled binaries. -- -- 4. Type `make install' to install the programs and any data files and -- documentation. When installing into a prefix owned by root, it is -- recommended that the package be configured and built as a regular -- user, and only the `make install' phase executed with root -- privileges. -- -- 5. Optionally, type `make installcheck' to repeat any self-tests, but -- this time using the binaries in their final installed location. -- This target does not install anything. Running this target as a -- regular user, particularly if the prior `make install' required -- root privileges, verifies that the installation completed -- correctly. -- -- 6. You can remove the program binaries and object files from the -- source code directory by typing `make clean'. To also remove the -- files that `configure' created (so you can compile the package for -- a different kind of computer), type `make distclean'. There is -- also a `make maintainer-clean' target, but that is intended mainly -- for the package's developers. If you use it, you may have to get -- all sorts of other programs in order to regenerate files that came -- with the distribution. -- -- 7. Often, you can also type `make uninstall' to remove the installed -- files again. In practice, not all packages have tested that -- uninstallation works correctly, even though it is required by the -- GNU Coding Standards. -- -- 8. Some packages, particularly those that use Automake, provide `make -- distcheck', which can by used by developers to test that all other -- targets like `make install' and `make uninstall' work correctly. -- This target is generally not run by end users. -- --Compilers and Options --===================== -- -- Some systems require unusual options for compilation or linking that --the `configure' script does not know about. Run `./configure --help' --for details on some of the pertinent environment variables. -- -- You can give `configure' initial values for configuration parameters --by setting variables in the command line or in the environment. Here --is an example: -- -- ./configure CC=c99 CFLAGS=-g LIBS=-lposix -- -- *Note Defining Variables::, for more details. -- --Compiling For Multiple Architectures --==================================== -- -- You can compile the package for more than one kind of computer at the --same time, by placing the object files for each architecture in their --own directory. To do this, you can use GNU `make'. `cd' to the --directory where you want the object files and executables to go and run --the `configure' script. `configure' automatically checks for the --source code in the directory that `configure' is in and in `..'. This --is known as a "VPATH" build. -- -- With a non-GNU `make', it is safer to compile the package for one --architecture at a time in the source code directory. After you have --installed the package for one architecture, use `make distclean' before --reconfiguring for another architecture. -- -- On MacOS X 10.5 and later systems, you can create libraries and --executables that work on multiple system types--known as "fat" or --"universal" binaries--by specifying multiple `-arch' options to the --compiler but only a single `-arch' option to the preprocessor. Like --this: -- -- ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -- CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -- CPP="gcc -E" CXXCPP="g++ -E" -- -- This is not guaranteed to produce working output in all cases, you --may have to build one architecture at a time and combine the results --using the `lipo' tool if you have problems. -- --Installation Names --================== -- -- By default, `make install' installs the package's commands under --`/usr/local/bin', include files under `/usr/local/include', etc. You --can specify an installation prefix other than `/usr/local' by giving --`configure' the option `--prefix=PREFIX', where PREFIX must be an --absolute file name. -- -- You can specify separate installation prefixes for --architecture-specific files and architecture-independent files. If you --pass the option `--exec-prefix=PREFIX' to `configure', the package uses --PREFIX as the prefix for installing programs and libraries. --Documentation and other data files still use the regular prefix. -- -- In addition, if you use an unusual directory layout you can give --options like `--bindir=DIR' to specify different values for particular --kinds of files. Run `configure --help' for a list of the directories --you can set and what kinds of files go in them. In general, the --default for these options is expressed in terms of `${prefix}', so that --specifying just `--prefix' will affect all of the other directory --specifications that were not explicitly provided. -- -- The most portable way to affect installation locations is to pass the --correct locations to `configure'; however, many packages provide one or --both of the following shortcuts of passing variable assignments to the --`make install' command line to change installation locations without --having to reconfigure or recompile. -- -- The first method involves providing an override variable for each --affected directory. For example, `make install --prefix=/alternate/directory' will choose an alternate location for all --directory configuration variables that were expressed in terms of --`${prefix}'. Any directories that were specified during `configure', --but not in terms of `${prefix}', must each be overridden at install --time for the entire installation to be relocated. The approach of --makefile variable overrides for each directory variable is required by --the GNU Coding Standards, and ideally causes no recompilation. --However, some platforms have known limitations with the semantics of --shared libraries that end up requiring recompilation when using this --method, particularly noticeable in packages that use GNU Libtool. -- -- The second method involves providing the `DESTDIR' variable. For --example, `make install DESTDIR=/alternate/directory' will prepend --`/alternate/directory' before all installation names. The approach of --`DESTDIR' overrides is not required by the GNU Coding Standards, and --does not work on platforms that have drive letters. On the other hand, --it does better at avoiding recompilation issues, and works well even --when some directory options were not specified in terms of `${prefix}' --at `configure' time. -- --Optional Features --================= -- -- If the package supports it, you can cause programs to be installed --with an extra prefix or suffix on their names by giving `configure' the --option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -- -- Some packages pay attention to `--enable-FEATURE' options to --`configure', where FEATURE indicates an optional part of the package. --They may also pay attention to `--with-PACKAGE' options, where PACKAGE --is something like `gnu-as' or `x' (for the X Window System). The --`README' should mention any `--enable-' and `--with-' options that the --package recognizes. -- -- For packages that use the X Window System, `configure' can usually --find the X include and library files automatically, but if it doesn't, --you can use the `configure' options `--x-includes=DIR' and --`--x-libraries=DIR' to specify their locations. -- -- Some packages offer the ability to configure how verbose the --execution of `make' will be. For these packages, running `./configure ----enable-silent-rules' sets the default to minimal output, which can be --overridden with `make V=1'; while running `./configure ----disable-silent-rules' sets the default to verbose, which can be --overridden with `make V=0'. -- --Particular systems --================== -- -- On HP-UX, the default C compiler is not ANSI C compatible. If GNU --CC is not installed, it is recommended to use the following options in --order to use an ANSI C compiler: -- -- ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" -- --and if that doesn't work, install pre-built binaries of GCC for HP-UX. -- -- HP-UX `make' updates targets which have the same time stamps as --their prerequisites, which makes it generally unusable when shipped --generated files such as `configure' are involved. Use GNU `make' --instead. -- -- On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot --parse its `' header file. The option `-nodtk' can be used as --a workaround. If GNU CC is not installed, it is therefore recommended --to try -- -- ./configure CC="cc" -- --and if that doesn't work, try -- -- ./configure CC="cc -nodtk" -- -- On Solaris, don't put `/usr/ucb' early in your `PATH'. This --directory contains several dysfunctional programs; working variants of --these programs are available in `/usr/bin'. So, if you need `/usr/ucb' --in your `PATH', put it _after_ `/usr/bin'. -- -- On Haiku, software installed for all users goes in `/boot/common', --not `/usr/local'. It is recommended to use the following options: -- -- ./configure --prefix=/boot/common -- --Specifying the System Type --========================== -- -- There may be some features `configure' cannot figure out --automatically, but needs to determine by the type of machine the package --will run on. Usually, assuming the package is built to be run on the --_same_ architectures, `configure' can figure that out, but if it prints --a message saying it cannot guess the machine type, give it the --`--build=TYPE' option. TYPE can either be a short name for the system --type, such as `sun4', or a canonical name which has the form: -- -- CPU-COMPANY-SYSTEM -- --where SYSTEM can have one of these forms: -- -- OS -- KERNEL-OS -- -- See the file `config.sub' for the possible values of each field. If --`config.sub' isn't included in this package, then this package doesn't --need to know the machine type. -- -- If you are _building_ compiler tools for cross-compiling, you should --use the option `--target=TYPE' to select the type of system they will --produce code for. -- -- If you want to _use_ a cross compiler, that generates code for a --platform different from the build platform, you should specify the --"host" platform (i.e., that on which the generated programs will --eventually be run) with `--host=TYPE'. -- --Sharing Defaults --================ -- -- If you want to set default values for `configure' scripts to share, --you can create a site shell script called `config.site' that gives --default values for variables like `CC', `cache_file', and `prefix'. --`configure' looks for `PREFIX/share/config.site' if it exists, then --`PREFIX/etc/config.site' if it exists. Or, you can set the --`CONFIG_SITE' environment variable to the location of the site script. --A warning: not all `configure' scripts look for a site script. -- --Defining Variables --================== -- -- Variables not defined in a site shell script can be set in the --environment passed to `configure'. However, some packages may run --configure again during the build, and the customized values of these --variables may be lost. In order to avoid this problem, you should set --them in the `configure' command line, using `VAR=value'. For example: -- -- ./configure CC=/usr/local2/bin/gcc -- --causes the specified `gcc' to be used as the C compiler (unless it is --overridden in the site shell script). -- --Unfortunately, this technique does not work for `CONFIG_SHELL' due to --an Autoconf bug. Until the bug is fixed you can use this workaround: -- -- CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash -- --`configure' Invocation --====================== -- -- `configure' recognizes the following options to control how it --operates. -- --`--help' --`-h' -- Print a summary of all of the options to `configure', and exit. -- --`--help=short' --`--help=recursive' -- Print a summary of the options unique to this package's -- `configure', and exit. The `short' variant lists options used -- only in the top level, while the `recursive' variant lists options -- also present in any nested packages. -- --`--version' --`-V' -- Print the version of Autoconf used to generate the `configure' -- script, and exit. -- --`--cache-file=FILE' -- Enable the cache: use and save the results of the tests in FILE, -- traditionally `config.cache'. FILE defaults to `/dev/null' to -- disable caching. -- --`--config-cache' --`-C' -- Alias for `--cache-file=config.cache'. -- --`--quiet' --`--silent' --`-q' -- Do not print messages saying which checks are being made. To -- suppress all normal output, redirect it to `/dev/null' (any error -- messages will still be shown). -- --`--srcdir=DIR' -- Look for the package's source code in directory DIR. Usually -- `configure' can determine that directory automatically. -- --`--prefix=DIR' -- Use DIR as the installation prefix. *note Installation Names:: -- for more details, including other options available for fine-tuning -- the installation locations. -- --`--no-create' --`-n' -- Run the configure checks, but stop before creating any output -- files. -- --`configure' also accepts some other, not widely useful, options. Run --`configure --help' for more details. -- --- -1.8.4.2 - diff --git a/0014-Merge-r39-from-lp-dshea-timezonemap-trunk.patch b/0014-Merge-r39-from-lp-dshea-timezonemap-trunk.patch deleted file mode 100644 index a44f38b..0000000 --- a/0014-Merge-r39-from-lp-dshea-timezonemap-trunk.patch +++ /dev/null @@ -1,22 +0,0 @@ -From b81b960a9f5ba1fed1ae47fb852c7ccb67c7c5cf Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 10:28:43 +0000 -Subject: [PATCH 14/18] Merge r39 from lp:~dshea/timezonemap/trunk - -Ignore INSTALL too; generated file ---- - .bzrignore | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/.bzrignore b/.bzrignore -index e488bbc..abe0491 100644 ---- a/.bzrignore -+++ b/.bzrignore -@@ -19,3 +19,4 @@ m4/*.m4 - *.la - src/test-timezone - src/timezonemap.pc -+INSTALL --- -1.8.4.2 - diff --git a/0015-Merge-r37-from-lp-dshea-timezonemap-trunk.patch b/0015-Merge-r37-from-lp-dshea-timezonemap-trunk.patch deleted file mode 100644 index 486f078..0000000 --- a/0015-Merge-r37-from-lp-dshea-timezonemap-trunk.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 67fb6770f8e4cde41c47e15b9660d7d7d5def243 Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 11:25:40 +0000 -Subject: [PATCH 15/18] Merge r37 from lp:~dshea/timezonemap/trunk - -Turn on g-ir-scanner warnings & fix an errant comment ---- - src/Makefile.am | 2 +- - src/cc-timezone-map.c | 8 ++++++++ - src/timezone-completion.c | 2 +- - 3 files changed, 10 insertions(+), 2 deletions(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 05dfb1a..3f2d176 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -110,7 +110,7 @@ introspection_sources = $(libtimezonemap_la_SOURCES) - TimezoneMap-1.0.gir: libtimezonemap.la - TimezoneMap_1_0_gir_INCLUDES = GObject-2.0 Gtk-3.0 Json-1.0 - TimezoneMap_1_0_gir_CFLAGS = $(INCLUDES) --TimezoneMap_1_0_gir_SCANNERFLAGS = --identifier-prefix=Cc -+TimezoneMap_1_0_gir_SCANNERFLAGS = --identifier-prefix=Cc --warn-all - TimezoneMap_1_0_gir_LIBS = libtimezonemap.la - TimezoneMap_1_0_gir_FILES = $(introspection_sources) - -diff --git a/src/cc-timezone-map.c b/src/cc-timezone-map.c -index 60297e4..d4d86f3 100644 ---- a/src/cc-timezone-map.c -+++ b/src/cc-timezone-map.c -@@ -1226,6 +1226,14 @@ cc_timezone_map_set_watermark (CcTimezoneMap *map, const gchar * watermark) - gtk_widget_queue_draw (GTK_WIDGET (map)); - } - -+/** -+ * cc_timezone_map_get_location: -+ * @map: A #CcTimezoneMap -+ * -+ * Returns the current location set for the map. -+ * -+ * Returns: (transfer none): the map location. -+ */ - CcTimezoneLocation * - cc_timezone_map_get_location (CcTimezoneMap *map) - { -diff --git a/src/timezone-completion.c b/src/timezone-completion.c -index f6ca8c8..e7f88db 100644 ---- a/src/timezone-completion.c -+++ b/src/timezone-completion.c -@@ -442,7 +442,7 @@ get_descendent (GtkWidget * parent, GType type) - return NULL; - } - --/** -+/* - * The popup window and its GtkTreeView are private to our parent completion - * object. We can't get access to discover if there is a highlighted item or - * even if the window is showing right now. So this is a super hack to find --- -1.8.4.2 - diff --git a/0016-Add-cc-timezone-location.h-to-timezonemapincludes_HE.patch b/0016-Add-cc-timezone-location.h-to-timezonemapincludes_HE.patch deleted file mode 100644 index aec25a2..0000000 --- a/0016-Add-cc-timezone-location.h-to-timezonemapincludes_HE.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1726b4dc558d12d353fd86306a6c075c787d24a9 Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 12:02:00 +0000 -Subject: [PATCH 16/18] Add cc-timezone-location.h to - timezonemapincludes_HEADERS so it gets installed - ---- - src/Makefile.am | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 8b00c16..2eec6d7 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -87,6 +87,7 @@ libtimezonemap_la_SOURCES = $(libtimezonemap_GISOURCES) $(libtimezonemap_NONGISO - # that users do "#include " instead of "#include " - timezonemapincludesdir = $(includedir)/timezonemap/timezonemap - timezonemapincludes_HEADERS = \ -+ cc-timezone-location.h \ - cc-timezone-map.h \ - timezone-completion.h \ - tz.h --- -1.8.4.2 - diff --git a/0017-Set-en_name-correctly.patch b/0017-Set-en_name-correctly.patch deleted file mode 100644 index 592473e..0000000 --- a/0017-Set-en_name-correctly.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 6dced294369ce9b47d793b959d1cc3acfd1e86d1 Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 12:23:12 +0000 -Subject: [PATCH 17/18] Set en_name correctly - ---- - src/cc-timezone-location.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/cc-timezone-location.c b/src/cc-timezone-location.c -index 3bf4cad..31ceb56 100644 ---- a/src/cc-timezone-location.c -+++ b/src/cc-timezone-location.c -@@ -315,7 +315,7 @@ const gchar *cc_timezone_location_get_en_name(CcTimezoneLocation *loc) - void cc_timezone_location_set_en_name(CcTimezoneLocation *loc, const gchar *en_name) - { - g_free(loc->priv->en_name); -- loc->priv->full_country = g_strdup(en_name); -+ loc->priv->en_name = g_strdup(en_name); - - g_object_notify(G_OBJECT(loc), "en_name"); - } --- -1.8.4.2 - diff --git a/0018-Don-t-call-g_type_init-on-glib-2.35-it-s-deprecated.patch b/0018-Don-t-call-g_type_init-on-glib-2.35-it-s-deprecated.patch deleted file mode 100644 index 56f887b..0000000 --- a/0018-Don-t-call-g_type_init-on-glib-2.35-it-s-deprecated.patch +++ /dev/null @@ -1,27 +0,0 @@ -From d57780d32f9ec7d7d091a07c173a88928c17bd09 Mon Sep 17 00:00:00 2001 -From: Iain Lane -Date: Fri, 29 Nov 2013 12:26:52 +0000 -Subject: [PATCH 18/18] Don't call g_type_init() on glib >= 2.35; it's - deprecated - ---- - src/test-timezone.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/test-timezone.c b/src/test-timezone.c -index a2271c4..5658227 100644 ---- a/src/test-timezone.c -+++ b/src/test-timezone.c -@@ -23,7 +23,9 @@ int main (int argc, char **argv) - return 1; - } - -+#if !GLIB_CHECK_VERSION(2, 35, 0) - g_type_init(); -+#endif - GValue zone = {0}; - g_value_init(&zone, G_TYPE_STRING); - --- -1.8.4.2 - diff --git a/libtimezonemap.spec b/libtimezonemap.spec index c878f87..0914ff1 100644 --- a/libtimezonemap.spec +++ b/libtimezonemap.spec @@ -1,26 +1,14 @@ Name: libtimezonemap -Version: 0.4.1 -Release: 4%{?dist} +Version: 0.4.2 +Release: 1%{?dist} Summary: Time zone map widget for Gtk+ Group: System Environment/Libraries License: GPLv3 URL: https://launchpad.net/timezonemap Source0: http://archive.ubuntu.com/ubuntu/pool/main/libt/libtimezonemap/%{name}_%{version}.tar.gz -Patch0: 0001-Make-whitespace-and-indentation-consistent.patch -Patch1: 0004-Update-the-GPL-comments-with-the-new-FSF-address.patch -Patch2: 0005-Create-local-copies-of-string-properties.patch -Patch3: 0006-Moved-CcTimezoneLocation-into-its-own-file.patch -Patch8: 0009-Added-a-function-to-clear-the-location-set-for-a-CcT.patch -Patch9: 0010-Allow-the-timezone-highlight-to-be-manually-set-sepa.patch -Patch10: 0011-Added-a-glade-catalog-file.patch -Patch11: 0012-Merge-r36-from-lp-dshea-timezonemap-trunk.patch -Patch12: 0013-Merge-r38-from-lp-dshea-timezonemap-trunk.patch -Patch13: 0014-Merge-r39-from-lp-dshea-timezonemap-trunk.patch -Patch14: 0015-Merge-r37-from-lp-dshea-timezonemap-trunk.patch -Patch15: 0016-Add-cc-timezone-location.h-to-timezonemapincludes_HE.patch -Patch16: 0017-Set-en_name-correctly.patch -Patch17: 0018-Don-t-call-g_type_init-on-glib-2.35-it-s-deprecated.patch +Patch1: 0001-Added-a-glade-catalog-file.patch +Patch2: 0002-Remove-the-color-codes-map.patch BuildRequires: glib2-devel >= 2.26 BuildRequires: gtk3-devel >= 3.1.4 @@ -47,20 +35,8 @@ files used for building applications that use %{name}. %prep %setup -q -%patch0 -p1 %patch1 -p1 %patch2 -p1 -%patch3 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 %build ./autogen.sh @@ -89,6 +65,9 @@ rm -f %{buildroot}%{_libdir}/*.la %{_datadir}/glade/catalogs/TimezoneMap.xml %changelog +* Fri May 2 2014 David Shea - 0.4.2-1 +- New upstream release libtimezonemap-0.4.2 + * Mon Dec 2 2013 David Shea - 0.4.1-4 - Merge fixes from lp:timezonemap - Add cc-timezone-location.h to timezonemapincludes_HEADERS so it gets installed (iain.lane) diff --git a/sources b/sources index 7da5dc4..e29667d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -79da327a7473b24c32d588db33831848 libtimezonemap_0.4.1.tar.gz +daaf4d2761e90bbc22d424dfff1f83c1 libtimezonemap_0.4.2.tar.gz