Bonjour,

J'ai quelques questions quant à l'utilisation du widget GtkSourceView. N'ayant trouvé aucun exemple sur l'utilisation de ce widget, je ne sais pas si mon code est correct, et si c'est la bonne façon de l'utiliser.

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
#include <gtk/gtk.h>
#include <gtksourceview/gtksourceview.h>
#include <gtksourceview/gtksourcelanguagemanager.h>
#include <gtksourceview/gtksourcelanguagemanager.h>
#include <gtksourceview/gtksourcebuffer.h>
 
 
int main (int argc, char ** argv)
{
    GtkWidget *window = NULL;
    GtkWidget *source_view = NULL;
    GtkWidget *scroll = NULL;
    GtkSourceBuffer *source_buffer = NULL;
    GtkSourceLanguage *lang = NULL;
    gchar *content_type = NULL;
    gboolean result_uncertain;
    gchar *content;
 
    gtk_init (&argc, &argv);
 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size (GTK_WINDOW(window), 320, 200);
    g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
    /* On détermine le type de fichier, pour la coloration syntaxique. */
    content_type = g_content_type_guess ("main.c", NULL, 0, &result_uncertain);
    if (result_uncertain)
    {
    	g_free (content_type);
	content_type = NULL;
    }
    /* On indique le type dde fichier au SourceBuffer */
    lang = gtk_source_language_manager_guess_language (
    		gtk_source_language_manager_get_default(), "main.c", content_type);
    source_buffer = gtk_source_buffer_new_with_language (lang);
 
    /* On charge le contenu du fichier */
    g_file_get_contents ("main.c", &content, NULL, NULL);
    gtk_text_buffer_insert_at_cursor (GTK_TEXT_BUFFER(source_buffer), content, -1);
    g_free (content);
 
    /* On crée le GtkSourceView à partir du GtkSourceBuffer */
    source_view = gtk_source_view_new_with_buffer (source_buffer);
    gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW(source_view), TRUE);
    gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW(source_view), TRUE);
 
    /* On ajoute des scrollbar */
    scroll = gtk_scrolled_window_new (NULL, NULL);
	       gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), source_view);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
    gtk_container_add (GTK_CONTAINER(window), scroll);
 
    gtk_widget_show_all (window);
 
    gtk_main ();
 
    return 0;
}
Pour charger le fichier dans le SourceView, j'ai utilisé le fait qu'un GtkSourceBuffer est un enfant de GtkTextBuffer. Je ne sais pas si c'est la bonne façon de procéder, et je suis sûr qu'il y a plus approprié, mais je n'ai rien trouvé.

Par ailleurs, j'ai un petit problème quant à l'indentation du code, celle ci n'est pas uniforme, par endroits, il me manque des morceau de tabulations, et les lignes ne sont pas alignées. Si j'ouvre le fichier avec gedit qui utilise aussi GtkSourceView, l'indentation est niquelle.

Donc, ben si quelqu'un connait bien ce widget, ça serait sympa
Merci