Bonjour à tous, je suis en ce moment en pleine conception d'un logiciel de modélisation UML ( traçage de différents diagrammes, rien de bien fou).
J'utilise donc GTK+ 2 et suis sous une distribution Fedora ( 20 - Heisenbug) , et mon soucis est le suivant :

Lors de l'ouverture d'un projet, j'ouvre les différents fichier ( les diagrammes ) avec un GTK NoteBook, ainsi j'ai un onglet par fichier ( a la maniere de codeblocks, sublim text etc ...) , cependant, si j'ajoute un fichier à mon projet, ou que j'ouvre un projet différent, j'aimerais supprimmer ou cacher (j'ai essayé les deux, gtk_widget_destroy ou gtk_idget_hide) les onglets présents, pour pouvoir faire apparaitre le nouveau notebook comprenant les onglets souhaités.

C'est ici que ça se gate, lorsque j'essaye de le détruire/cacher, j'ai toujours le même soucis, le message d'erreur me fait savoir que l'assertion à échoué ( gtk_widget_destroy: assertion 'GTK IS WIDGET(notebook) ' failed ) , si je comprends bien il ne considère pas mon NoteBook comme un widget, même en le castant avec un GTK_WIDGET(), cela ne change rien.

Voila, cela fait une petite semaine que je cherche une solution sans succès, je dois malheureusement rendre mon projet la semaine prochaine, je me dirige donc vers vous, en espérant pouvoir obtenir votre aide

Ci dessous ma fonction permettant la création de mon Notebook :

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
 
 
void createNoteBook(){
 
    GtkWidget * NotebookA = NULL ;
    GtkWidget * label = NULL;
    diapo * inter = NULL ;
    GtkWidget *table[10]; // Nous fixons la limite à 10 fichiers par projets
 
 
    int check = 0;
 
    inter = debut;   // Pointeur sur le début de notre liste chainée
    NotebookA = gtk_notebook_new();
    gtk_notebook_set_scrollable(GTK_NOTEBOOK(NotebookA), TRUE);
    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(NotebookA), GTK_POS_TOP);
 
    label = gtk_label_new(inter->name); // On stocke le nom de fichier qu'on retranscrira pour le titre de l'onglet
 
    while(inter!=NULL)
    {
 
        if(check == 0)
        {
            table[check] = gtk_table_new (20, 20, TRUE);
 
//On attache la bonne barre d'outil en fonction de l'extention
// La table retournée comprend maintenant une drawing area ainsi qu'une toolbar spécifique
            if((strstr(inter->name, ".use")))
            table[check] = createToolbarUsescases(table[check]);  
            if((strstr(inter->name, ".cls")))
            table[check]=createToolbarClass(table[check]);
            if((strstr(inter->name, ".tr")))
            table[check]=createToolbarState(table[check]);
 
 
 
            label = gtk_label_new(inter->name);
            gtk_notebook_append_page(GTK_NOTEBOOK(NotebookA),table[check],label);
            inter = inter->next;
            check++;
 
        }
        else
        {
            table[check] = gtk_table_new (20, 20, TRUE);
            label = gtk_label_new(inter->name);
 
            if((strstr(inter->name, ".use")))
            table[check] = createToolbarUsescases(table[check]);
            if((strstr(inter->name, ".cls")))
            table[check]=createToolbarClass(table[check]);
            if((strstr(inter->name, ".tr")))
            table[check]=createToolbarState(table[check]);
 
            label = gtk_label_new(inter->name);
            gtk_notebook_append_page(GTK_NOTEBOOK(NotebookA),table[check],label);
            inter = inter->next;
            check++;
        }
        if(check == 10)
        break;
 
    }
    gtk_table_attach_defaults(GTK_TABLE(mainWindow.table), NotebookA, 0, 20, 1, 20);
 
    gtk_widget_show_all(GTK_WIDGET(NotebookA));
}
Sur-ce, je vous souhaite une agréable journée, en vous remerciant d'avance !
Kintoki