Bonjour,
Je n'arrive pas à faire fonctionner des GtkRadioMenuItem, le programme plante lorsque je clique sur un menuitem. Voici le code de création des radio menu item:Et les callback:
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 menu_scheme_list = NULL; menuitem_s_classic = gtk_radio_menu_item_new_with_label (menu_scheme_list,"classic"); gtk_widget_show(menuitem_s_classic); gtk_container_add (GTK_CONTAINER (menu6), menuitem_s_classic); gtk_radio_menu_item_set_group(GTK_RADIO_MENU_ITEM (menuitem_s_classic),menu_scheme_list); menu_scheme_list = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM (menuitem_s_classic)); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem_s_classic), TRUE); g_signal_connect(G_OBJECT(menuitem_s_classic),"activate",G_CALLBACK(toggle_menuitem_s_classic),NULL); menuitem_s_cobalt = gtk_radio_menu_item_new_with_label (menu_scheme_list,"cobalt"); gtk_widget_show(menuitem_s_cobalt); gtk_container_add (GTK_CONTAINER (menu6), menuitem_s_cobalt); gtk_radio_menu_item_set_group(GTK_RADIO_MENU_ITEM (menuitem_s_cobalt),menu_scheme_list); menu_scheme_list = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM (menuitem_s_cobalt)); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem_s_cobalt), FALSE); g_signal_connect(G_OBJECT(menuitem_s_cobalt),"activate",G_CALLBACK(toggle_menuitem_s_cobalt),NULL);Quand je commente les lignes avec gtk_check_menu_item_set_active, le programme ne plante pas, mais l'ancien menuitem activé reste activé, et celui sur lequel j'ai cliqué ne s'active pas.
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
27
28
29 void toggle_menuitem_s_classic(GtkWidget *widget, gpointer p) { if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) { } else { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_s_classic),TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_s_cobalt),FALSE); LISTE_OPEN_FILES *l = liste_editor_open_files; while(l != NULL) { gtk_source_buffer_set_style_scheme(l->sBuf,s_classic); l = l->suiv; } } } void toggle_menuitem_s_cobalt(GtkWidget *widget, gpointer p) { if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) { } else { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_s_classic),FALSE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_s_cobalt),TRUE); LISTE_OPEN_FILES *l = liste_editor_open_files; while(l != NULL) { gtk_source_buffer_set_style_scheme(l->sBuf,s_cobalt); l = l->suiv; } } }
Partager