X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=hildon%2Fhildon-entry.c;h=526858685d762dde511f9b4f7ad98a6a58b70f5d;hb=3c231d0b4be8f81e72cd80cdc2383b6bc2ede7be;hp=eb8d22a6c1df14cd8890766e368732abfcc2a469;hpb=30145d2600fdb0a434350f631064cbfbbf9f03eb;p=hildon diff --git a/hildon/hildon-entry.c b/hildon/hildon-entry.c index eb8d22a..5268586 100644 --- a/hildon/hildon-entry.c +++ b/hildon/hildon-entry.c @@ -1,7 +1,7 @@ /* * This file is a part of hildon * - * Copyright (C) 2008 Nokia Corporation, all rights reserved. + * Copyright (C) 2008, 2009 Nokia Corporation, all rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser Public License as published by @@ -18,19 +18,15 @@ * SECTION:hildon-entry * @short_description: Text entry in the Hildon framework. * - * The #HildonEntry is text entry derived from the #GtkEntry widget providing - * additional commodities specific to the Hildon framework. + * #HildonEntry is text entry derived from the #GtkEntry widget but + * with a slightly different appearance designed for the Hildon 2.2 + * framework. * - * Besides all the features inherited from #GtkEntry, a #HildonEntry - * can also have a placeholder text. This text will be shown if the - * entry is empty and doesn't have the input focus, but it's otherwise - * ignored. Thus, calls to hildon_entry_get_text() will never return - * the placeholder text, not even when it's being displayed. - * - * Although #HildonEntry is derived from #GtkEntry, - * gtk_entry_get_text() and gtk_entry_set_text() must never be used to - * get/set the text in this widget. hildon_entry_get_text() and - * hildon_entry_set_text() must be used instead. + * Text entries in Hildon 2.2 can have a placeholder text, set with + * hildon_gtk_entry_set_placeholder_text(). This text will be shown if + * the entry is empty and doesn't have the input focus, but it's + * otherwise ignored. Thus, calls to gtk_entry_get_text() will never + * return the placeholder text, not even when it's being displayed. * * * Creating a HildonEntry with a placeholder @@ -41,7 +37,7 @@ * GtkWidget *entry; * * entry = hildon_entry_new (HILDON_SIZE_AUTO); - * hildon_entry_set_placeholder (HILDON_ENTRY (entry), "First name"); + * hildon_gtk_entry_set_placeholder_text (GTK_ENTRY (entry), "First name"); * * return entry; * } @@ -49,8 +45,9 @@ * */ +#undef HILDON_DISABLE_DEPRECATED + #include "hildon-entry.h" -#include "hildon-helper.h" G_DEFINE_TYPE (HildonEntry, hildon_entry, GTK_TYPE_ENTRY); @@ -58,26 +55,22 @@ enum { PROP_SIZE = 1 }; -#define HILDON_ENTRY_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \ - HILDON_TYPE_ENTRY, HildonEntryPrivate)); - -struct _HildonEntryPrivate -{ - gchar *placeholder; - gboolean showing_placeholder; -}; - static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { + HildonSizeType size; + switch (prop_id) { case PROP_SIZE: - hildon_gtk_widget_set_theme_size (GTK_WIDGET (object), g_value_get_flags (value)); + size = g_value_get_flags (value); + /* If this is auto height, default to finger height. */ + if (!(size & (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_THUMB_HEIGHT))) + size |= HILDON_SIZE_FINGER_HEIGHT; + hildon_gtk_widget_set_theme_size (GTK_WIDGET (object), size); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -85,28 +78,6 @@ set_property (GObject *object, } } -static void -hildon_entry_show_placeholder (HildonEntry *entry) -{ - HildonEntryPrivate *priv = HILDON_ENTRY (entry)->priv; - - priv->showing_placeholder = TRUE; - gtk_entry_set_text (GTK_ENTRY (entry), priv->placeholder); - hildon_helper_set_logical_color (GTK_WIDGET (entry), - GTK_RC_TEXT, GTK_STATE_NORMAL, "ReversedSecondaryTextColor"); -} - -static void -hildon_entry_hide_placeholder (HildonEntry *entry, const gchar *text) -{ - HildonEntryPrivate *priv = HILDON_ENTRY (entry)->priv; - - priv->showing_placeholder = FALSE; - gtk_entry_set_text (GTK_ENTRY (entry), text); - hildon_helper_set_logical_color (GTK_WIDGET (entry), - GTK_RC_TEXT, GTK_STATE_NORMAL, "ReversedTextColor"); -} - /** * hildon_entry_set_text: * @entry: a #HildonEntry @@ -114,22 +85,16 @@ hildon_entry_hide_placeholder (HildonEntry *entry, const gchar *text) * * Sets the text in @entry to @text, replacing its current contents. * - * Note that you must never use gtk_entry_set_text() to set the text - * of a #HildonEntry. - * * Since: 2.2 + * + * Deprecated: Use gtk_entry_set_text() instead */ void hildon_entry_set_text (HildonEntry *entry, const gchar *text) { g_return_if_fail (HILDON_IS_ENTRY (entry) && text != NULL); - - if (text[0] == '\0' && !GTK_WIDGET_HAS_FOCUS (entry)) { - hildon_entry_show_placeholder (entry); - } else { - hildon_entry_hide_placeholder (entry, text); - } + gtk_entry_set_text (GTK_ENTRY (entry), text); } /** @@ -138,27 +103,22 @@ hildon_entry_set_text (HildonEntry *entry, * * Gets the current text in @entry. * - * Note that you must never use gtk_entry_get_text() to get the text - * from a #HildonEntry. - * - * Also note that placeholder text (set using - * hildon_entry_set_placeholder()) is never returned. Only text set by - * hildon_entry_set_text() or typed by the user is considered. + * Note that the placeholder text (set using + * hildon_gtk_entry_set_placeholder_text()) is never returned. Only + * text set by gtk_entry_set_text() or typed by the user is + * considered. * * Returns: the text in @entry. This text must not be modified or * freed. * * Since: 2.2 + * + * Deprecated: Use gtk_entry_get_text() instead */ const gchar * hildon_entry_get_text (HildonEntry *entry) { g_return_val_if_fail (HILDON_IS_ENTRY (entry), NULL); - - if (entry->priv->showing_placeholder) { - return ""; - } - return gtk_entry_get_text (GTK_ENTRY (entry)); } @@ -170,21 +130,15 @@ hildon_entry_get_text (HildonEntry *entry) * Sets the placeholder text in @entry to @text. * * Since: 2.2 + * + * Deprecated: Use hildon_gtk_entry_set_placeholder_text() instead */ void hildon_entry_set_placeholder (HildonEntry *entry, const gchar *text) { g_return_if_fail (HILDON_IS_ENTRY (entry) && text != NULL); - - g_free (entry->priv->placeholder); - entry->priv->placeholder = g_strdup (text); - - /* Show the placeholder if it needs to be updated or if should be shown now. */ - if (entry->priv->showing_placeholder || - (!GTK_WIDGET_HAS_FOCUS (entry) && gtk_entry_get_text (GTK_ENTRY (entry)) [0] == '\0')) { - hildon_entry_show_placeholder (entry); - } + hildon_gtk_entry_set_placeholder_text (GTK_ENTRY (entry), text); } /** @@ -203,57 +157,12 @@ hildon_entry_new (HildonSizeType size) return g_object_new (HILDON_TYPE_ENTRY, "size", size, NULL); } -static gboolean -hildon_entry_focus_in_event (GtkWidget *widget, - GdkEventFocus *event) -{ - if (HILDON_ENTRY (widget)->priv->showing_placeholder) { - hildon_entry_hide_placeholder (HILDON_ENTRY (widget), ""); - } - - if (GTK_WIDGET_CLASS (hildon_entry_parent_class)->focus_in_event) { - return GTK_WIDGET_CLASS (hildon_entry_parent_class)->focus_in_event (widget, event); - } else { - return FALSE; - } -} - -static gboolean -hildon_entry_focus_out_event (GtkWidget *widget, - GdkEventFocus *event) -{ - if (gtk_entry_get_text (GTK_ENTRY (widget)) [0] == '\0') { - hildon_entry_show_placeholder (HILDON_ENTRY (widget)); - } - - if (GTK_WIDGET_CLASS (hildon_entry_parent_class)->focus_out_event) { - return GTK_WIDGET_CLASS (hildon_entry_parent_class)->focus_out_event (widget, event); - } else { - return FALSE; - } -} - -static void -hildon_entry_finalize (GObject *object) -{ - HildonEntryPrivate *priv = HILDON_ENTRY (object)->priv; - - g_free (priv->placeholder); - - if (G_OBJECT_CLASS (hildon_entry_parent_class)->finalize) - G_OBJECT_CLASS (hildon_entry_parent_class)->finalize (object); -} - static void hildon_entry_class_init (HildonEntryClass *klass) { GObjectClass *gobject_class = (GObjectClass *)klass; - GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; gobject_class->set_property = set_property; - gobject_class->finalize = hildon_entry_finalize; - widget_class->focus_in_event = hildon_entry_focus_in_event; - widget_class->focus_out_event = hildon_entry_focus_out_event; g_object_class_install_property ( gobject_class, @@ -265,14 +174,10 @@ hildon_entry_class_init (HildonEntryClass *klass) HILDON_TYPE_SIZE_TYPE, HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT, G_PARAM_CONSTRUCT | G_PARAM_WRITABLE)); - - g_type_class_add_private (klass, sizeof (HildonEntryPrivate)); } static void hildon_entry_init (HildonEntry *self) { - self->priv = HILDON_ENTRY_GET_PRIVATE (self); - self->priv->placeholder = g_strdup (""); - self->priv->showing_placeholder = FALSE; + self->priv = NULL; }