1 2 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;
} |