Bonjour,

J'ai un problème avec GtkSourceCompletion, de gtksourceview 2.10.x et 3.4.2, qui ne considère qu'une ligne sur deux pour faire sa liste de mots. Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
#define ABCD
#define ABCDE
Seul ABCD sera proposé en completion automatique.

Voici mon code, un fichier est chargé dans un textview avec fgets(), et ensuite un GtkSourceCompletionWords est enregistré sur le buffer du textview:
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
  textview_ea_h = gtk_text_view_new();
  GtkTextBuffer * buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview_ea_h));
 
    GtkTextIter start;
    GtkTextIter end;
    gchar read_buf[4097];
    FILE * file = fopen("ea.h","rb");
    fseek(file,0,SEEK_END);
    unsigned int len = ftell(file);
    rewind(file);
 
 
      gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(buf),&start);
      gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(buf),&end);
      gtk_text_buffer_delete(GTK_TEXT_BUFFER(buf), &start, &end);
 
      gchar * buf_utf8;
      while(fgets(read_buf,4097,file)) {
        gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(buf),&end);
        buf_utf8 = g_locale_to_utf8(read_buf, -1, NULL, NULL, NULL);
        gtk_text_buffer_insert(GTK_TEXT_BUFFER(buf), &end, buf_utf8, -1);
        g_free (buf_utf8);
      }
      gtk_text_buffer_set_modified (GTK_TEXT_BUFFER (buf), TRUE);
      fclose(file);
 
  source_completion_words_ea_h = gtk_source_completion_words_new("ea.h", NULL);
  gtk_source_completion_words_register(source_completion_words_ea_h, GTK_TEXT_BUFFER(buf));
A un autre endroit du programme, j'ajoute source_completion_words_ea_h comme provider de mots:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
  l->source_completion = gtk_source_view_get_completion(GTK_SOURCE_VIEW(l->editor));
  GError *error = NULL;
  gtk_source_completion_add_provider(l->source_completion,GTK_SOURCE_COMPLETION_PROVIDER(source_completion_words_ea_h),&error);
  g_error_free(error);