[C][GTK] Problème de signal_connect

Problème de signal_connect [C][GTK] - C - Programmation

Marsh Posté le 20-04-2009 à 21:45:20    

Salut,  
 
Je travaille sur un petit programme en C en utilisant Gtk pour l'interface graphique.
J'ai un petit problème avec un textView, pour en modifier le contenu plus exactement...
L'initialisation se passe sans problème (wg est une structure contenant les pointeurs vers les widgets et la fenêtre principale):

Code :
  1. ...
  2. wg.chanData = gtk_text_view_new();
  3. wg.chanBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(wg.chanData));
  4. gtk_text_buffer_set_text(wg.chanBuffer, "Hello World\n", -1);
  5. ...


En dessous du textView j'ai une entry, et a l'activation je vérifie son contenu et je voudrais mettre a jour le textView:

Code :
  1. /* Fonction de gestion des commandes */
  2. void            handle_slashcmd(t_widgets *wg, char *buffer)
  3. {
  4.   t_fcts        fcts[] = SLASH_CMDS;
  5.   int           i;
  6.   i = 0;
  7.   while (fcts[i].cmd != NULL)
  8.     {
  9.       /* verifications et return si la commande existe */
  10.     }
  11.   /* On atterit ici si la commande n'existe pas */
  12.   gtk_text_buffer_insert_at_cursor(wg->chanBuffer, "Massive failure.\n", 17);
  13. }
  14. /* Fonction appelee par l'activate de l'entry */
  15. void            exec_cmd(GtkWidget *widget, GdkEvent *event, t_widgets *wg)
  16. {
  17.   const gchar   *buffer;
  18.   buffer = gtk_entry_get_text(GTK_ENTRY(widget));
  19.   if (buffer[0] == '/')
  20.     handle_slashcmd(wg, (char*)((int)buffer + 1));
  21.   else
  22.     send_msg(buffer);
  23.   gtk_entry_set_text(GTK_ENTRY(widget), "" );
  24. }


 
Le problème est que je me tape un segfault lors du "gtk_text_buffer_insert_at_cursor" dans handle_slashcmd() (ligne 13) ...
J'ai également essayé avec un set_text a la place, meme problème... De même en essayant de récuperer a nouveau le buffer avec text_view_get_buffer, etc...
Chose bizarre: si j'essaye d'ajouter directement du texte lors de l'initialisation du widget (apres le set_text du premier bout de code), aucun problème quelle que soit la methode utilisée...
 
Quelqu'un aurait-il une idée?
 
Merci :hello:


Message édité par Raziel le 21-04-2009 à 14:33:45
Reply

Marsh Posté le 20-04-2009 à 21:45:20   

Reply

Marsh Posté le 20-04-2009 à 23:00:18    

Après quelques tests il y a visiblement un ptit problème au niveau de l'envoi de l'adresse de la structure... J'ai changé le connect vu que gtk_signal_connect est déprécié.

Code :
  1. void            exec_cmd(GtkWidget *widget, t_widgets *wg)
  2. {
  3.    ...
  4. }
  5. ...
  6. g_signal_connect(G_OBJECT(wg.cmdEntry), "activate", G_CALLBACK(exec_cmd), &wg);


 
Seulement après debug l'adresse de wg n'est pas du tout la même dans la fonction qui initialise le connect et dans exec_cmd... Je ne vois pas comment ca se fait :/

Reply

Marsh Posté le 21-04-2009 à 14:14:03    

up!

Reply

Marsh Posté le 19-07-2012 à 23:21:23    

up. J'ai le même problème :/

Reply

Marsh Posté le 20-07-2012 à 10:04:15    

Passe à Qt :o

Reply

Marsh Posté le 20-07-2012 à 11:39:06    

Voilà :o


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 23-07-2012 à 08:51:36    

LoL :D
Je ne peux pas, j'utilise gstreamer qui utilise la glib.
Bon tfoisson j'ai trouvé mon problème : Je compilais avec une version de la lib et j'en utilisais une autre au runtime... honte sur moi :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed