[Glade-users] How to block some input in GtkEntry field
- From: ashats at hotmail.com (Arthur Shats)
- Subject: [Glade-users] How to block some input in GtkEntry field
- Date: Wed, 25 Aug 2010 23:38:39 +0000
Thank you guys for a very quick response. Please take a look at this code that I found under
library.gnome.org. This code forces all characters to uppercase, and limits the range of characters to A-Z. I
am doing very similar thing, only need to make sure I permit only digits and '.' (dots) at certain places so
to validate an IP address entry. However, I don't understand a few things here.
void insert_text_handler (GtkEntry *entry,
const gchar *text,
gint length,
gint *position,
gpointer data)
{
GtkEditable *editable = GTK_EDITABLE(entry);
int i, count=0;
gchar *result = g_new (gchar, length);
for (i=0; i < length; i++) {
if (!isalpha(text[i]))
continue;
result[count++] = islower(text[i]) ? toupper(text[i]) : text[i];
}
if (count > 0) {
g_signal_handlers_block_by_func (G_OBJECT (editable),
G_CALLBACK (insert_text_handler),
data);
gtk_editable_insert_text (editable, result, count, position);
g_signal_handlers_unblock_by_func (G_OBJECT (editable),
G_CALLBACK (insert_text_handler),
data);
}
g_signal_stop_emission_by_name (G_OBJECT (editable), "insert_text");
g_free (result);
}
What exactly are we blocking/unblocking with the calls to g_signal_handlers_block_by_func and
_unblock_by_func and why we need to do this?
Also, since we are typing char by char, the text argument seem to contain only one char at a time and the
length arg is 1 and so the result string is going to have only one char, so why do we need to have a loop?
I appreciate your help.
Thanks,
Arthur.
From: tadeboro at gmail.com
Date: Wed, 25 Aug 2010 22:39:32 +0200
Subject: Re: [Glade-users] How to block some input in GtkEntry field
To: axischire at gmail.com
CC: ashats at hotmail.com; glade-users at lists.ximian.com
Hi.
Validation should be done prior insertion (so you actually prevent
character from being inserted) like Cristobal said. You can do that by
connecting to GtkEditable::insert-text signal. If the input is
invalid, you simply stop emission of this signal using
g_signal_stop_emission_by_name(), which will cause default handler to
be skipped and text ignored.
Tadej
--
Tadej Borov?ak
tadeboro.blogspot.com
tadeboro at gmail.com
tadej.borovsak at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/glade-users/attachments/20100825/7ba0ec28/attachment-0001.html
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]