#include #include #include static gboolean key_event (GtkWidget *entry, GdkEvent * event) { if ((strlen (gtk_entry_get_text (GTK_ENTRY (entry))) < 3) && isdigit(event->key.keyval)) { // don't abort return FALSE; } // abort event gtk_signal_emit_stop_by_name (GTK_OBJECT (entry), "key_press_event"); return TRUE; } int main (int argc, char *argv[]) { GtkWidget *win; GtkWidget *entry; gtk_init (&argc, &argv); win = gtk_window_new (GTK_WINDOW_TOPLEVEL); entry = gtk_entry_new (); gtk_container_add (GTK_CONTAINER (win), entry); gtk_signal_connect (GTK_OBJECT (entry), "key_press_event", GTK_SIGNAL_FUNC (key_event), entry); gtk_widget_show_all (win); gtk_main (); return 0; }