absence de conversion de locale vers utf8 dans un code
Bonjour ! J'ai encore une question à propos du tuto GTK+ par l'exemple :mrgreen: : 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 :
Code:
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);
}
}
} |
dans le chapitre 9 :
Code:
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);
}
}
} |
le dernier code fait appel à cb_new():
Code:
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);
} |
D'autre part dans cb_new on voit qu'on utilise :
Code:
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 ?
Merci pour votre aide ! :D