IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Faut'il libérer un GtkTextBuffer ?


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Par défaut Faut'il libérer un GtkTextBuffer ?
    Bonjour,

    J'ai fait un éditeur multi-fichiers. Quand l'utilisateur ferme un fichier, j'aimerais savoir si je doit libérer avec la fonction g_free(), ou une autre fonction, le GtkTextBuffer ou GtkSourceBuffer ?

    Comme j'utilise gtksourceview, la question est la même pour le GtkSourceLanguageManager et le GtkSourceLanguage, associé au buffer ?

    Je suppose aussi qu'il suffit d'appeler la fonction gtk_widget_destroy sur l'onglet pour que tous les widgets contenus dans l'onglet soient détruits eux-aussi ? Ou alors il faut les détruire séparément ?

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      g_free(sBuf); // libération du buffer texte
      g_free(lm); // libération du language manager
      g_free(language); // libération du langage
      gtk_widget_destroy(tab); // destruction de l'onglet et de tous les childs

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    GtkSourceView hérite de GtkTextView. Donc à priori il n'est pas besoin de libérer le GtkTextBuffer, sauf si c'est toi qui a fournit le GtkTextBuffer.

    Extrait de la doc. offcielle de la fonction gtk_text_view_set_buffer (); :
    void gtk_text_view_set_buffer (GtkTextView *text_view, GtkTextBuffer *buffer);

    Sets buffer as the buffer being displayed by text_view . The previous buffer displayed by the text view is unreferenced, and a reference is added to buffer . If you owned a reference to buffer before passing it to this function, you must remove that reference yourself; GtkTextView will not “adopt” it.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Par défaut
    Merci.

    Mais j'ai quand même un problème. A chaque fois que j'ouvre un nouvel onglet, la taille en mémoire de mon programme augmente. Par contre, quand je ferme un onglet, la taille en mémoire ne diminue pas. Résultat, au cours de l'utilisation, mon programme prend de plus en plus de place. L'augmentation de mémoire est minime, environ 0,2 Mo à chaque nouvel onglet, mais si il y a un moyen de régler le problème ?

    EDIT:
    En utilisant g_object_unref() au lieu de g_free(), ça marche mieux, mais la taille finit quand même par augmenter plus lentement.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Insères-tu un GtkTextBuffer perso ou bien utilises-tu celui créé par défaut lors de l'instanciation d'un GtkSourceView ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Par défaut
    J'insère un GtkTextBuffer perso, et je crée le GtkSourceView avec la fonction gtk_source_view_new_with_buffer(GtkSourceBuffer *buffer).

    A chaque onglet fermé, je détruit le buffer avec g_object_unref().

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bien. Je dirais alors que les 200Ko sont perdus par Gtk.

    D'autres pourront infirmer cette déclaration si je suis dans l'erreur.

Discussions similaires

  1. [dll] libérer une dll apres utilisation
    Par polo54 dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 11/07/2009, 22h48
  2. Faut t'il se specialiser ?
    Par vedder dans le forum Emploi
    Réponses: 14
    Dernier message: 17/07/2005, 12h54
  3. [download] que me faut-il ??
    Par terziann dans le forum Débuter
    Réponses: 2
    Dernier message: 03/07/2003, 15h58
  4. Réponses: 13
    Dernier message: 11/05/2003, 13h25
  5. Ce qu'il faut sous la main.
    Par ShinMei dans le forum DirectX
    Réponses: 2
    Dernier message: 18/01/2003, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo