Bonjour,

Je cherches à empêcher la destruction de ma fenêtre lors du clic sur la croix de fermeture. J'ai mis une demande de confirmation et si je répond non la fenêtre est détruite.

Par contre pour ceux qui ont lus mes posts precedents, mon prob de barre d'outil/menu fonctionne avec ce code.

La selection de B dans le menu active A et désactive B, la salection de A fait l'inverse. La croix (GTK_STOCK_QUIT)dans la barre d'outil correspond à B selectionné , quand on clique l'icone devient l'icone GTK_STOCK_NEW ) et l'éat du menu change.

J'ai essayé d'utiliser g_signal_connect_object à la place de g_signal_connect pour empêcher la destruction de ma fenetre, ça marche pas, mais je dois pas être loin.

voici le code :

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
 
 
#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
 
void routine_1();
void routine_2();
void routine_sortie();
void recreation_barre_outil();
 
GtkWidget 	*fenetre;
GtkWidget 	*text_view;
GtkWidget 	*scrollbar;
GtkWidget 	*box;
GtkWidget 	*barre_outil;
GtkTextBuffer *buffer;
GtkWidget 	*barre_menu;
GtkWidget	*menu;
GtkWidget	*menuitem_sousmenu_fichier,*menuitem_a,*menuitem_b, *menuitem_quit;
GtkWidget	*svg;
int			elements_barre_outil;
 
int main (int argc, char **argv)
{
 
 
	gtk_init (&argc, &argv);
 
	fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title (GTK_WINDOW (fenetre), "Test");
	gtk_window_set_default_size(GTK_WINDOW(fenetre), 640, 480); 
	g_signal_connect_object (G_OBJECT(fenetre),"delete-event",G_CALLBACK(routine_sortie),svg,1<<0);
	box=gtk_vbox_new(FALSE,5); 
   	gtk_container_add(GTK_CONTAINER(fenetre),box);
 
	barre_menu=gtk_menu_bar_new();
	menu=gtk_menu_new();
	menuitem_sousmenu_fichier=gtk_menu_item_new_with_label("Fichier");
	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_sousmenu_fichier),menu);
	gtk_menu_shell_append(GTK_MENU_SHELL(barre_menu),menuitem_sousmenu_fichier);
 
	menuitem_a=gtk_menu_item_new_with_label("A");
	g_signal_connect(G_OBJECT(menuitem_a),"activate",G_CALLBACK(routine_1),fenetre);
	gtk_menu_shell_append(GTK_MENU_SHELL(menu),menuitem_a);
 
	menuitem_b=gtk_menu_item_new_with_label("B");
	g_signal_connect(G_OBJECT(menuitem_b),"activate",G_CALLBACK(routine_2),fenetre);
	gtk_menu_shell_append(GTK_MENU_SHELL(menu),menuitem_b);
	gtk_widget_set_sensitive(menuitem_a,FALSE);
 
	menuitem_quit=gtk_menu_item_new_with_label("Quitter");
	g_signal_connect(G_OBJECT(menuitem_quit),"activate",G_CALLBACK(routine_sortie),fenetre);
	gtk_menu_shell_append(GTK_MENU_SHELL(menu),menuitem_quit);
 
	gtk_box_pack_start(GTK_BOX(box),barre_menu,FALSE,FALSE,0);
 
	barre_outil=gtk_toolbar_new();
	gtk_box_pack_start(GTK_BOX(box),barre_outil,FALSE,FALSE,0);
	gtk_toolbar_insert_stock(GTK_TOOLBAR(barre_outil),GTK_STOCK_STOP,NULL,NULL,routine_1,NULL,-1);	
	gtk_toolbar_insert_stock(GTK_TOOLBAR(barre_outil),GTK_STOCK_QUIT,NULL,NULL,routine_sortie,NULL,-1);	
	gtk_toolbar_set_style(GTK_TOOLBAR(barre_outil),GTK_TOOLBAR_ICONS);
	gtk_toolbar_set_icon_size(GTK_TOOLBAR(barre_outil),GTK_ICON_SIZE_MENU);
	elements_barre_outil=2;
 
	gtk_widget_show_all(fenetre);
  	gtk_main();
  	return 0;
}
 
void routine_1()
{
	gtk_widget_set_sensitive(menuitem_b,TRUE);
	gtk_widget_set_sensitive(menuitem_a,FALSE);
 
	elements_barre_outil=2;
	recreation_barre_outil();
 
	printf("routine 1 déclenchée\n");
}
 
void routine_2()
{
	gtk_widget_set_sensitive(menuitem_a,TRUE);
	gtk_widget_set_sensitive(menuitem_b,FALSE);
 
	elements_barre_outil=1;
	recreation_barre_outil();
 
	printf("routine 2 déclenchée\n");
 
}
 
void routine_sortie()
{
GtkWidget 		*demande_fermeture;
GtkResponseType reponse_fermeture;
 
	demande_fermeture=gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
                                   GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
                                   "Etes-vous sur de vouloir quitter ?");
	gtk_window_set_title (GTK_WINDOW (demande_fermeture), "Confirmation");
	gtk_window_set_modal(GTK_WINDOW(demande_fermeture), TRUE);
	reponse_fermeture=gtk_dialog_run(GTK_DIALOG (demande_fermeture));
	gtk_widget_destroy(demande_fermeture);
	if (reponse_fermeture==GTK_RESPONSE_YES)
	{	
		gtk_main_quit();
	}
}
 
void recreation_barre_outil()
{
	gtk_widget_destroy(barre_outil);
	barre_outil=gtk_toolbar_new();
	gtk_box_pack_start(GTK_BOX(box),barre_outil,FALSE,FALSE,0);
	if (elements_barre_outil==2)
	gtk_toolbar_insert_stock(GTK_TOOLBAR(barre_outil),GTK_STOCK_STOP,NULL,NULL,routine_2,NULL,-1);	
	if (elements_barre_outil==1)
	gtk_toolbar_insert_stock(GTK_TOOLBAR(barre_outil),GTK_STOCK_NEW,NULL,NULL,routine_1,NULL,-1);	
	gtk_toolbar_set_style(GTK_TOOLBAR(barre_outil),GTK_TOOLBAR_ICONS);
	gtk_toolbar_set_icon_size(GTK_TOOLBAR(barre_outil),GTK_ICON_SIZE_MENU);	
	gtk_widget_show(barre_outil);
 
}