summaryrefslogtreecommitdiff
path: root/gtk/gtkspinbutton.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkspinbutton.c')
-rw-r--r--gtk/gtkspinbutton.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 1307119235..e806f85704 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -1182,8 +1182,11 @@ gtk_spin_button_insert_text (GtkEditable *editable,
gboolean sign;
gint dotpos = -1;
gint i;
- gchar pos_sign;
- gchar neg_sign;
+ GdkWChar pos_sign;
+ GdkWChar neg_sign;
+ guint entry_length;
+
+ entry_length = entry->text_length;
lc = localeconv ();
@@ -1197,16 +1200,27 @@ gtk_spin_button_insert_text (GtkEditable *editable,
else
pos_sign = '+';
- sign = ((strchr (entry->text, neg_sign) != 0) ||
- (strchr (entry->text, pos_sign) != 0));
+ for (sign=0, i=0; i<entry_length; i++)
+ if ((entry->text[i] == neg_sign) ||
+ (entry->text[i] == pos_sign))
+ {
+ sign = 1;
+ break;
+ }
if (sign && !(*position))
return;
- dotpos = strchr (entry->text, *(lc->decimal_point)) - entry->text;
-
+ for (dotpos=-1, i=0; i<entry_length; i++)
+ if (entry->text[i] == *(lc->decimal_point))
+ {
+ dotpos = i;
+ break;
+ }
+
if (dotpos > -1 && *position > dotpos &&
- spin->digits - entry->text_length + dotpos - new_text_length + 1 < 0)
+ spin->digits - entry_length
+ + dotpos - new_text_length + 1 < 0)
return;
for (i = 0; i < new_text_length; i++)
@@ -1220,8 +1234,8 @@ gtk_spin_button_insert_text (GtkEditable *editable,
else if (new_text[i] == *(lc->decimal_point))
{
if (!spin->digits || dotpos > -1 ||
- (new_text_length - 1 - i + entry->text_length - *position >
- spin->digits))
+ (new_text_length - 1 - i + entry_length
+ - *position > spin->digits))
return;
dotpos = *position + i;
}