walters / rpms / gdm

Forked from rpms/gdm 6 years ago
Clone
Blob Blame History Raw
From 87248d5c3e0a90c3b0748c7be05a9e6eac231737 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 21 Oct 2009 10:57:59 -0400
Subject: [PATCH] Move date to tooltip in panel clock

It's a bit long at the moment. Dropping the
date makes the screen look a little cleaner, and putting
the date in the tooltip makes it still available for those
people who want to see it.
---
 gui/simple-greeter/gdm-clock-widget.c |   97 +++++++++++++++++++++++----------
 1 files changed, 67 insertions(+), 30 deletions(-)

diff --git a/gui/simple-greeter/gdm-clock-widget.c b/gui/simple-greeter/gdm-clock-widget.c
index a3816d2..9008e6d 100644
--- a/gui/simple-greeter/gdm-clock-widget.c
+++ b/gui/simple-greeter/gdm-clock-widget.c
@@ -44,8 +44,10 @@ struct GdmClockWidgetPrivate
 {
         GtkWidget *label;
         char      *time_format;
+        char      *tooltip_format;
         guint      update_clock_id;
         guint      should_show_seconds : 1;
+        guint      should_show_date : 1;
 };
 
 static void     gdm_clock_widget_class_init  (GdmClockWidgetClass *klass);
@@ -55,38 +57,59 @@ static gboolean update_timeout_cb            (GdmClockWidget      *clock);
 
 G_DEFINE_TYPE (GdmClockWidget, gdm_clock_widget, GTK_TYPE_ALIGNMENT)
 
-static char *
-get_time_format (GdmClockWidget *clock)
+static void
+update_time_format (GdmClockWidget *clock)
 {
-        const char *time_format;
-        const char *date_format;
         char       *clock_format;
-        char       *result;
-
-        time_format = clock->priv->should_show_seconds ? _("%l:%M:%S %p") : _("%l:%M %p");
-        /* translators: replace %e with %d if, when the day of the
-         *              month as a decimal number is a single digit, it
-         *              should begin with a 0 in your locale (e.g. "May
-         *              01" instead of "May  1").
-         */
-        date_format = _("%a %b %e");
-        /* translators: reverse the order of these arguments
-         *              if the time should come before the
-         *              date on a clock in your locale.
-         */
-        clock_format = g_strdup_printf (_("%1$s, %2$s"),
-                                        date_format,
-                                        time_format);
-
-        result = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL);
-        g_free (clock_format);
-
-        return result;
+        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");
+
+                tooltip_format = _("%x");
+        }
+
+        g_free (clock->priv->time_format);
+        clock->priv->time_format = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL);
+
+        g_free (clock->priv->tooltip_format);
+
+        if (tooltip_format != NULL) {
+                clock->priv->tooltip_format = g_locale_from_utf8 (tooltip_format, -1, NULL, NULL, NULL);
+        } else {
+                clock->priv->tooltip_format = NULL;
+        }
 }
 
 static void
 update_clock (GtkLabel   *label,
-              const char *format)
+              const char *clock_format,
+              const char *tooltip_format)
 {
         time_t     t;
         struct tm *tm;
@@ -99,13 +122,25 @@ update_clock (GtkLabel   *label,
                 g_warning ("Unable to get broken down local time");
                 return;
         }
-        if (strftime (buf, sizeof (buf), format, tm) == 0) {
-                g_warning ("Couldn't format time: %s", format);
+        if (strftime (buf, sizeof (buf), clock_format, tm) == 0) {
+                g_warning ("Couldn't format time: %s", clock_format);
                 strcpy (buf, "???");
         }
         utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
         gtk_label_set_text (label, utf8);
         g_free (utf8);
+
+        if (tooltip_format != NULL) {
+                if (strftime (buf, sizeof (buf), tooltip_format, tm) == 0) {
+                        g_warning ("Couldn't format tooltip date: %s", tooltip_format);
+                        strcpy (buf, "???");
+                }
+                utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
+                gtk_widget_set_tooltip_text (GTK_WIDGET (label), utf8);
+                g_free (utf8);
+        } else {
+                gtk_widget_set_has_tooltip (GTK_WIDGET (label), FALSE);
+        }
 }
 
 static void
@@ -142,7 +177,8 @@ update_timeout_cb (GdmClockWidget *clock)
 
         if (clock->priv->label != NULL) {
                 update_clock (GTK_LABEL (clock->priv->label),
-                              clock->priv->time_format);
+                              clock->priv->time_format,
+                              clock->priv->tooltip_format);
         }
 
         set_clock_timeout (clock, new_time);
@@ -214,10 +250,11 @@ gdm_clock_widget_init (GdmClockWidget *widget)
         gtk_container_add (GTK_CONTAINER (widget), box);
 
         widget->priv->label = gtk_label_new ("");
+
         gtk_widget_show (widget->priv->label);
         gtk_box_pack_start (GTK_BOX (box), widget->priv->label, FALSE, FALSE, 0);
 
-        widget->priv->time_format = get_time_format (widget);
+        update_time_format (widget);
         update_timeout_cb (widget);
 }
 
-- 
1.6.5.rc2