X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-validating-entry.c;h=879e1daf45ae84242996586817959a5c9bce4134;hp=1f5035af270d6dc5e345923d77866693829ebba1;hb=5f5323696e86d16211b17965dbbc12dcc4ddeaeb;hpb=aab65ff35930f7c7d33ec080ae179f09150fabe2 diff --git a/src/widgets/modest-validating-entry.c b/src/widgets/modest-validating-entry.c index 1f5035a..879e1da 100644 --- a/src/widgets/modest-validating-entry.c +++ b/src/widgets/modest-validating-entry.c @@ -4,6 +4,7 @@ */ #include "modest-validating-entry.h" +#include #include /* For the gtk_signal_stop_emit_by_name() convenience function. */ #include /* For strlen(). */ @@ -12,14 +13,19 @@ #include #endif -G_DEFINE_TYPE (EasysetupValidatingEntry, easysetup_validating_entry, GTK_TYPE_ENTRY); + +#ifdef MODEST_TOOLKIT_HILDON2 +G_DEFINE_TYPE (ModestValidatingEntry, modest_validating_entry, HILDON_TYPE_ENTRY); +#else +G_DEFINE_TYPE (ModestValidatingEntry, modest_validating_entry, GTK_TYPE_ENTRY); +#endif #define VALIDATING_ENTRY_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), EASYSETUP_TYPE_VALIDATING_ENTRY, EasysetupValidatingEntryPrivate)) + (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEST_TYPE_VALIDATING_ENTRY, ModestValidatingEntryPrivate)) -typedef struct _EasysetupValidatingEntryPrivate EasysetupValidatingEntryPrivate; +typedef struct _ModestValidatingEntryPrivate ModestValidatingEntryPrivate; -struct _EasysetupValidatingEntryPrivate +struct _ModestValidatingEntryPrivate { /* A list of gunichar, rather than char*, * because gunichar is easier to deal with internally, @@ -29,12 +35,15 @@ struct _EasysetupValidatingEntryPrivate gboolean prevent_whitespace; + EasySetupValidatingEntryFunc func; + gpointer func_user_data; + EasySetupValidatingEntryMaxFunc max_func; gpointer max_func_user_data; }; static void -easysetup_validating_entry_get_property (GObject *object, guint property_id, +modest_validating_entry_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { @@ -44,7 +53,7 @@ easysetup_validating_entry_get_property (GObject *object, guint property_id, } static void -easysetup_validating_entry_set_property (GObject *object, guint property_id, +modest_validating_entry_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { @@ -54,16 +63,16 @@ easysetup_validating_entry_set_property (GObject *object, guint property_id, } static void -easysetup_validating_entry_dispose (GObject *object) +modest_validating_entry_dispose (GObject *object) { - if (G_OBJECT_CLASS (easysetup_validating_entry_parent_class)->dispose) - G_OBJECT_CLASS (easysetup_validating_entry_parent_class)->dispose (object); + if (G_OBJECT_CLASS (modest_validating_entry_parent_class)->dispose) + G_OBJECT_CLASS (modest_validating_entry_parent_class)->dispose (object); } static void -easysetup_validating_entry_finalize (GObject *object) +modest_validating_entry_finalize (GObject *object) { - EasysetupValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (object); + ModestValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (object); /* Free the list and its items: */ if (priv->list_prevent) { @@ -71,20 +80,20 @@ easysetup_validating_entry_finalize (GObject *object) g_list_free (priv->list_prevent); } - G_OBJECT_CLASS (easysetup_validating_entry_parent_class)->finalize (object); + G_OBJECT_CLASS (modest_validating_entry_parent_class)->finalize (object); } static void -easysetup_validating_entry_class_init (EasysetupValidatingEntryClass *klass) +modest_validating_entry_class_init (ModestValidatingEntryClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (klass, sizeof (EasysetupValidatingEntryPrivate)); + g_type_class_add_private (klass, sizeof (ModestValidatingEntryPrivate)); - object_class->get_property = easysetup_validating_entry_get_property; - object_class->set_property = easysetup_validating_entry_set_property; - object_class->dispose = easysetup_validating_entry_dispose; - object_class->finalize = easysetup_validating_entry_finalize; + object_class->get_property = modest_validating_entry_get_property; + object_class->set_property = modest_validating_entry_set_property; + object_class->dispose = modest_validating_entry_dispose; + object_class->finalize = modest_validating_entry_finalize; } static gint @@ -104,8 +113,8 @@ on_insert_text(GtkEditable *editable, gint *position, gpointer user_data) { - EasysetupValidatingEntry *self = EASYSETUP_VALIDATING_ENTRY (user_data); - EasysetupValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); + ModestValidatingEntry *self = MODEST_VALIDATING_ENTRY (user_data); + ModestValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); if(!new_text_length) return; @@ -131,6 +140,10 @@ on_insert_text(GtkEditable *editable, GList *found = g_list_find_custom(priv->list_prevent, &one_char, &on_list_compare); if(found) { allow = FALSE; + if (priv->func) + { + priv->func(self, iter, priv->func_user_data); + } break; } } @@ -140,6 +153,10 @@ on_insert_text(GtkEditable *editable, gunichar one_char = g_utf8_get_char (iter); if (g_unichar_isspace (one_char)) { allow = FALSE; + if (priv->func) + { + priv->func(self, NULL, priv->func_user_data); + } break; } } @@ -180,7 +197,7 @@ on_insert_text(GtkEditable *editable, } static void -easysetup_validating_entry_init (EasysetupValidatingEntry *self) +modest_validating_entry_init (ModestValidatingEntry *self) { /* Connect to the GtkEditable::insert-text signal * so we can filter out some characters: @@ -189,19 +206,27 @@ easysetup_validating_entry_init (EasysetupValidatingEntry *self) g_signal_connect (G_OBJECT (self), "insert-text", (GCallback)&on_insert_text, self); } -EasysetupValidatingEntry* -easysetup_validating_entry_new (void) +ModestValidatingEntry* +modest_validating_entry_new (void) { - return g_object_new (EASYSETUP_TYPE_VALIDATING_ENTRY, NULL); + ModestValidatingEntry *entry; + + entry = g_object_new (MODEST_TYPE_VALIDATING_ENTRY, NULL); + +#ifdef MODEST_TOOLKIT_HILDON2 + hildon_gtk_widget_set_theme_size (GTK_WIDGET (entry), MODEST_EDITABLE_SIZE); +#endif + + return entry; } /** Specify characters that may not be entered into this GtkEntry. * * list: A list of gchar* strings. Each one identifies a UTF-8 character. */ -void easysetup_validating_entry_set_unallowed_characters (EasysetupValidatingEntry *self, GList *list) +void modest_validating_entry_set_unallowed_characters (ModestValidatingEntry *self, GList *list) { - EasysetupValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); + ModestValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); /* Free the list and its items: */ if (priv->list_prevent) { @@ -226,19 +251,30 @@ void easysetup_validating_entry_set_unallowed_characters (EasysetupValidatingEnt /** Specify that no whitespace characters may be entered into this GtkEntry. * */ -void easysetup_validating_entry_set_unallowed_characters_whitespace (EasysetupValidatingEntry *self) +void modest_validating_entry_set_unallowed_characters_whitespace (ModestValidatingEntry *self) { - EasysetupValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); + ModestValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); priv->prevent_whitespace = TRUE; } /** Set a callback to be called when the maximum number of characters have been entered. * This may be used to show an informative dialog. */ -void easysetup_validating_entry_set_max_func (EasysetupValidatingEntry *self, EasySetupValidatingEntryMaxFunc func, gpointer user_data) +void modest_validating_entry_set_max_func (ModestValidatingEntry *self, EasySetupValidatingEntryMaxFunc func, gpointer user_data) { - EasysetupValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); + ModestValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); priv->max_func = func; priv->max_func_user_data = user_data; } +/** Set a callback to be called when a character was prevented so that a + * note can be shown by the application to inform the user. For whitespaces, + * character will be NULL + */ +void modest_validating_entry_set_func (ModestValidatingEntry *self, EasySetupValidatingEntryFunc func, gpointer user_data) +{ + ModestValidatingEntryPrivate *priv = VALIDATING_ENTRY_GET_PRIVATE (self); + priv->func = func; + priv->func_user_data = user_data; +} +