[gnome-control-center] datetime: Do not offer the 12 hr clock in locales without AM/PM



commit 8afea39c60cefaf85eb2f745be04fe86ad75aee1
Author: Debarshi Ray <debarshir gnome org>
Date:   Sat Apr 14 21:02:56 2012 +0200

    datetime: Do not offer the 12 hr clock in locales without AM/PM
    
    https://bugzilla.gnome.org/show_bug.cgi?id=673721

 panels/datetime/cc-datetime-panel.c |   34 ++++++++++++++++++++++++++++++----
 panels/datetime/datetime.ui         |    2 +-
 2 files changed, 31 insertions(+), 5 deletions(-)
---
diff --git a/panels/datetime/cc-datetime-panel.c b/panels/datetime/cc-datetime-panel.c
index 803f48a..df3fe45 100644
--- a/panels/datetime/cc-datetime-panel.c
+++ b/panels/datetime/cc-datetime-panel.c
@@ -22,6 +22,7 @@
 #include "config.h"
 #include "cc-datetime-panel.h"
 
+#include <langinfo.h>
 #include <sys/time.h>
 #include "cc-timezone-map.h"
 #include "timedated.h"
@@ -79,6 +80,7 @@ struct _CcDateTimePanelPrivate
 
   GSettings *settings;
   GDesktopClockFormat clock_format;
+  gboolean ampm_available;
 
   GnomeWallClock *clock_tracker;
 
@@ -261,8 +263,14 @@ update_time (CcDateTimePanel *self)
   char *label;
   char *am_pm_widgets[] = {"ampm_up_button", "ampm_down_button", "ampm_label" };
   guint i;
+  gboolean use_ampm;
 
-  if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_24H)
+  if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H && priv->ampm_available)
+    use_ampm = TRUE;
+  else
+    use_ampm = FALSE;
+
+  if (!use_ampm)
     {
       /* Update the hours label */
       label = g_date_time_format (priv->date, "%H");
@@ -283,8 +291,7 @@ update_time (CcDateTimePanel *self)
     }
 
   for (i = 0; i < G_N_ELEMENTS (am_pm_widgets); i++)
-    gtk_widget_set_visible (W(am_pm_widgets[i]),
-                            priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H);
+    gtk_widget_set_visible (W(am_pm_widgets[i]), use_ampm);
 
   /* Update the minutes label */
   label = g_date_time_format (priv->date, "%M");
@@ -945,6 +952,7 @@ cc_date_time_panel_init (CcDateTimePanel *self)
   GError *err = NULL;
   GtkTreeModelFilter *city_modelfilter;
   GtkTreeModelSort *city_modelsort;
+  const char *ampm;
   guint i, num_days;
   int ret;
   DateEndianess endianess;
@@ -1030,6 +1038,25 @@ cc_date_time_panel_init (CcDateTimePanel *self)
                                                             "aspectmap")),
                      widget);
 
+  /* Clock settings */
+  priv->settings = g_settings_new (CLOCK_SCHEMA);
+
+  ampm = nl_langinfo (AM_STR);
+  /* There are no AM/PM indicators for this locale, so
+   * offer the 24 hr clock as the only option */
+  if (ampm == NULL || ampm[0] == '\0')
+    {
+      gtk_widget_set_visible (W("ampm_up_button"), FALSE);
+      gtk_widget_set_visible (W("ampm_label"), FALSE);
+      gtk_widget_set_visible (W("ampm_down_button"), FALSE);
+      gtk_widget_set_visible (W("24h_box"), FALSE);
+      priv->ampm_available = FALSE;
+    }
+  else
+    {
+     priv->ampm_available = TRUE;
+    }
+
   gtk_container_add (GTK_CONTAINER (self),
                      GTK_WIDGET (gtk_builder_get_object (priv->builder,
                                                          "datetime-panel")));
@@ -1039,7 +1066,6 @@ cc_date_time_panel_init (CcDateTimePanel *self)
   priv->clock_tracker = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
   g_signal_connect (priv->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), self);
 
-  priv->settings = g_settings_new (CLOCK_SCHEMA);
   clock_settings_changed_cb (priv->settings, CLOCK_FORMAT_KEY, self);
   g_signal_connect (priv->settings, "changed::" CLOCK_FORMAT_KEY,
                     G_CALLBACK (clock_settings_changed_cb), self);
diff --git a/panels/datetime/datetime.ui b/panels/datetime/datetime.ui
index 4d97d2b..caec8e8 100644
--- a/panels/datetime/datetime.ui
+++ b/panels/datetime/datetime.ui
@@ -438,7 +438,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkBox" id="box1">
+                      <object class="GtkBox" id="24h_box">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="orientation">vertical</property>



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