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 :

GTK3 g_signal_connect notify::active g_param_spec_unref: assertion `G_IS_PARAM_SPEC (pspec)' failed


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut GTK3 g_signal_connect notify::active g_param_spec_unref: assertion `G_IS_PARAM_SPEC (pspec)' failed
    Bonjour.
    Voici mon code incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define DO_SWITCH(name, val) \
        name = gtk_switch_new (); \
        gtk_switch_set_active (GTK_SWITCH(name), val); \
        g_signal_connect (name, "notify::active", G_CALLBACK (switch_value_changed), &val); \
        gtk_box_pack_start(GTK_BOX(box_h), name, TRUE, TRUE, 0);
     
    GtkWidget *lv_easy_sfl_switch;
     
    DO_SWITCH(lv_easy_sfl_switch, easy_level.showfirst_last_char)
    Le dernier argument est une structure à moi.
    Je n'ai pas d'avertissement à la compilation, le type est bien un pointer, seulement à l'exécution, si j'active mon switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GLib-GObject-CRITICAL **: g_param_spec_unref: assertion `G_IS_PARAM_SPEC (pspec)' failed
    Si quelqu'un a une solution je l'en remercie d'avance. Les G_IS_PARAM_SPEC j'ai regardé sur la doc, j'ai rien compris sur leur fonctionnement.
    Merci.

  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
    Le signal propre aux GtkSwitch au vu de la documentation officielle est "activate". D'où sors-tu "notify::active"?

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut
    J'ai essayé avec activate, la fonction callback n'a jamais été appelée ensuite.
    Il semblerai qu'il faille utiliser notify::active d'après la doc et gnome-online-accounts l'utilise mais je comprend pas le type d'argument envoyé et c'est pas exactement g_signal_connect mais g_signal_connect_data qu'ils utilisent.
    La doc dit :
    The "activate" signal
    void user_function (GtkSwitch *widget,
    gpointer user_data) : Action
    The ::activate signal on GtkSwitch is an action signal and emitting it causes the switch to animate. Applications should never connect to this signal, but use the notify::active signal.

    widget :
    the object which received the signal.
    user_data :
    user data set when the signal handler was connected.

  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
    Hum, en effet. Je n'ai pas pris le temps de tout lire. Mais ton callback est-il bien exécuté?

  5. #5
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut
    Non il n'est pas exécuté, j'ai juste mon erreur critique :
    GLib-GObject-CRITICAL **: g_param_spec_unref: assertion `G_IS_PARAM_SPEC (pspec)' failed

  6. #6
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Citation Envoyé par Spitfire 95 Voir le message
    Bonjour.
    Voici mon code incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define DO_SWITCH(name, val) \
        name = gtk_switch_new (); \
        gtk_switch_set_active (GTK_SWITCH(name), val); \
        g_signal_connect (name, "notify::active", G_CALLBACK (switch_value_changed), &val); \
        gtk_box_pack_start(GTK_BOX(box_h), name, TRUE, TRUE, 0);
     
    GtkWidget *lv_easy_sfl_switch;
     
    DO_SWITCH(lv_easy_sfl_switch, easy_level.showfirst_last_char)
    Le dernier argument est une structure à moi.
    Je n'ai pas d'avertissement à la compilation, le type est bien un pointer, seulement à l'exécution, si j'active mon switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GLib-GObject-CRITICAL **: g_param_spec_unref: assertion `G_IS_PARAM_SPEC (pspec)' failed
    Si quelqu'un a une solution je l'en remercie d'avance. Les G_IS_PARAM_SPEC j'ai regardé sur la doc, j'ai rien compris sur leur fonctionnement.
    Merci.
    En fait, les signaux du style "notify::foo" sont un peu particuliers. Le signal notify appartient à la classe GObject, et il est émis lorsqu'une propriété de l'objet en question est modifiée. (via g_object_set par exemple) Par exemple lorsqu'un objet émet le signal "notify::foo", ça veut dire que la propriété "foo" de l'objet a été modifiée.

    Le prototype du callback associé au signal "notify" est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void                user_function                      (GObject    *gobject,
                                                            GParamSpec *pspec,
                                                            gpointer    user_data)      : No Hooks
    Ce qui explique le warning de GObject.

    Plus d'info ici: http://developer.gnome.org/gobject/s...roperties.html

  7. #7
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut
    Merci, donc en fait tout était dû à un argument manquant :
    void switch_value_changed (GtkSwitch *swi, GParamSpec *pspec, int *value);

    Mon bug est résolu, merci à vous deux.
    Bon code

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

Discussions similaires

  1. Netwrix Change Notifier for Active Directory
    Par forum dans le forum Téléchargements
    Réponses: 0
    Dernier message: 19/06/2015, 17h09
  2. Assertion `__zone_len >= 5' failed.
    Par Dreyliciouss dans le forum Fortran
    Réponses: 2
    Dernier message: 06/08/2010, 11h30
  3. Réponses: 1
    Dernier message: 18/01/2010, 19h32
  4. assertion ou cin.fail
    Par warubi dans le forum SL & STL
    Réponses: 4
    Dernier message: 07/01/2007, 10h09
  5. [eclipse3.0.1] activer les assertions
    Par MicroPuce dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 15/04/2005, 15h52

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