Bonjour ! J'ai encore une question à propos du tuto GTK+ par l'exemple: dans le chapitre 8 on convertit le contents du codage locale vers utf8, tandis que dans la même fonction dans le chapitre 9 on ne le fait plus. La fonction a été un peu modifiée entre les deux chapitres, mais je ne comprends pas pourquoi il n'y a plus la conversion locale vers utf8...
dans le chapitre 8 :
dans le chapitre 9 :
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 static void open_file (const gchar *file_name, GtkTextView *p_text_view) { g_return_if_fail (file_name && p_text_view); { gchar *contents = NULL; if (g_file_get_contents (file_name, &contents, NULL, NULL)) { /* Copie de contents dans le GtkTextView */ gchar *utf8 = NULL; GtkTextIter iter; GtkTextBuffer *p_text_buffer = NULL; /* Pour l'instant il faut allouer la memoire, par la suite on modifiera simplement le pointeur */ docs.actif = g_malloc (sizeof (*docs.actif)); docs.actif->chemin = g_strdup (file_name); /* Pour l'instant, on se contente de stocker le seul GtkTextView qui existe, par la suite, il faudra en creer un nouveau ! */ docs.actif->p_text_view = p_text_view; /* Le document vient d'etre ouvert, il n'est donc pas modifie */ docs.actif->sauve = TRUE; p_text_buffer = gtk_text_view_get_buffer (p_text_view); gtk_text_buffer_get_iter_at_line (p_text_buffer, &iter, 0); utf8 = g_locale_to_utf8 (contents, -1, NULL, NULL, NULL); g_free (contents), contents = NULL; gtk_text_buffer_insert (p_text_buffer, &iter, utf8, -1); g_free (utf8), utf8 = NULL; } else { print_warning ("Impossible d'ouvrir le fichier %s\n", file_name); } } }
le dernier code fait appel à cb_new():
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 static void open_file (const gchar *file_name, GtkTextView *p_text_view) { g_return_if_fail (file_name && p_text_view); { gchar *contents = NULL; if (g_file_get_contents (file_name, &contents, NULL, NULL)) { /* Copie de contents dans le GtkTextView */ GtkTextIter iter; GtkTextBuffer *p_text_buffer = NULL; cb_new (NULL, p_text_view); gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE); p_text_buffer = gtk_text_view_get_buffer (p_text_view); gtk_text_buffer_get_iter_at_line (p_text_buffer, &iter, 0); gtk_text_buffer_insert (p_text_buffer, &iter, contents, -1); /* Nous sommes obliges de remetre sauve a TRUE car l'insertion du contenu du fichier dans le GtkTextView a appele cb_modfie */ docs.actif->sauve = TRUE; } else { print_warning ("Impossible d'ouvrir le fichier %s\n", file_name); } } }
D'autre part dans cb_new on voit qu'on utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void cb_new (GtkWidget *p_widget, gpointer user_data) { /* Pour l'instant il faut allouer la memoire, par la suite on modifiera simplement le pointeur */ docs.actif = g_malloc (sizeof (*docs.actif)); docs.actif->chemin = NULL; /* Pour l'instant, on se contente de stocker le seul GtkTextView qui existe, par la suite, il faudra en creer un nouveau ! */ docs.actif->p_text_view = GTK_TEXT_VIEW (user_data); /* Le document vient d'etre creer, il n'est donc pas modifie */ docs.actif->sauve = TRUE; gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE); }
donc pourquoi le remettre dans cb_open_file (dans le chapitre 9) alors qu'on fait appel à cb_new juste avant ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE);
Merci pour votre aide !![]()
Partager