[gtk+] Respect 12/24-hour clock setting in the file chooser



commit 1bc1302af0ae8d59d1bb3a2490c29d5a2c430128
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Jan 24 18:04:51 2014 -0500

    Respect 12/24-hour clock setting in the file chooser
    
    Based on a patch by Garrett Regier in bug 699224.

 gtk/gtkfilechooserdefault.c                  |   21 +++++++++++++++++----
 gtk/org.gtk.Settings.FileChooser.gschema.xml |   11 +++++++++++
 2 files changed, 28 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index e21a833..447170b 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -3907,22 +3907,31 @@ stop_loading_and_clear_list_model (GtkFileChooserDefault *impl,
 }
 
 static char *
-my_g_format_time_for_display (glong secs)
+my_g_format_time_for_display (GtkFileChooserDefault *impl,
+                              glong secs)
 {
   GDateTime *now, *time;
   GTimeSpan time_diff;
+  gchar *clock_format;
+  gboolean use_24 = TRUE;
   const gchar *format;
   gchar *date_str;
+  GSettings *settings;
 
   now = g_date_time_new_now_local ();
   time = g_date_time_new_from_unix_local (secs);
   time_diff = g_date_time_difference (now, time);
 
+  settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
+  clock_format = g_settings_get_string (settings, "clock-format");
+  use_24 = g_strcmp0 (clock_format, "24h") == 0;
+  g_free (clock_format);
+
   /* Translators: see g_date_time_format() for details on the format */
   if (time_diff >= 0 && time_diff < G_TIME_SPAN_DAY)
-    format = _("%H:%M");
+    format = use_24 ? _("%H:%M") : _("%-I:%M %P");
   else if (time_diff >= 0 && time_diff < 2 * G_TIME_SPAN_DAY)
-    format = _("Yesterday at %H:%M");
+    format = use_24 ? _("Yesterday at %H:%M") : _("Yesterday at %-I:%M %P");
   else if (time_diff >= 0 && time_diff < 7 * G_TIME_SPAN_DAY)
     format = "%A"; /* Days from last week */
   else
@@ -4113,7 +4122,7 @@ file_system_model_set (GtkFileSystemModel *model,
         else if (tv.tv_sec == 0)
           g_value_set_static_string (value, _("Unknown"));
         else
-          g_value_take_string (value, my_g_format_time_for_display (tv.tv_sec));
+          g_value_take_string (value, my_g_format_time_for_display (impl, tv.tv_sec));
         break;
       }
     case MODEL_COL_ELLIPSIZE:
@@ -7496,6 +7505,10 @@ _gtk_file_chooser_default_init (GtkFileChooserDefault *impl)
 
   set_file_system_backend (impl);
 
+  if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (),
+                                       "org.gnome.desktop.interface",
+                                       TRUE) != NULL)
+
   priv->bookmarks_manager = _gtk_bookmarks_manager_new (NULL, NULL);
 
   /* Setup various attributes and callbacks in the UI 
diff --git a/gtk/org.gtk.Settings.FileChooser.gschema.xml b/gtk/org.gtk.Settings.FileChooser.gschema.xml
index 087b3c2..12d718d 100644
--- a/gtk/org.gtk.Settings.FileChooser.gschema.xml
+++ b/gtk/org.gtk.Settings.FileChooser.gschema.xml
@@ -38,6 +38,11 @@
     <value nick='cwd' value='1'/>
   </enum>
 
+  <enum id='org.gtk.Settings.FileChooser.ClockFormat'>
+    <value nick='24h' value='0'/>
+    <value nick='12h' value='1'/>
+  </enum>
+
   <schema id='org.gtk.Settings.FileChooser' path='/org/gtk/settings/file-chooser/'>
     <key name='last-folder-uri' type='s'>
       <default>""</default>
@@ -114,6 +119,12 @@
        Width in pixels of the file chooser's places sidebar.
       </description>
     </key>
+    <key name="clock-format" enum="org.gtk.Settings.FileChooser.ClockFormat">
+      <default>'24h'</default>
+      <description>
+        Whether the time is shown in 24h or 12h format.
+      </description>
+    </key>
   </schema>
 
 </schemalist>


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