| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 
 | #include <gtk/gtk.h>
 
void EntryChange(GtkEditable *editable, gpointer data)
 
{
 
	gchar *texte=NULL;								// texte récupéré du GtkEntry
	gchar *car=NULL;									// Caratère testé.
 
	const gchar *chaine="1234567890.";//chaine avec les valeurs désirées
 
 
	// On bloque l'écoute du GtkEntry. Evite un double appel.
 
	g_signal_handlers_block_by_func(editable, (gpointer)EntryChange,data);
 
	// Récupération du dernier caractère entré.
 
	texte=gtk_editable_get_chars(editable, 0, -1);
	car=texte+g_utf8_strlen(texte,-1)-1;
 
 
	if(!g_strrstr(chaine, car))
	{
		// Suppression de la lettre.
		gtk_editable_delete_text(editable, g_utf8_strlen(texte,-1)-1, -1);
 
	}
 
 
	// On autorise à nouveau l'écoute.
	g_signal_handlers_unblock_by_func(editable, (gpointer)EntryChange,data);
 
	g_free(texte);
 
}
 
int main(int argc, char **argv)
{
	GtkWidget *pWindow=NULL;
	GtkWidget *entry=NULL;
 
	gtk_init(&argc, &argv);
 
	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
 
	entry=gtk_entry_new();
	g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(EntryChange), NULL);
 
	gtk_container_add(GTK_CONTAINER(pWindow), entry);
 
	gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER_ALWAYS);	
	g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
 
	gtk_widget_show_all(pWindow); 
 
 
	gtk_main();
 
	return 0;
} |