From fcbc6a6dfa1a10921d2ca889256a21b192adbe98 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Fri, 24 Aug 2007 11:50:01 +0000 Subject: [PATCH] * Fixes NB@63545 pmo-trunk-r3063 --- src/maemo/modest-account-settings-dialog.c | 25 +++++++--- src/maemo/modest-maemo-global-settings-dialog.c | 3 +- src/maemo/modest-platform.c | 35 +++++++------- src/maemo/modest-progress-bar-widget.c | 20 ++++---- src/modest-text-utils.c | 58 ++++++++++++++++++++--- src/modest-text-utils.h | 17 +++++++ 6 files changed, 116 insertions(+), 42 deletions(-) diff --git a/src/maemo/modest-account-settings-dialog.c b/src/maemo/modest-account-settings-dialog.c index 0148e33..12656cb 100644 --- a/src/maemo/modest-account-settings-dialog.c +++ b/src/maemo/modest-account-settings-dialog.c @@ -260,19 +260,30 @@ static GtkWidget* create_caption_new_with_asterisk(ModestAccountSettingsDialog * static void on_entry_invalid_account_title_character (ModestValidatingEntry *self, const gchar* character, gpointer user_data) { - gchar *message = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), - "\\ / : * ? \" < > | ^"); - show_error (GTK_WIDGET (self), message); + gchar *tmp, *msg; + + tmp = g_strndup (account_title_forbidden_chars, ACCOUNT_TITLE_FORBIDDEN_CHARS_LENGTH); + msg = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), tmp); + + show_error (GTK_WIDGET (self), msg); + + g_free (msg); + g_free (tmp); } static void on_entry_invalid_fullname_character (ModestValidatingEntry *self, const gchar* character, gpointer user_data) { - gchar *message = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), - "< >"); - show_error (GTK_WIDGET (self), message); -} + gchar *tmp, *msg; + + tmp = g_strndup (user_name_forbidden_chars, USER_NAME_FORBIDDEN_CHARS_LENGTH); + msg = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), tmp); + + show_error (GTK_WIDGET (self), msg); + g_free (msg); + g_free (tmp); +} static void diff --git a/src/maemo/modest-maemo-global-settings-dialog.c b/src/maemo/modest-maemo-global-settings-dialog.c index f850350..d2a1d1a 100644 --- a/src/maemo/modest-maemo-global-settings-dialog.c +++ b/src/maemo/modest-maemo-global-settings-dialog.c @@ -277,7 +277,6 @@ modest_maemo_global_settings_dialog_new (void) return GTK_WIDGET(g_object_new(MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG, NULL)); } - /* * Creates the updating page */ @@ -351,7 +350,7 @@ create_updating_page (ModestMaemoGlobalSettingsDialog *self) g_signal_connect (ppriv->size_limit, "range_error", G_CALLBACK (on_range_error), self); caption = hildon_caption_new (size_group, _("mcen_fi_advsetup_sizelimit"), - ppriv->size_limit, + ppriv->size_limit, NULL, HILDON_CAPTION_MANDATORY); gtk_box_pack_start (GTK_BOX (vbox_limit), caption, FALSE, FALSE, MODEST_MARGIN_HALF); diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index ffe1cee..cf31c38 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -579,22 +579,25 @@ entry_insert_text (GtkEditable *editable, hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), NULL, _CS("ckdg_ib_maximum_characters_reached")); } else { - GtkWidget *ok_button; - GList *buttons; - - buttons = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (data)->action_area)); - ok_button = GTK_WIDGET (buttons->next->data); - - gtk_widget_set_sensitive (ok_button, - modest_text_utils_validate_folder_name (chars)); - g_list_free (buttons); - - /* Write the text in the entry */ - g_signal_handlers_block_by_func (editable, - (gpointer) entry_insert_text, data); - gtk_editable_insert_text (editable, text, length, position); - g_signal_handlers_unblock_by_func (editable, - (gpointer) entry_insert_text, data); + if (modest_text_utils_is_forbidden_char (*text, FOLDER_NAME_FORBIDDEN_CHARS)) { + /* Show an error */ + gchar *tmp, *msg; + + tmp = g_strndup (folder_name_forbidden_chars, + FOLDER_NAME_FORBIDDEN_CHARS_LENGTH); + msg = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), tmp); + hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), + NULL, msg); + g_free (msg); + g_free (tmp); + } else { + /* Write the text in the entry if it's valid */ + g_signal_handlers_block_by_func (editable, + (gpointer) entry_insert_text, data); + gtk_editable_insert_text (editable, text, length, position); + g_signal_handlers_unblock_by_func (editable, + (gpointer) entry_insert_text, data); + } } /* Do not allow further processing */ g_signal_stop_emission_by_name (editable, "insert_text"); diff --git a/src/maemo/modest-progress-bar-widget.c b/src/maemo/modest-progress-bar-widget.c index bb1ffd0..fd6708f 100644 --- a/src/maemo/modest-progress-bar-widget.c +++ b/src/maemo/modest-progress-bar-widget.c @@ -443,11 +443,11 @@ modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self, gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (priv->progress_bar), /* Deprecated */ GTK_PROGRESS_CONTINUOUS); gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar)); - printf ("debug: %s:\n undetermined progress (%i) changed (%i/%i) : %i\n", __FUNCTION__, - (int) priv->progress_bar, - done, - total, - priv->count); +/* printf ("debug: %s:\n undetermined progress (%i) changed (%i/%i) : %i\n", __FUNCTION__, */ +/* (int) priv->progress_bar, */ +/* done, */ +/* total, */ +/* priv->count); */ } else { gdouble percent = 0; if (total != 0) /* Avoid division by zero. */ @@ -456,11 +456,11 @@ modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self, gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar), percent); - printf ("debug: %s:\n determined progress (%i) changed (%i/%i) : %i\n", __FUNCTION__, - (int) priv->progress_bar, - done, - total, - priv->count); +/* printf ("debug: %s:\n determined progress (%i) changed (%i/%i) : %i\n", __FUNCTION__, */ +/* (int) priv->progress_bar, */ +/* done, */ +/* total, */ +/* priv->count); */ } /* Set text */ diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 51e340e..0bc5d5a 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -96,6 +96,19 @@ struct _url_match_t { NULL, "mailto:"}\ } +const gchar account_title_forbidden_chars[] = { + '\\', '/', ':', '*', '?', '\'', '<', '>', '|', '^' +}; +const gchar folder_name_forbidden_chars[] = { + '<', '>', ':', '\'', '/', '\\', '|', '?', '*', '^', '%', '$' +}; +const gchar user_name_forbidden_chars[] = { + '<', '>' +}; +const guint ACCOUNT_TITLE_FORBIDDEN_CHARS_LENGTH = G_N_ELEMENTS (account_title_forbidden_chars); +const guint FOLDER_NAME_FORBIDDEN_CHARS_LENGTH = G_N_ELEMENTS (folder_name_forbidden_chars); +const guint USER_NAME_FORBIDDEN_CHARS_LENGTH = G_N_ELEMENTS (user_name_forbidden_chars); + /* private */ static gchar* cite (const time_t sent_date, const gchar *from); static void hyperlinkify_plain_text (GString *txt); @@ -1083,10 +1096,8 @@ modest_text_utils_validate_folder_name (const gchar *folder_name) * with some extras */ guint len; - const gchar **cursor; - const gchar *forbidden_chars[] = { - "<", ">", ":", "\"", "/", "\\", "|", "?", "*", "^", "%", "$", NULL - }; + gint i; + const gchar **cursor = NULL; const gchar *forbidden_names[] = { /* windows does not like these */ "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", @@ -1106,9 +1117,9 @@ modest_text_utils_validate_folder_name (const gchar *folder_name) if (g_ascii_isspace(folder_name[0]) || g_ascii_isspace(folder_name[len - 1])) return FALSE; - /* cannot contain a forbidden char */ - for (cursor = forbidden_chars; cursor && *cursor; ++cursor) - if (strstr(folder_name, *cursor) != NULL) + /* cannot contain a forbidden char */ + for (i = 0; i < len; i++) + if (modest_text_utils_is_forbidden_char (folder_name[i], FOLDER_NAME_FORBIDDEN_CHARS)) return FALSE; /* cannot contain a forbidden word */ @@ -1379,3 +1390,36 @@ modest_text_utils_text_buffer_get_text (GtkTextBuffer *buffer) return g_string_free (result, FALSE); } + +gboolean +modest_text_utils_is_forbidden_char (const gchar character, + ModestTextUtilsForbiddenCharType type) +{ + gint i, len; + const gchar *forbidden_chars = NULL; + + /* We need to get the length in the switch because the + compiler needs to know the size at compile time */ + switch (type) { + case ACCOUNT_TITLE_FORBIDDEN_CHARS: + forbidden_chars = account_title_forbidden_chars; + len = G_N_ELEMENTS (account_title_forbidden_chars); + break; + case FOLDER_NAME_FORBIDDEN_CHARS: + forbidden_chars = folder_name_forbidden_chars; + len = G_N_ELEMENTS (folder_name_forbidden_chars); + break; + case USER_NAME_FORBIDDEN_NAMES: + forbidden_chars = user_name_forbidden_chars; + len = G_N_ELEMENTS (user_name_forbidden_chars); + break; + default: + g_return_val_if_reached (TRUE); + } + + for (i = 0; i < len ; i++) + if (forbidden_chars[i] == character) + return TRUE; + + return FALSE; /* it's valid! */ +} diff --git a/src/modest-text-utils.h b/src/modest-text-utils.h index 1c7fe41..64a5a4a 100644 --- a/src/modest-text-utils.h +++ b/src/modest-text-utils.h @@ -41,6 +41,14 @@ #define _FM(str) dgettext("hildon-fm",str) #define _CS(str) dgettext("hildon-common-strings",str) +/* Forbidden char arrays */ +extern const gchar account_title_forbidden_chars[]; +extern const gchar folder_name_forbidden_chars[]; +extern const gchar user_name_forbidden_chars[]; +extern const guint ACCOUNT_TITLE_FORBIDDEN_CHARS_LENGTH; +extern const guint FOLDER_NAME_FORBIDDEN_CHARS_LENGTH; +extern const guint USER_NAME_FORBIDDEN_CHARS_LENGTH; + /** * modest_text_utils_derived_subject: * @subject: a string which contains the original subject @@ -368,4 +376,13 @@ gchar * modest_text_utils_get_color_string (GdkColor *color); */ gchar * modest_text_utils_text_buffer_get_text (GtkTextBuffer *buffer); +typedef enum { + ACCOUNT_TITLE_FORBIDDEN_CHARS, + FOLDER_NAME_FORBIDDEN_CHARS, + USER_NAME_FORBIDDEN_NAMES, +} ModestTextUtilsForbiddenCharType; + +gboolean modest_text_utils_is_forbidden_char (const gchar character, + ModestTextUtilsForbiddenCharType type); + #endif /* __MODEST_TEXT_UTILS_H__ */ -- 1.7.9.5