Bonjour,
Je fais appel a votre aide.
J'utilise Glade3;
J'ai défini 3 boutons dans une fenêtre.
-- 3 togglebuttonDo0 à togglebuttonDo3
Les signaux sont définis dans glade:
-- on_togglebuttonDo0_toggled à on_togglebuttonDo3_toggled
Mon programme possède les 3 routines suivantes:
Résultat à l'exécution en cliquant dans l'ordre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void* on_togglebuttonDo0_toggled(GtkWidget* ptrbutton,gpointer data) { printf("le bouton 0 a fonctionné.\n"); return 0; } void* on_togglebuttonDo1_toggled(GtkWidget* ptrbutton,gpointer data) { gdk_beep (); printf("le bouton 1 a fonctionné.\n"); return 0; } void* on_togglebuttonDo2_toggled(GtkWidget* ptrBouton,gpointer data) { GtkWidget *ptrBouton0=NULL; printf("le bouton 2 a fonctionné.\n"); /* L'appuie du bouton 2 doit simuler l'appuie du bouton 0. */ printf("-->1\n"); ptrBouton0= GTK_WIDGET(gtk_builder_get_object(p_builder,"togglebuttonDo0")); printf("-->2\n"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ptrBouton0),0); return 0; }
le bouton 0 a fonctionné.
le bouton 1 a fonctionné.
le bouton 2 a fonctionné.
-->1
Erreur de segmentation
Il me semble que l'erreur est dans l'utilisation de p_buider.
Pourtant il a bien fonctionné pour l'ouverture de ma fenêtre:
A moins qu'il sagit d'une histoire de Thread n'héritant pas de p_buider ou parce que mon bouton est contenu dans le Window1, je ne vois pas de raison au non fonctionnement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 GtkBuilder * p_builder = NULL; int chargeInterface(void) { GError * p_err = NULL; GtkWidget *mainwin; /* Creation d'un nouveau GtkBuilder */ p_builder = gtk_builder_new (); if (p_builder == NULL) return EXIT_FAILURE; /* Chargement du XML dans p_builder */ gtk_builder_add_from_file (p_builder, "interface.xml", & p_err); ... gtk_builder_connect_signals ( p_builder, NULL ); mainwin= GTK_WIDGET(gtk_builder_get_object(p_builder,"window1")); gtk_widget_show_all ( mainwin ); ...
Ne me dite pas que les routines de GTK me sont interdites dans une routine de callback !
Une idée ?
Partager