Salut les GTK+,
Je suis en train de développer un éditeur de texte, dans un GtkNotebook, avec donc avec plusieurs instances du widget GtkTextView.
Et je me posait la question, comme a chaque fois que l'on change d'onglet, on change de GtkTextView et donc de GtkTextBuffer associé - Je doit donc récupéré les instances correspondant a l'onglet actuel.
Il y a donc dans mes fonctions associer a chaque GtkTextView des appels récurrent a:
Et je ne sais si je doit libéré le GtkTextBuffer après et même pas si celui-ci se conduit comme les GtkTextIter: c.a.d qu'il devient invalide a chaque changement du contenus du GtkTextView... ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 GtkWidget *notebook_page_child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(ref_notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(ref_notebook)) ; GtkTextBuffer *current_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(notebook_page_child)) ;
Pour préciser:
Pensez-vous que par exemple pour une fonction de recherche dans le GtkTextView courant, il faille incorporer le code de récupération du GtkTextBuffer dedans ou est-il suffisant de le mettre dans le callback du signal: "switch-page" du GtkNotebook qui est émis dès que l'utilisateur change de page, si l'on garde une référence au GtkTextBuffer courant dans une structure déclaré comme une variable globale, d'après vous ?
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 void search(GtkWidget *widget, gpointer user_data) { /** Getting current GtkTextView and GtkTextBuffer reference **/ GtkWidget *notebook_page_child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(ref_notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(ref_notebook)) ; GtkTextBuffer *current_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(notebook_page_child)) ; /** Processing search code. **/ return ; } void user_switch_page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data) { /** Getting current GtkTextView and GtkTextBuffer reference **/ GtkWidget *notebook_page_child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(ref_notebook), page_num) ; GtkTextBuffer *current_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(notebook_page_child)) ; return ; }
La question est donc: est-ce que le GtkTextBuffer reste valide ou se comporte comme les GtkTextIter qui deviennent invalide a chaque changement dans le GtkTextBuffer.
Je pose cette question bête car mon programme est presque terminé et que je redoute ce genre de changement de dernière minute ayant eu beaucoup de problèmes avec des crash dû a l'invalidité des GtkTextIter et peut-être justement aussi du GtkTextBuffer...
La réponse se trouve a moitié dans la doc:
Mais comme il y a plusieurs instances possible dont je ne maîtrise nie le nombre, nie l'instance actuel, je me voit plutôt garder ces appels.gtk_text_view_get_buffer()
GtkTextBuffer *gtk_text_view_get_buffer(GtkTextView *text_view);
Returns the GtkTextBuffer being displayed by this text view.
The reference count on the buffer is not incremented; the caller of this function won't own a new reference.
Je cherche une réponse concernant le fonctionnement interne de GTK+3 par exemple, si l'on alloue dynamiquement (par malloc) de la mémoire pour le texte d'un GtkLabel est-ce que l'on peut, doit libéré la mémoire demandée après que le GtkLabel soit détruit ou est-ce que GTK+3 s'en charge ?
Merci pour vos réponses éclairées.
Partager