créer et émettre gtk signal
Je suis en train de créer et d'émettre un GTK signal:
g_signal_new("child-finished",
G_TYPE_OBJECT,
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
NULL, //*** I think this is where I need to change it
G_TYPE_NONE, 0);
g_signal_connect(G_OBJECT(myWindow), "child-finished", G_CALLBACK(MyCallback), NULL);
Voici mon code qui émet le signal:
gtk_signal_emit_by_name(referenceToMyWindow, "child-finished");
Et voici mon code qui gère le signal:
void MyCallback(GtkWidget *w, GdkEvent *e)
{
//handler code here
}
Lorsque j'exécute le code, j'obtiens l'erreur suivante:
GLib-GObject-CRITICAL **: g
_closure_
invoquer: assertion `fermeture->le maréchal || fermeture->meta_marshal' a échoué
Je sais qu'il a quelque chose à voir avec le passage d'un marshaller à la g_signal_new
fonction, mais je ne sais pas ce qu'est un marshaller est, je ne peux pas comprendre la documentation, et les exemples en ligne sont peu et loin entre. Comment dois-je déclarer et de connecter mon propre signal?
OriginalL'auteur aaronstacy | 2009-10-12
Vous devez vous connecter pour publier un commentaire.
La GObject bibliothèque fournit quelques builtin marshallers, de sorte que votre code doit probablement être:
ou, si vous voulez la vérification du type:
Les paramètres du gestionnaire de signal doit être présent (l'objet en soi est implicite), alors assurez-vous de spécifier un pointeur (comme dans le premier exemple) ou d'une boîte de type (comme dans le deuxième exemple).
Si le marshaller vous avez besoin n'est pas présent dans les objets internes, vous pouvez utiliser le glib-genmarshal utilitaire ou directement le code par vous-même (il est assez trivial, juste la caisse de la sortie de glib-genmarshal).
OriginalL'auteur ntd