Description: Display time on the greeter in accordance with applicable env. variables
Bug-Ubuntu: https://launchpad.net/bugs/777264
Author: Gunnar Hjalmarsson <ubuntu@gunnar.cc>

diff -Nur -x '*.orig' -x '*~' gdm-2.32.1//gui/simple-greeter/gdm-clock-widget.c gdm-2.32.1.new//gui/simple-greeter/gdm-clock-widget.c
--- gdm-2.32.1//gui/simple-greeter/gdm-clock-widget.c	2011-03-28 18:48:50.000000000 +0200
+++ gdm-2.32.1.new//gui/simple-greeter/gdm-clock-widget.c	2011-05-07 09:22:53.667796155 +0200
@@ -30,6 +30,7 @@
 #include <errno.h>
 #include <dirent.h>
 #include <sys/stat.h>
+#include <locale.h>
 
 #include <glib.h>
 #include <glib/gi18n.h>
@@ -60,39 +61,23 @@
 static void
 update_time_format (GdmClockWidget *clock)
 {
+        time_t      t;
+        struct tm  *tm;
+        char        ampm[16];
         char       *clock_format;
         char       *tooltip_format;
 
-        if (clock->priv->should_show_date && clock->priv->should_show_seconds) {
-                /* translators: This is the time format to use when both
-                 * the date and time with seconds are being shown together.
-                 */
-                clock_format = _("%a %b %e, %l:%M:%S %p");
-                tooltip_format = NULL;
-        } else if (clock->priv->should_show_date && !clock->priv->should_show_seconds) {
-                /* translators: This is the time format to use when both
-                 * the date and time without seconds are being shown together.
-                 */
-                clock_format = _("%a %b %e, %l:%M %p");
-
-                tooltip_format = NULL;
-        } else if (!clock->priv->should_show_date && clock->priv->should_show_seconds) {
-                /* translators: This is the time format to use when there is
-                 * no date, just weekday and time with seconds.
-                 */
-                clock_format = _("%a %l:%M:%S %p");
-
-                /* translators: This is the time format to use for the date
-                 */
-                tooltip_format = "%x";
-        } else {
-                /* translators: This is the time format to use when there is
-                 * no date, just weekday and time without seconds.
-                 */
-                clock_format = _("%a %l:%M %p");
+        time (&t);
+        tm = localtime (&t);
+        setlocale(LC_TIME, "");
+        strftime(ampm, sizeof(ampm), "%p", tm);
 
-                tooltip_format = "%x";
+        if (strlen(ampm) > 0) {
+                clock_format = "%l:%M %p";
+        } else {
+                clock_format = "%H:%M";
         }
+        tooltip_format = "%x";
 
         g_free (clock->priv->time_format);
         clock->priv->time_format = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL);
@@ -113,6 +98,8 @@
 {
         time_t     t;
         struct tm *tm;
+        char       showed_time[32];
+        char       weekday[32];
         char       buf[256];
         char      *utf8;
 
@@ -122,15 +109,21 @@
                 g_warning ("Unable to get broken down local time");
                 return;
         }
-        if (strftime (buf, sizeof (buf), clock_format, tm) == 0) {
+        if (strftime (showed_time, sizeof (showed_time), clock_format, tm) == 0) {
                 g_warning ("Couldn't format time: %s", clock_format);
-                strcpy (buf, "???");
+                strcpy (showed_time, "???");
         }
+
+        setlocale( LC_TIME, getenv("LC_MESSAGES") );
+        strftime(weekday, sizeof(weekday), "%a", tm);
+        sprintf(buf, "%s %s", weekday, showed_time);
+
         utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
         gtk_label_set_text (label, utf8);
         g_free (utf8);
 
         if (tooltip_format != NULL) {
+                setlocale(LC_TIME, "");
                 if (strftime (buf, sizeof (buf), tooltip_format, tm) == 0) {
                         g_warning ("Couldn't format tooltip date: %s", tooltip_format);
                         strcpy (buf, "???");
