Bonjour,
J'ai quelques questions à propos du tuto sur les zones de texte ():

L'auteur écrit... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
//On recupere le buffer
text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
...dans le premier exemple de programme (début du code de la fonction "saisie"):
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
#include <gtk\gtk.h>
 
gboolean fin(GtkWidget *widget, GdkEvent *event, gpointer user_data);
void saisie(GtkButton *button, GtkWidget *view);
 
int main(int argc, char* argv[])
{
GtkWidget* window;
GtkWidget* box;
GtkWidget* text_view;
GtkWidget* button;
 
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 320, 200);
gtk_window_set_title(GTK_WINDOW(window), "XIII. Les zones de texte.");
g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),0);
 
box=gtk_vbox_new(FALSE,5);
gtk_container_add(GTK_CONTAINER(window),box);
 
text_view=gtk_text_view_new();
gtk_box_pack_start(GTK_BOX(box),text_view,TRUE,TRUE,0);
 
button=gtk_button_new_with_label("Afficher");
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(saisie),text_view);
 
gtk_widget_show_all(window);
 
gtk_main();
 
return 0;
}
 
gboolean fin(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
gtk_widget_destroy(widget);
gtk_main_quit();
 
return 0;
}
 
void saisie(GtkButton *button, GtkWidget *view)
{
GtkWidget *dialog;
GtkTextBuffer* text_buffer=0;
GtkTextIter start;
GtkTextIter end;
gchar* buf=0;
 
//On recupere le buffer
text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
//On recupere l'origine du buffer
gtk_text_buffer_get_start_iter(text_buffer,&start);
//On recupere la fin du buffer
gtk_text_buffer_get_end_iter(text_buffer,&end);
 
//On copie le contenu du buffer dans une variable
buf=gtk_text_buffer_get_text(text_buffer,&start, &end,TRUE);
 
//On affiche le texte dans une boite de dialogue.
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"Votre texte :\n%s", buf);
 
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
 
//On libere la memoire
g_free(buf);
}
Est-ce que ce n'est pas plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
D'ailleurs l'auteur l'écrit comme ça dans le second exemple de programme. Est-ce que ça change quelque chose ?

Sinon pour le second exemple on a:
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
void ouvrir_fichier(GtkWidget *bouton, GtkWidget *file_selection)
{
GtkTextBuffer *buffer;
GtkTextIter start;
GtkTextIter end;
FILE *fichier;
const gchar *chemin;
gchar lecture[1024];
 
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
 
chemin = gtk_file_selection_get_filename(GTK_FILE_SELECTION (file_selection));
fichier = fopen(chemin,"rt");
 
if(fichier == NULL)
{
GtkWidget *dialog;
 
dialog = gtk_message_dialog_new(GTK_WINDOW(file_selection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Impossible d'ouvrir le fichier : \n%s", g_locale_to_utf8(chemin, -1, NULL, NULL, NULL));
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
gtk_widget_destroy(file_selection);
 
return;
}
 
gtk_widget_destroy(file_selection);
 
gtk_text_buffer_get_start_iter(buffer,&start);
gtk_text_buffer_get_end_iter(buffer,&end);
gtk_text_buffer_delete(buffer, &start, &end);
 
while(fgets(lecture, 1024, fichier))
{
gtk_text_buffer_get_end_iter(buffer,&end);
gtk_text_buffer_insert(buffer, &end, g_locale_to_utf8(lecture, -1, NULL, NULL, NULL), -1);
}
 
fclose(fichier);
}
Pourquoi vider le contenu du buffer avant d'y ajouter le contenu du fichier qu'on a lu ? S'il contenait quelque chose ok, mais là il est vide...
Merci d'avance pour vos éclaircissements !