[GTK/C] Callback et structures

Fermé
Ariane-M - 3 juin 2012 à 19:18
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 4 juin 2012 à 20:26
Bonjour à tous,

Je débute en GTK et j'ai beaucoup de mal à gérer l'utilisation de mes callbacks.
Je voudrais récupérer un texte saisi dans une gk_entry.
Je dispose de cette structure :

struct sObjets{
  GtkWidget *vbox_entry;
  GtkWidget *pEntry;
  GtkWidget *pValider;

  gchar *nom_saisi;
}; 


Je récupère le signal avec :
void callback_valider_nom(GtkWidget *widget, gpointer obj)
{
     struct sObjets *locale_obj = (struct sObjets *)obj;
     locale_obj->nom_joueur = gtk_entry_get_text(GTK_ENTRY(widget));

     printf("Vous avez choisi le nom %s", locale_obj->nom_joueur);

     gtk_widget_destroy(locale_obj->vbox_entry);
}


Tout ceci fonctionne, sauf que je n'arrive pas à récupérer le nom en dehors de cette fonction (ce qui paraît normal puisqu'on ne fait qu'une copie de la structure pour la traiter à l'intérieur du callback). Comment puis-je me servir de la chaîne récupérée dans le reste du programme ?

A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
4 juin 2012 à 20:26
Bonjour,
const gchar *gtk_entry_get_text(GtkEntry *entry);

Returns : a pointer to the contents of the widget as a string. This string points to internally allocated storage in the widget and must not be freed, modified or stored.
http://developer.gnome.org/gtk/2.24/GtkEntry.html#gtk-entry-get-text
Comme indiqué gtk_entry_get_text retourne un pointeur (une adresse vers les données contenues dans l'entry) il vous est alors possible de copier les données en utilisant ce pointeur dans un tableau de gchar ou char (c'est la même chose).
https://www.gtk.org/api/2.6/glib/glib-Basic-Types.html#gchar

Ce qui pourrait donner en gros :
void callback_valider_nom(GtkWidget *widget, gpointer obj)
{
     struct sObjets *locale_obj = (struct sObjets *)obj;
     gchar *ptr = gtk_entry_get_text(GTK_ENTRY(widget));
     locale_obj->nom_joueur = malloc(sizeof(gchar)*(strlen(ptr)+1));
     strcpy(locale_obj->nom_joueur,ptr);
     printf("Vous avez choisi le nom %s", locale_obj->nom_joueur);
     gtk_widget_destroy(locale_obj->vbox_entry);
}

nom_joueur est un tableau alloué faut pas oublier de le free ou realloc si modification etc
0