2008-08-28 Alejandro Pinheiro <apinheiro@igalia.com> * src/hildon-touch-selector...
[hildon] / src / hildon-date-editor.c
index f74596f..8bd4732 100644 (file)
@@ -1,4 +1,5 @@
-/*
+/* vim:set sw=4 expandtab cino=(0:
+ *
  * This file is a part of hildon
  *
  * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved.
  *
  * <example>
  * <programlisting>
- * gint y, m, d;
+ * guint y, m, d;
+ * GtkDialog *dialog;
+ * GtkWidget *date_editor;
  * <!-- -->
+ * dialog = GTK_DIALOG (gtk_dialog_new ());
  * date_editor = hildon_date_editor_new ();
  * <!-- -->
- * hildon_date_editor_get_date(date_editor, &amp;y, &amp;m, &amp;d);
+ * gtk_box_pack_start (GTK_BOX (dialog->vbox), gtk_label_new ("Choose a date"), FALSE, FALSE, 10);
+ * gtk_box_pack_start (GTK_BOX (dialog->vbox), date_editor, FALSE, FALSE, 10);
+ * gtk_dialog_add_button (dialog, "Close", GTK_RESPONSE_CANCEL);
+ * <!-- -->
+ * gtk_widget_show_all (GTK_WIDGET (dialog));
+ * gtk_dialog_run (dialog);
+ * <!-- -->
+ * hildon_date_editor_get_date (HILDON_DATE_EDITOR (date_editor), &amp;y, &amp;m, &amp;d);
+ * g_debug ("Date: &percnt;u-&percnt;u-&percnt;u", y, m, d);
  * <!-- -->
  * </programlisting>
  * </example>
 #include                                        <config.h>
 #endif
 
-#include                                        "hildon-date-editor.h"
-#include                                        <glib.h>
-#include                                        <gtk/gtk.h>
-#include                                        <gtk/gtkenums.h>
-#include                                        <gdk/gdkkeysyms.h>
 #include                                        <time.h>
 #include                                        <stdlib.h>
 #include                                        <stdio.h>
 #include                                        <string.h>
+#include                                        <libintl.h>
+#include                                        <gdk/gdkkeysyms.h>
+
+#include                                        "hildon-date-editor.h"
 #include                                        "hildon-calendar-popup.h"
 #include                                        "hildon-defines.h"
-#include                                        "hildon-private.h"
 #include                                        "hildon-marshalers.h"
 #include                                        "hildon-enum-types.h"
 #include                                        "hildon-time-editor.h"
 #include                                        "hildon-banner.h"
-#include                                        <libintl.h>
 #include                                        "hildon-date-editor-private.h"
+#include                                        "hildon-private.h"
 
 #define                                         _(string) dgettext("hildon-libs", string)
 
@@ -1277,6 +1287,7 @@ hildon_date_editor_size_allocate                (GtkWidget *widget,
     GtkRequisition req;
     GtkRequisition max_req;
     GList *iter;
+    gboolean rtl;
 
     g_assert (GTK_IS_WIDGET (widget));
     g_assert (allocation != NULL);
@@ -1284,6 +1295,7 @@ hildon_date_editor_size_allocate                (GtkWidget *widget,
     ed = HILDON_DATE_EDITOR (widget);
     priv = HILDON_DATE_EDITOR_GET_PRIVATE (ed);
 
+    rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
     widget->allocation = *allocation;
 
     gtk_widget_get_child_requisition (widget, &max_req);
@@ -1296,24 +1308,35 @@ hildon_date_editor_size_allocate                (GtkWidget *widget,
     f_alloc.x = img_alloc.x = allocation->x +
         MAX (allocation->width - max_req.width, 0) / 2;
 
-    /* allocate frame */
-    if (GTK_WIDGET_VISIBLE (priv->frame)) {
+    /* calculate allocations */
+    if (GTK_WIDGET_VISIBLE (widget)) {
+        /* allocate frame */
         gtk_widget_get_child_requisition (priv->frame, &req);
 
         f_alloc.width = req.width;
         f_alloc.height = max_req.height;
-        gtk_widget_size_allocate (priv->frame, &f_alloc);
-    }
 
-    /* allocate icon */
-    if (GTK_WIDGET_VISIBLE (priv->d_button_image)) {
+        /* allocate icon */
         gtk_widget_get_child_requisition (priv->d_button_image,
                 &req);
 
         img_alloc.x += f_alloc.width + HILDON_MARGIN_DEFAULT;
         img_alloc.width = req.width;
         img_alloc.height = max_req.height;
-        gtk_widget_size_allocate (priv->d_button_image, &img_alloc);
+
+        if (rtl)
+        {
+            img_alloc.x = f_alloc.x;
+            f_alloc.x  += img_alloc.width + HILDON_MARGIN_DEFAULT;
+        }
+
+        if (GTK_WIDGET_VISIBLE (priv->d_button_image)) {
+            gtk_widget_size_allocate (priv->d_button_image, &img_alloc);
+        }
+
+        if (GTK_WIDGET_VISIBLE (priv->frame)) {
+            gtk_widget_size_allocate (priv->frame, &f_alloc);
+        }
     }
 
     /* FIXME: We really should not alloc delimeters by hand (since they