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 :

Probleme avec les tags et mon buffer =(


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 47
    Points : 18
    Points
    18
    Par défaut Probleme avec les tags et mon buffer =(
    Bonjour voila je fais un editeur de texte, j'éssais d'implémenter a fonction bold ( mettre la poile en gras ), donc voila j'ai une structure accésible dans tous mes fichiers la voici :

    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
    typedef struct
    {
      gchar *chemin;
      gboolean sauve;
      GtkTextView *p_text_view;
      GtkTextBuffer *p_text_buffer;
    } document_t;
     
    typedef struct
    {
      GList *tous;
      document_t *actif;
      GtkWindow *p_main_window;
      GtkNotebook *p_notebook;
    } docs_t;
    extern docs_t docs;

    Et voici ma fonction bold :

    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
    void cb_bold (GtkWidget *p_widget, gpointer user_data)
    {
        GtkTextIter start;
        GtkTextIter end;
        gboolean res = FALSE;
     
        gtk_text_buffer_create_tag(docs.actif->p_text_buffer,"bold","weight", PANGO_WEIGHT_BOLD, NULL);
     
        res = gtk_text_buffer_get_selection_bounds (docs.actif->p_text_buffer,&start,&end);
     
        if(res)
        {
           gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,"bold",&start,&end);
        }
     
        //gtk_text_buffer_set_text(docs.actif->p_text_buffer,"test",4);
    }
    Sauf que voila quand je clique sur mon bouton mon apply crash sans rien dir ...

    J'ai mit comme test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_buffer_set_text(docs.actif->p_text_buffer,"test",4);
    Il modifie bien mon buffer et l'actualise correctement dans mon p_text_view donc je ne pense pas que cela vienne de ma structure.

    Apparemment ca serait la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,"bold",&start,&end);
    qui ferait crasher , mais je ne vois pas pourquoi je lui envois bien les arguments nécessaires


    Aide svp

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Citation Envoyé par SiOuZ Voir le message
    Apparemment ca serait la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,"bold",&start,&end);
    qui ferait crasher , mais je ne vois pas pourquoi je lui envois bien les arguments nécessaires
    Pour commencer, tu peux utiliser un débugueur pour en être sûr

    Le seul problème que je vois serait au niveau de la structure. Tu peux ajouter cette ligne pour savoir s'il y a un soucis (au début de la fonction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_return_if_fail (GTK_IS_TEXT_BUFFER (docs.actif->p_text_buffer));

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    En faite bizarement mon code compile pas sur mon pc à domicile ( à croire que le version svn de codeblocks est bien plus à jour que la derniere version stable )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,"bold",&start,&end);

    Codeblocks me renvoit cette erreur sur cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     passing argument 2 of ‘gtk_text_buffer_apply_tag’ from incompatible pointer type|
    Bon apparemment il aime pas mon "bold", mais je ne comprends pas vraiment pourquoi

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Bon c'est bon j'ai reglé mon probleme voici le bon code tout simplement

    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
    void cb_bold (GtkWidget *p_widget, gpointer user_data)
    {
        GtkTextIter start;
        GtkTextIter end;
        gboolean res = FALSE;
        GtkTextTag * p_tag = NULL;
     
     
    (GTK_TEXT_VIEW(docs.actif->p_text_view));
        p_tag = gtk_text_buffer_create_tag(docs.actif->p_text_buffer,"bold","weight", PANGO_WEIGHT_BOLD, NULL);
     
        res = gtk_text_buffer_get_selection_bounds (docs.actif->p_text_buffer,&start,&end);
     
        if(res)
        {
           gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,p_tag,& start,& end);
     
        }
     
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    En faite j'ai une nouvelle question

    Lorsque ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,p_tag,& start,& end);
    retourne une erreur car le tag est deja appliqué.

    Comment récuperer dans mon code que la fonction bloque ?? ( pour pouvoir ensuite enlever le tag ).

  6. #6
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par SiOuZ Voir le message
    En faite j'ai une nouvelle question

    Lorsque ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_buffer_apply_tag(docs.actif->p_text_buffer,p_tag,& start,& end);
    retourne une erreur car le tag est deja appliqué.

    Comment récuperer dans mon code que la fonction bloque ?? ( pour pouvoir ensuite enlever le tag ).
    SAlut! c'est pas très clair pour moi ce que tu dis. tu veux savoir si le tag est bien appliquée ou pas. ou bien tu veux savoir si la fonction ne n'est pas exécutée ce qui revient au fait que le tag n'est pas appliquée. c'est ce que tu veux savoir?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    En faite je veux savoir si le texte que jai selectionné donc mon p_text_buffer à deja été taggé ou non , j'espere que c'est un peu plus explicite la

  8. #8
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par SiOuZ Voir le message
    En faite je veux savoir si le texte que jai selectionné donc mon p_text_buffer à deja été taggé ou non , j'espere que c'est un peu plus explicite la
    SAlut! je ne sais pas trop si la soluce que je vais te donner est la bonne (parce que je ne l'ai jamais essayé) mais la voici:

    Je suppose que le fait le textbuffer soit taggé est une modification qui lui a été apporté. si c'est le cas, alors il te suffira de vérifier si le textbuffer a changé. cela peut se faire avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gboolean            gtk_text_buffer_get_modified        (GtkTextBuffer *buffer);
    Comme tu le vois, ça retourne un booléen. Si ça renvoie TRUE après tu ait taggé alors c'est que c'est bon sinon c'est le contraire. je pense qu'il faut aussi connaitre l'état du buffer(modifié ou ono) avant d'appliquer le tag. ça te permettra de vérifier. Essaie tout ça.

    Bonne suite

Discussions similaires

  1. [DOM] probleme avec les tags vides
    Par epeichette dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 20/01/2009, 15h04
  2. problem avec les buffer: taille max
    Par darckangel7 dans le forum Débuter
    Réponses: 2
    Dernier message: 05/12/2008, 23h42
  3. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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