X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon-time-editor.c;h=ff24dd9889da4232ee4a65983b5b514f6fe44492;hb=9e85b8840c98eee4c79882c17ebcf3e4ad7248d1;hp=702d5aa3442b16c2dbf4121ba8acdc6d0ad2ea42;hpb=576aea38ea725880406a9d9cdc55fca2fe406c4d;p=hildon diff --git a/src/hildon-time-editor.c b/src/hildon-time-editor.c index 702d5aa..ff24dd9 100644 --- a/src/hildon-time-editor.c +++ b/src/hildon-time-editor.c @@ -3,7 +3,7 @@ * * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved. * - * Contact: Michael Dominic Kostrzewa + * Contact: Rodrigo Novo * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -34,6 +34,13 @@ * minutes and seconds, and pm/am indicator as well as a button which * popups a #HildonTimePicker dialog. * + * + * + * #HildonTimeEditor has been deprecated since Hildon 2.2 and should not + * be used in newly written code. Use #HildonTimeSelector instead. + * + * + * * * HildonTimePicker example * @@ -50,23 +57,20 @@ * */ +#undef HILDON_DISABLE_DEPRECATED + #ifdef HAVE_CONFIG_H #include #endif -#include "hildon-time-editor.h" -#include -#include -#include -#include -#include -#include -#include #include #include #include #include #include +#include + +#include "hildon-time-editor.h" #include "hildon-defines.h" #include "hildon-time-picker.h" #include "hildon-banner.h" @@ -86,7 +90,7 @@ #define ICON_PRESSED 4 -#define ICON_NAME "qgn_widg_timedit" +#define ICON_NAME "widgets_time_editor" #define ICON_SIZE "timepicker-size" @@ -224,10 +228,14 @@ static void hildon_time_editor_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static gboolean -hildon_time_editor_entry_keypress (GtkWidget *widget, - GdkEventKey *event, - gpointer data); +static gboolean +hildon_time_editor_focus (GtkWidget *widget, + GtkDirectionType direction); + +static gboolean +hildon_time_editor_entry_keypress (GtkEntry *entry, + GdkEventKey* event, + gpointer user_data); static gboolean hildon_time_editor_check_locale (HildonTimeEditor *editor); @@ -276,7 +284,7 @@ hildon_time_editor_inserted_text (GtkEditable *editable, * * Initializes and returns the type of a hildon time editor. * - * @Returns: GType of #HildonTimeEditor + * Returns: GType of #HildonTimeEditor */ GType G_GNUC_CONST hildon_time_editor_get_type (void) @@ -362,10 +370,7 @@ hildon_time_editor_class_init (HildonTimeEditorClass *editor_c object_class->set_property = hildon_time_editor_set_property; widget_class->size_request = hildon_time_editor_size_request; widget_class->size_allocate = hildon_time_editor_size_allocate; -#ifdef MAEMO_GTK - widget_class->tap_and_hold_setup = hildon_time_editor_tap_and_hold_setup; -#endif - widget_class->focus = hildon_private_composite_focus; + widget_class->focus = hildon_time_editor_focus; container_class->forall = hildon_time_editor_forall; GTK_OBJECT_CLASS (editor_class)->destroy = hildon_time_editor_destroy; @@ -605,6 +610,13 @@ hildon_time_editor_init (HildonTimeEditor *editor) hildon_time_editor_set_to_current_time (editor); gtk_widget_pop_composite_child (); + +#ifdef MAEMO_GTK + g_signal_connect (editor, "tap-and-hold-setup", + G_CALLBACK (hildon_time_editor_tap_and_hold_setup), + NULL); +#endif + } static void @@ -688,7 +700,7 @@ hildon_time_editor_get_property (GObject *object, } } -/* +/** * hildon_time_editor_new: * * This function creates a new time editor. @@ -743,15 +755,15 @@ hildon_time_editor_get_time_separators (GtkLabel *hm_sep_label, g_date_set_dmy (&locale_test_date, 1, 2, 1970); (void) g_date_strftime (buffer, sizeof (buffer), "%X", &locale_test_date); + /* Find h-m separator */ + iter = buffer; + while (*iter && g_ascii_isdigit (*iter)) iter++; + /* Extract h-m separator*/ + endp = iter; + while (*endp && ! g_ascii_isdigit (*endp)) endp++; + if (hm_sep_label != NULL) { - /* Find h-m separator */ - iter = buffer; - while (*iter && g_ascii_isdigit (*iter)) iter++; - - /* Extract h-m separator*/ - endp = iter; - while (*endp && ! g_ascii_isdigit (*endp)) endp++; separator = g_strndup (iter, endp - iter); gtk_label_set_label (hm_sep_label, separator); g_free (separator); @@ -1194,13 +1206,8 @@ hildon_time_editor_get_time (HildonTimeEditor *editor, guint *minutes, guint *seconds) { - HildonTimeEditorPrivate *priv; - g_return_if_fail (HILDON_IS_TIME_EDITOR (editor)); - priv = HILDON_TIME_EDITOR_GET_PRIVATE (editor); - g_assert (priv); - ticks_to_time (hildon_time_editor_get_ticks (editor), hours, minutes, seconds); } @@ -1730,9 +1737,11 @@ hildon_time_editor_size_allocate (GtkWidget *widget, HildonTimeEditorPrivate *priv = HILDON_TIME_EDITOR_GET_PRIVATE (widget); GtkAllocation alloc; GtkRequisition req, max_req; + gboolean rtl; g_assert (priv); + rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL); widget->allocation = *allocation; gtk_widget_get_child_requisition (widget, &max_req); @@ -1742,19 +1751,32 @@ hildon_time_editor_size_allocate (GtkWidget *widget, alloc.y = allocation->y + MAX (allocation->height - max_req.height, 0) / 2; /* allocate frame */ - gtk_widget_get_child_requisition (priv->frame, &req); + if (rtl) + gtk_widget_get_child_requisition (priv->iconbutton, &req); + else + gtk_widget_get_child_requisition (priv->frame, &req); alloc.width = req.width; alloc.height = max_req.height; - gtk_widget_size_allocate (priv->frame, &alloc); + if (rtl) + gtk_widget_size_allocate (priv->iconbutton, &alloc); + else + gtk_widget_size_allocate (priv->frame, &alloc); /* allocate icon */ if (GTK_WIDGET_VISIBLE (priv->iconbutton)) { - gtk_widget_get_child_requisition (priv->iconbutton, &req); + if (rtl) + gtk_widget_get_child_requisition (priv->frame, &req); + else + gtk_widget_get_child_requisition (priv->iconbutton, &req); alloc.x += alloc.width + HILDON_MARGIN_DEFAULT; alloc.width = req.width; - gtk_widget_size_allocate (priv->iconbutton, &alloc); + + if (rtl) + gtk_widget_size_allocate (priv->frame, &alloc); + else + gtk_widget_size_allocate (priv->iconbutton, &alloc); } /* FIXME: ugly way to move labels up. They just don't seem move up @@ -1776,76 +1798,39 @@ hildon_time_editor_size_allocate (GtkWidget *widget, gtk_widget_size_allocate (priv->sec_label, &alloc); } -static gboolean -hildon_time_editor_entry_keypress (GtkWidget *widget, - GdkEventKey *event, - gpointer data) +static gboolean +hildon_time_editor_focus (GtkWidget *widget, + GtkDirectionType direction) { - HildonTimeEditor *editor; - HildonTimeEditorPrivate *priv; - gint cursor_pos; - gboolean r; + gboolean retval; + GtkDirectionType effective_direction; - g_assert (GTK_IS_ENTRY (widget)); - g_assert (event != NULL); - g_assert (HILDON_IS_TIME_EDITOR (data)); + g_assert (HILDON_IS_TIME_EDITOR (widget)); - editor = HILDON_TIME_EDITOR (data); - priv = HILDON_TIME_EDITOR_GET_PRIVATE (editor); - g_assert (priv); - cursor_pos = gtk_editable_get_position (GTK_EDITABLE (widget)); - - /* Show error message in case the key pressed is not allowed - (only digits and control characters are allowed )*/ - if (!g_unichar_isdigit (event->keyval) && ! (event->keyval & 0xF000)) { - g_signal_emit (editor, time_editor_signals[TIME_ERROR], 0, HILDON_DATE_TIME_ERROR_INVALID_CHAR, &r); - hildon_banner_show_information (widget, NULL, c_("ckct_ib_illegal_character")); - return TRUE; - } + retval = hildon_private_composite_focus (widget, direction, &effective_direction); - switch (event->keyval) - { - case GDK_Return: - /* Return key popups up time picker dialog. Visually it looks as if - the time picker icon was clicked. Before opening the time picker - the fields are first validated and fixed. */ - - /* hildon_time_editor_validate (editor, FALSE); - hildon_gtk_button_set_depressed (GTK_BUTTON (priv->iconbutton), TRUE); - hildon_time_editor_icon_clicked (widget, data); - hildon_gtk_button_set_depressed (GTK_BUTTON (priv->iconbutton), FALSE); - - FIXME The above code used to be here before the consolidation that removed the - _set_depressed crap. However, I think this code had NO EFFECT anyways, since - there is no expose event after the _set functions. So I'm just cutting it out. - Another story would be to actually fix it... */ - - hildon_time_editor_icon_clicked (widget, data); - return TRUE; - - case GDK_Left: - /* left arrow pressed in the entry. If we are on first position, try to - move to the previous field. */ - if (cursor_pos == 0) { - (void) gtk_widget_child_focus (GTK_WIDGET (editor), GTK_DIR_LEFT); - return TRUE; - } - break; - - case GDK_Right: - /* right arrow pressed in the entry. If we are on last position, try to - move to the next field. */ - if (cursor_pos >= g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (widget)), -1)) { - (void) gtk_widget_child_focus (GTK_WIDGET (editor), GTK_DIR_RIGHT); - return TRUE; - } - break; + if (retval == TRUE) + return GTK_WIDGET_CLASS (parent_class)->focus (widget, effective_direction); + else + return FALSE; +} - default: - break; - }; +static gboolean +hildon_time_editor_entry_keypress (GtkEntry *entry, + GdkEventKey *event, + gpointer data) +{ + switch (event->keyval) + { + case GDK_Return: + case GDK_ISO_Enter: + hildon_time_editor_icon_clicked (GTK_WIDGET (entry), data); + return TRUE; + default: + return FALSE; + } - return FALSE; + g_assert_not_reached (); } static void