* @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.
*/
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
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);
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 */
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);
if (include_internals) {
(*callback) (priv->frame, callback_data);
- (*callback) (priv->d_event_box_image, callback_data);
+ (*callback) (priv->d_button_image, callback_data);
}
}
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);
(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;
/* 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;
}
/* 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;
}
/* 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
#endif
#include <gtk/gtkhbox.h>
-#include <gtk/gtkeventbox.h>
#include <gtk/gtkentry.h>
#include <gtk/gtkbutton.h>
#include <gtk/gtklabel.h>
gchar *am_symbol;
gchar *pm_symbol;
- GtkWidget *eventbox; /* hold entries */
GtkWidget *iconbutton; /* button for icon */
GtkWidget *frame; /* frame around the entries */
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 */
HildonTimeEditorErrorType type);
static gboolean hildon_time_editor_ampm_clicked(GtkWidget *widget,
- GdkEventButton *event,
gpointer data);
static gboolean hildon_time_editor_icon_clicked(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);
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);
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++)
}
/* 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 */
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);
/* Using 12h clock */
priv->clock_24h = FALSE;
} else {
- gtk_widget_hide(priv->eventbox);
+ gtk_widget_hide(priv->ampm_button);
}
if (!priv->show_seconds) {
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);
/* 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);
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
static gboolean
hildon_time_editor_ampm_clicked(GtkWidget * widget,
- GdkEventButton * event, gpointer data)
+ gpointer data)
{
HildonTimeEditor *editor;
HildonTimeEditorPrivate *priv;