2006-09-13 Michael Dominic Kostrzewa <michael.kostrzewa@nokia.com>
authorMichael Dominic Kostrzewa <michael.kostrzewa@nokia.com>
Wed, 13 Sep 2006 07:53:33 +0000 (07:53 +0000)
committerMichael Dominic Kostrzewa <michael.kostrzewa@nokia.com>
Wed, 13 Sep 2006 07:53:33 +0000 (07:53 +0000)
[Merging the atk-branch fixes]

* hildon-widgets/hildon-date-editor.c: Use button instead of event
box for the calendar icon.

* hildon-widgets/hildon-time-editor.c: Use button instead of the label
for the am/pm switcher. Fixes #NB25602, #NB24411.

ChangeLog
hildon-widgets/hildon-date-editor.c
hildon-widgets/hildon-time-editor.c

index c0e4228..afa97fa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-09-13  Michael Dominic Kostrzewa  <michael.kostrzewa@nokia.com> 
+
+       [Merging the atk-branch fixes]
+
+       * hildon-widgets/hildon-date-editor.c: Use button instead of event
+       box for the calendar icon.
+
+       * hildon-widgets/hildon-time-editor.c: Use button instead of the label
+       for the am/pm switcher. Fixes #NB25602, #NB24411.
+
 2006-09-12  Michael Dominic Kostrzewa  <michael.kostrzewa@nokia.com> 
 
        * debian/copyright:
index c2f35d7..0d7679e 100644 (file)
@@ -29,7 +29,7 @@
  * @see_also: #HildonCalendarPopup, #HildonTimeEditor
  * 
  * HildonDateEditor is a widget with three entry fields (day, month,
- * year) and an icon (eventbox): clicking on the icon opens up a
+ * year) and an icon (button): clicking on the icon opens up a
  * HildonCalendarPopup.
  */
 
@@ -81,14 +81,14 @@ hildon_date_editor_class_init(HildonDateEditorClass * editor_class);
 static void hildon_date_editor_init(HildonDateEditor * editor);
 
 static gboolean
-hildon_date_editor_icon_press(GtkWidget * widget, GdkEventButton * event,
+hildon_date_editor_icon_press(GtkWidget * widget, 
                               gpointer data);
 
 static gboolean
 hildon_date_editor_entry_released(GtkWidget * widget,
                                   GdkEventButton * event, gpointer data);
 static gboolean
-hildon_date_editor_released(GtkWidget * widget, GdkEventButton * event,
+hildon_date_editor_released(GtkWidget * widget, 
                             gpointer data);
 
 static gboolean
@@ -98,6 +98,8 @@ hildon_date_editor_keypress(GtkWidget * widget, GdkEventKey * event,
 static gboolean
 hildon_date_editor_keyrelease(GtkWidget * widget, GdkEventKey * event,
                               gpointer data);
+static gboolean
+hildon_date_editor_clicked(GtkWidget * widget, gpointer data);
 static void
 hildon_date_editor_entry_validate(GtkWidget *widget, gpointer data);
 
@@ -155,7 +157,7 @@ struct _HildonDateEditorPrivate {
     gboolean calendar_icon_pressed;
 
     GtkWidget *frame;             /* borders around the date */
-    GtkWidget *d_event_box_image; /* icon */
+    GtkWidget *d_button_image; /* icon */
     GtkWidget *d_box_date;        /* hbox for date */
 
     GtkWidget *d_entry; /* GtkEntry for day */
@@ -448,32 +450,33 @@ static void hildon_date_editor_init(HildonDateEditor * editor)
 
     priv->d_box_date = gtk_hbox_new(FALSE, 0);
 
-    priv->d_event_box_image = gtk_event_box_new();
+    priv->d_button_image = gtk_button_new();
     priv->calendar_icon = gtk_image_new();
     real_set_calendar_icon_state(priv, FALSE);
+    GTK_WIDGET_UNSET_FLAGS(priv->d_button_image, GTK_CAN_FOCUS | GTK_CAN_DEFAULT);
 
     apply_locale_field_order(priv);
 
     gtk_container_add(GTK_CONTAINER(priv->frame), priv->d_box_date);
-    gtk_container_add(GTK_CONTAINER(priv->d_event_box_image), priv->calendar_icon);
+    gtk_container_add(GTK_CONTAINER(priv->d_button_image), priv->calendar_icon);
+    gtk_button_set_relief(GTK_BUTTON(priv->d_button_image), GTK_RELIEF_NONE);
+    gtk_button_set_focus_on_click(GTK_BUTTON(priv->d_button_image), FALSE);
 
     gtk_widget_set_parent(priv->frame, GTK_WIDGET(editor));
-    gtk_widget_set_parent(priv->d_event_box_image, GTK_WIDGET(editor));
+    gtk_widget_set_parent(priv->d_button_image, GTK_WIDGET(editor));
     gtk_widget_show_all(priv->frame);
-    gtk_widget_show_all(priv->d_event_box_image);
+    gtk_widget_show_all(priv->d_button_image);
     
-    /* image signal connects */
-    g_signal_connect(GTK_OBJECT(priv->d_event_box_image), "button_press_event",
+    /* image button signal connects */
+    g_signal_connect(GTK_OBJECT(priv->d_button_image), "pressed",
                      G_CALLBACK(hildon_date_editor_icon_press), editor);
-    g_signal_connect(GTK_OBJECT(priv->d_event_box_image),
-                     "button_release_event",
+    g_signal_connect(GTK_OBJECT(priv->d_button_image), "released",
                      G_CALLBACK(hildon_date_editor_released), editor);
-    g_signal_connect(GTK_OBJECT(priv->d_event_box_image), "key-press-event",
-                     G_CALLBACK(hildon_date_editor_keypress), editor);
-    g_signal_connect(GTK_OBJECT(priv->calendar_icon), "key-press-event",
+    g_signal_connect(GTK_OBJECT(priv->d_button_image), "clicked",
+                     G_CALLBACK(hildon_date_editor_clicked), editor);
+    g_signal_connect(GTK_OBJECT(priv->d_button_image), "key_press_event",
                      G_CALLBACK(hildon_date_editor_keypress), editor);
 
-
     /* entry signal connects */
     g_signal_connect(GTK_OBJECT(priv->d_entry), "button_release_event",
                      G_CALLBACK(hildon_date_editor_entry_released), editor);
@@ -637,7 +640,7 @@ static void hildon_child_forall(GtkContainer * container,
 
     if (include_internals) {
         (*callback) (priv->frame, callback_data);
-        (*callback) (priv->d_event_box_image, callback_data);
+        (*callback) (priv->d_button_image, callback_data);
     }
 }
 
@@ -651,9 +654,9 @@ static void hildon_date_editor_destroy(GtkObject * self)
         gtk_widget_unparent(priv->frame);
         priv->frame = NULL;
     }
-    if (priv->d_event_box_image) {
-        gtk_widget_unparent(priv->d_event_box_image);
-        priv->d_event_box_image = NULL;
+    if (priv->d_button_image) {
+        gtk_widget_unparent(priv->d_button_image);
+        priv->d_button_image = NULL;
     }
     if (priv->delims) {
         g_list_free(priv->delims);
@@ -801,22 +804,20 @@ void hildon_date_editor_get_date(HildonDateEditor * date,
       (guint) atoi(gtk_entry_get_text(GTK_ENTRY(priv->d_entry)));
 }
 
+/* icon button press event */
 static gboolean hildon_date_editor_icon_press(GtkWidget * widget,
-                                              GdkEventButton * event,
                                               gpointer data)
 {
     g_assert(GTK_IS_WIDGET(widget));
-    g_assert(event != NULL);
     g_assert(HILDON_IS_DATE_EDITOR(data));
 
-    if (event->button == 1)
-       hildon_date_editor_set_calendar_icon_state(HILDON_DATE_EDITOR(data), TRUE);
+    hildon_date_editor_set_calendar_icon_state(HILDON_DATE_EDITOR(data), TRUE);
 
     return FALSE;
 }
 
 static gboolean hildon_date_editor_entry_released(GtkWidget * widget,
-                                                  GdkEventButton * event,
+                                                 GdkEventButton * event,
                                                   gpointer data)
 {
     HildonDateEditor *ed;
@@ -884,19 +885,35 @@ static void popup_calendar_dialog(HildonDateEditor *ed)
 
 /* button released */
 static gboolean hildon_date_editor_released(GtkWidget * widget,
-                                            GdkEventButton * event,
                                             gpointer data)
 {
     HildonDateEditor *ed;
 
     g_assert(GTK_IS_WIDGET(widget));
-    g_assert(event != NULL);
     g_assert(HILDON_IS_DATE_EDITOR(data));
 
     ed = HILDON_DATE_EDITOR(data);
 
-    if (hildon_date_editor_set_calendar_icon_state(ed, FALSE))
-        popup_calendar_dialog(ed);
+    /* restores the icon state. The clicked cycle raises the dialog */
+    hildon_date_editor_set_calendar_icon_state(ed, FALSE);
+
+    return FALSE;
+}
+
+/* button released */
+static gboolean hildon_date_editor_clicked(GtkWidget * widget,
+                                          gpointer data)
+{
+    HildonDateEditor *ed;
+
+    g_assert(GTK_IS_WIDGET(widget));
+    g_assert(HILDON_IS_DATE_EDITOR(data));
+
+    ed = HILDON_DATE_EDITOR(data);
+
+    /* restores the non-clicked button state and raises the dialog */
+    hildon_date_editor_set_calendar_icon_state(ed, FALSE);
+    popup_calendar_dialog(ed);
 
     return FALSE;
 }
@@ -1180,7 +1197,7 @@ static void hildon_date_editor_size_request(GtkWidget * widget,
 
     /* Our own children affect our size */
     gtk_widget_size_request(priv->frame, &f_req);
-    gtk_widget_size_request(priv->d_event_box_image, &img_req);
+    gtk_widget_size_request(priv->d_button_image, &img_req);
 
     /* calculate our size */
     requisition->width = f_req.width + img_req.width + HILDON_MARGIN_DEFAULT;
@@ -1230,14 +1247,14 @@ static void hildon_date_editor_size_allocate(GtkWidget * widget,
         }
 
     /* allocate icon */
-        if (GTK_WIDGET_VISIBLE(priv->d_event_box_image)) {
-            gtk_widget_get_child_requisition(priv->d_event_box_image,
+        if (GTK_WIDGET_VISIBLE(priv->d_button_image)) {
+            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_event_box_image, &img_alloc);
+            gtk_widget_size_allocate(priv->d_button_image, &img_alloc);
         }
 
     /* FIXME: We really should not alloc delimeters by hand (since they
index 1e6575f..7638837 100644 (file)
@@ -40,7 +40,6 @@
 #endif
 
 #include <gtk/gtkhbox.h>
-#include <gtk/gtkeventbox.h>
 #include <gtk/gtkentry.h>
 #include <gtk/gtkbutton.h>
 #include <gtk/gtklabel.h>
@@ -141,7 +140,6 @@ struct _HildonTimeEditorPrivate {
     gchar     *am_symbol;
     gchar     *pm_symbol;
 
-    GtkWidget *eventbox;             /* hold entries                 */
     GtkWidget *iconbutton;           /* button for icon              */
 
     GtkWidget *frame;                /* frame around the entries     */
@@ -151,6 +149,7 @@ struct _HildonTimeEditorPrivate {
     GtkWidget *ampm_label;           /* label for showing am or pm   */
 
     GtkWidget *error_widget;         /* field to highlight in idle   */
+  GtkWidget *ampm_button;            /* am/pm change button */
 
 
     gboolean   duration_mode;        /* In HildonDurationEditor mode */
@@ -209,7 +208,6 @@ static gboolean hildon_time_editor_time_error(HildonTimeEditor *editor,
                                              HildonTimeEditorErrorType type);
 
 static gboolean hildon_time_editor_ampm_clicked(GtkWidget       *widget,
-                                                GdkEventButton  *event,
                                                 gpointer         data);
 
 static gboolean hildon_time_editor_icon_clicked(GtkWidget       *widget,
@@ -457,7 +455,7 @@ void hildon_time_editor_tap_and_hold_setup(GtkWidget * widget,
       gtk_widget_tap_and_hold_setup(priv->entries[i], menu, func,
                                     GTK_TAP_AND_HOLD_NO_SIGNALS);
     }
-    gtk_widget_tap_and_hold_setup(priv->eventbox, menu, func,
+    gtk_widget_tap_and_hold_setup(priv->ampm_button, menu, func,
                                   GTK_TAP_AND_HOLD_NO_SIGNALS);
     gtk_widget_tap_and_hold_setup(priv->iconbutton, menu, func,
                                   GTK_TAP_AND_HOLD_NONE);
@@ -491,7 +489,7 @@ static void hildon_time_editor_init(HildonTimeEditor * editor)
     priv->hm_label       = gtk_label_new(NULL);
     priv->sec_label      = gtk_label_new(NULL);
     priv->frame          = gtk_frame_new(NULL);
-    priv->eventbox       = gtk_event_box_new();
+    priv->ampm_button    = gtk_button_new();
 
     icon = gtk_image_new_from_icon_name(ICON_NAME, HILDON_ICON_SIZE_WIDG);
     hbox = gtk_hbox_new(FALSE, 0);
@@ -499,12 +497,12 @@ static void hildon_time_editor_init(HildonTimeEditor * editor)
     GTK_WIDGET_SET_FLAGS(editor, GTK_NO_WINDOW);
     GTK_WIDGET_UNSET_FLAGS(priv->iconbutton, GTK_CAN_FOCUS | GTK_CAN_DEFAULT);
     
-    gtk_event_box_set_visible_window(GTK_EVENT_BOX(priv->eventbox), FALSE);
-
     gtk_container_set_border_width(GTK_CONTAINER(priv->frame), 0);
 
     gtk_container_add(GTK_CONTAINER(priv->iconbutton), icon);
-    gtk_container_add(GTK_CONTAINER(priv->eventbox), priv->ampm_label);
+    gtk_container_add(GTK_CONTAINER(priv->ampm_button), priv->ampm_label);
+    gtk_button_set_relief(GTK_BUTTON(priv->ampm_button), GTK_RELIEF_NONE);
+    gtk_button_set_focus_on_click(GTK_BUTTON(priv->ampm_button), FALSE);
 
     /* Create hour, minute and second entries */
     for (i = 0; i < ENTRY_COUNT; i++)
@@ -541,7 +539,7 @@ static void hildon_time_editor_init(HildonTimeEditor * editor)
     }
     
     /* clicked signal for am/pm label */
-    g_signal_connect(G_OBJECT(priv->eventbox), "button_press_event",
+    g_signal_connect(G_OBJECT(priv->ampm_button), "clicked",
                      G_CALLBACK(hildon_time_editor_ampm_clicked), editor);
 
     /* clicked signal for icon */
@@ -555,7 +553,8 @@ static void hildon_time_editor_init(HildonTimeEditor * editor)
     gtk_box_pack_start(GTK_BOX(hbox), priv->entries[ENTRY_MINS],  FALSE, FALSE, 0);
     gtk_box_pack_start(GTK_BOX(hbox), priv->sec_label,            FALSE, FALSE, 0);
     gtk_box_pack_start(GTK_BOX(hbox), priv->entries[ENTRY_SECS],  FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), priv->eventbox,             FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), priv->ampm_button,          FALSE, FALSE, 0);
+    gtk_misc_set_padding(GTK_MISC(priv->ampm_label), 0, 0);
 
     gtk_container_add(GTK_CONTAINER(priv->frame), hbox);
 
@@ -569,7 +568,7 @@ static void hildon_time_editor_init(HildonTimeEditor * editor)
         /* Using 12h clock */
         priv->clock_24h = FALSE;
     } else {
-        gtk_widget_hide(priv->eventbox);
+        gtk_widget_hide(priv->ampm_button);
     }
  
     if (!priv->show_seconds) {
@@ -705,7 +704,7 @@ _hildon_time_editor_get_time_separators(GtkLabel *hm_sep_label,
     gchar buffer[256];
     gchar *separator;
     GDate locale_test_date;
-    gchar *iter, *endp;
+    gchar *iter, *endp = NULL;
 
     /* Get localized time string */
     g_date_set_dmy(&locale_test_date, 1, 2, 1970);
@@ -961,7 +960,7 @@ void hildon_time_editor_set_duration_mode (HildonTimeEditor * editor,
             /* There's no AM/PM label or time picker icon in duration mode.
                Make sure they're hidden. */
             gtk_widget_hide(GTK_WIDGET(priv->ampm_label));
-            gtk_widget_hide(GTK_WIDGET(priv->eventbox));
+            gtk_widget_hide(GTK_WIDGET(priv->ampm_button));
             gtk_widget_hide(GTK_WIDGET(priv->iconbutton));
             /* Duration mode has seconds by default. */
             hildon_time_editor_set_show_seconds(editor, TRUE);
@@ -970,7 +969,7 @@ void hildon_time_editor_set_duration_mode (HildonTimeEditor * editor,
             if (!priv->clock_24h)
                 gtk_widget_show(GTK_WIDGET(priv->ampm_label));
 
-            gtk_widget_show(GTK_WIDGET(priv->eventbox));
+            gtk_widget_show(GTK_WIDGET(priv->ampm_button));
             gtk_widget_show(GTK_WIDGET(priv->iconbutton));        
 
                /* Reset the ticks to current time. Anything set in duration mode
@@ -1551,7 +1550,7 @@ static gboolean hildon_time_editor_entry_focusout(GtkWidget * widget,
 
 static gboolean
 hildon_time_editor_ampm_clicked(GtkWidget * widget,
-                                GdkEventButton * event, gpointer data)
+                                gpointer data)
 {
     HildonTimeEditor *editor;
     HildonTimeEditorPrivate *priv;