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 :

Multiples GtkTextView, récupération du TextBuffer et fonctionnment interne de GTK+3.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut Multiples GtkTextView, récupération du TextBuffer et fonctionnment interne de GTK+3.
    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:
    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)) ;
    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... ???

    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:
    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.
    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.

    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.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    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:
    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)) ;
    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... ???
    La réponse à cette première question se trouve dans la documentation officielle :
    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.
    Comme le compteur de référence n'est pas incrémenté tu tiens entre tes mains le seul et unique pointeur sur le GtkTextBuffer du GtkTextView. Donc surtout pas de libération !

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Ouais,
    d'ailleurs j'ai effectuer des corrections en implémentant une structure qui contient les pointeurs sur le GtkTextView et GtkTextBuffer.
    Structure dont la valeur des membres ne sont changés que lors que l'on change de page courante dans le GtkNotebook.

    Ce qui faisait beaucoup de changements a travers tous le programme: fonctions de sauvegarde, recherche, etc...

    Merci pour la confirmation quand même.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/11/2007, 15h00
  2. Fonctionnement interne
    Par menzlitsh dans le forum Windows XP
    Réponses: 7
    Dernier message: 30/03/2006, 23h32
  3. Fonctionnement interne des outils de gestions de paquets
    Par Spoutnik dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/03/2006, 13h52
  4. Fonctionnement interne de l’OpengGL
    Par Ekinoks dans le forum OpenGL
    Réponses: 10
    Dernier message: 06/12/2005, 14h44
  5. Question sur le fonctionnement interne au moteur PHP
    Par Leviathan_72 dans le forum Langage
    Réponses: 3
    Dernier message: 25/11/2005, 01h17

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