Voila le problème si l'utilisateur entre une mauvaise saisie, j'aimerai corriger le contenu de ma GtkEntry à la volée.

j'ai une fonction de contrôle qui est appelée via l'evenement "change" donc a chaque nouveau caractère entré.

exemple 1 qui marche :

Si il entre un nombre décimal avec une virgule au lieu d'un point elle es automatiquement templacée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
gchar* saisie = (gchar*)gtk_entry_get_text(GTK_ENTRY(entry));
for(i = 0; saisie[i] != '\0'; i++) 
{ 
 if (saisie[i]== 44)// 44 = code ascii d'une virgule
		{
			saisie[i] = 46;//code ascii d'un point
			gtk_entry_set_text(GTK_ENTRY(entry), saisie);
		}
}
exemple 2 qui marche pas :

Si il entre un espace et que je n'autorise que des chiffres, j'aimerais effacer le dernier caractère entré.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
if (saisie[i]== 32)// 32 = code ascii d'un espace
{
	saisie[i] = 0;//code ascii du caractère NULL
	gtk_entry_set_text(GTK_ENTRY(entry), saisie);
}
mais ce code provoque une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Pango-CRITICAL **: pango_layout_get_cursor_pos: assertion `index >= 0 && index <= layout->length' failed
Je pense que c'est parce que le curseur se retrouve après le caractère de fin de chaine non? Comment faire pour supprimer le dernier caractère d'une chaine?
Quelle autre solution alors? j'ai pensé a sauvegardé a chaque fois la saisie dans une saisie temporaire à restituer en cas d'erreur mais ça ne marche pas non plus


Merci de votre aide.