[evolution] Bug #715057 - Weather calendar is using Fahrenheit units as default



commit ea219ed51b6728b2e8fd5927a2496bc36defee0f
Author: Fabiano Fidêncio <fidencio redhat com>
Date:   Sat Nov 23 11:50:51 2013 +0100

    Bug #715057 - Weather calendar is using Fahrenheit units as default

 configure.ac                                       |   10 +++++
 m4/evo_check_langinfo.m4                           |   25 ++++++++++++
 modules/cal-config-weather/e-source-weather.c      |    4 +-
 .../evolution-cal-config-weather.c                 |   42 ++++++++++++++++++-
 4 files changed, 76 insertions(+), 5 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index ae7fb24..36e7e5d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -276,6 +276,16 @@ AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
 AC_SUBST(WINDRES)
 
 dnl **********************************
+dnl Check for functions
+dnl **********************************
+AC_CHECK_FUNCS(nl_langinfo)
+
+dnl **********************************
+dnl Check for nl_langinfo features
+dnl **********************************
+EVO_CHECK_LANGINFO([_NL_MEASUREMENT_MEASUREMENT])
+
+dnl **********************************
 dnl Check for base dependencies early.
 dnl **********************************
 PKG_CHECK_MODULES([GNOME_PLATFORM],
diff --git a/m4/evo_check_langinfo.m4 b/m4/evo_check_langinfo.m4
new file mode 100644
index 0000000..a59ab29
--- /dev/null
+++ b/m4/evo_check_langinfo.m4
@@ -0,0 +1,25 @@
+dnl EVO_CHECK_LANGINFO(detail)
+dnl Checks if the given langinfo detail is supported
+AC_DEFUN([EVO_CHECK_LANGINFO],[
+       AS_VAR_PUSHDEF([ac_cv_langinfo_detail],
+                      [ac_cv_langinfo_]m4_tolower($1))
+
+       AC_MSG_CHECKING([for nl_langinfo ($1)])
+
+       AC_LANG_PUSH(C)
+
+       AC_COMPILE_IFELSE(
+               [AC_LANG_PROGRAM(
+                       [[#include <langinfo.h>]],
+                       [[char *detail = nl_langinfo ($1);]])],
+               [ac_cv_langinfo_detail=yes],
+               [ac_cv_langinfo_detail=no])
+
+       AC_LANG_POP(C)
+
+       AS_VAR_IF([ac_cv_langinfo_detail], [yes],
+                 [AC_DEFINE([HAVE_]m4_toupper($1), 1, [Have nl_langinfo ($1)])])
+
+       AC_MSG_RESULT([$ac_cv_langinfo_detail])
+       AS_VAR_POPDEF([ac_cv_langinfo_detail])
+])
diff --git a/modules/cal-config-weather/e-source-weather.c b/modules/cal-config-weather/e-source-weather.c
index 0bdf8f3..1334436 100644
--- a/modules/cal-config-weather/e-source-weather.c
+++ b/modules/cal-config-weather/e-source-weather.c
@@ -138,9 +138,9 @@ e_source_weather_class_init (ESourceWeatherClass *class)
                g_param_spec_enum (
                        "units",
                        "Units",
-                       "Metric or imperial units",
+                       "Fahrenheit, Centigrade or Kelvin units",
                        E_TYPE_SOURCE_WEATHER_UNITS,
-                       E_SOURCE_WEATHER_UNITS_FAHRENHEIT,
+                       E_SOURCE_WEATHER_UNITS_CENTIGRADE,
                        G_PARAM_READWRITE |
                        G_PARAM_CONSTRUCT |
                        E_SOURCE_PARAM_SETTING));
diff --git a/modules/cal-config-weather/evolution-cal-config-weather.c 
b/modules/cal-config-weather/evolution-cal-config-weather.c
index 3d01669..25b3c2b 100644
--- a/modules/cal-config-weather/evolution-cal-config-weather.c
+++ b/modules/cal-config-weather/evolution-cal-config-weather.c
@@ -29,6 +29,10 @@
 
 #include "e-source-weather.h"
 
+#if HAVE_NL_LANGINFO
+#include <langinfo.h>
+#endif
+
 typedef ESourceConfigBackend ECalConfigWeather;
 typedef ESourceConfigBackendClass ECalConfigWeatherClass;
 
@@ -159,6 +163,28 @@ cal_config_weather_string_to_location (GBinding *binding,
        return match != NULL;
 }
 
+#if HAVE_NL_LANGINFO
+static gboolean
+is_locale_metric (void)
+{
+       const char *fmt;
+       fmt = nl_langinfo (_NL_MEASUREMENT_MEASUREMENT);
+
+       if (fmt && *fmt == 2)
+               return FALSE;
+       else
+               return TRUE;
+}
+
+static ESourceWeatherUnits
+cal_config_weather_get_units_from_locale (void)
+{
+       return is_locale_metric() ?
+               E_SOURCE_WEATHER_UNITS_CENTIGRADE :
+               E_SOURCE_WEATHER_UNITS_FAHRENHEIT;
+}
+#endif
+
 static gboolean
 cal_config_weather_allow_creation (ESourceConfigBackend *backend)
 {
@@ -185,8 +211,12 @@ cal_config_weather_insert_widgets (ESourceConfigBackend *backend,
        GWeatherLocation *world;
        GtkWidget *widget;
        Context *context;
-       const gchar *extension_name;
        const gchar *uid;
+#if HAVE_NL_LANGINFO
+       gboolean is_new_source;
+
+       is_new_source = !e_source_has_extension (scratch_source, E_SOURCE_EXTENSION_WEATHER_BACKEND);
+#endif
 
        context = g_slice_new (Context);
        uid = e_source_get_uid (scratch_source);
@@ -227,8 +257,14 @@ cal_config_weather_insert_widgets (ESourceConfigBackend *backend,
 
        e_source_config_add_refresh_interval (config, scratch_source);
 
-       extension_name = E_SOURCE_EXTENSION_WEATHER_BACKEND;
-       extension = e_source_get_extension (scratch_source, extension_name);
+       extension = e_source_get_extension (scratch_source, E_SOURCE_EXTENSION_WEATHER_BACKEND);
+
+#if HAVE_NL_LANGINFO
+       if (is_new_source)
+               e_source_weather_set_units (
+                       E_SOURCE_WEATHER (extension),
+                       cal_config_weather_get_units_from_locale ());
+#endif
 
        g_object_bind_property_full (
                extension, "location",


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