Description: Display time on the greeter in accordance with the system wide settings in Language Support. Bug: https://bugzilla.gnome.org/show_bug.cgi?id=651506 Bug-Ubuntu: https://launchpad.net/bugs/777264 Forwarded: yes Author: Gunnar Hjalmarsson diff -Nur -x '*.orig' -x '*~' gdm-3.0.0//gui/simple-greeter/gdm-clock-widget.c gdm-3.0.0.new//gui/simple-greeter/gdm-clock-widget.c --- gdm-3.0.0//gui/simple-greeter/gdm-clock-widget.c 2011-04-04 16:37:16.000000000 +0200 +++ gdm-3.0.0.new//gui/simple-greeter/gdm-clock-widget.c 2011-06-05 23:55:31.140297043 +0200 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -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"; + time (&t); + tm = localtime (&t); + setlocale(LC_TIME, ""); + strftime(ampm, sizeof(ampm), "%p", tm); + + if (strlen(ampm) > 0) { + clock_format = "%l:%M %p"; } 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"); - - tooltip_format = "%x"; + 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; char *markup; @@ -123,10 +110,15 @@ 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); markup = g_strdup_printf ("%s", utf8); gtk_label_set_markup (label, markup); @@ -134,6 +126,7 @@ 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, "???");