L'émission du signal est le processus par lequel GTK+ exécute tous les gestionnaires d'un objet et signal spécifiques.
Tout d'abord, il faut noter que la valeur de retour d'une émission
de signal est la valeur de retour du dernier gestionnaire exécuté. Comme
les signaux d'évènements sont tous du type RUN_LAST
,
ce sera celle du gestionnaire implicite (fourni par GTK+), sauf si on utilise
la méthode connect_after
().
Voici la manière dont un évènement (par exemple "button_press_event") est géré :
Démarrer avec le widget où survient l'évènement.
Émettre le signal générique "event". Si le gestionnaire de signal
renvoit la valeur TRUE
, arrêter le traitement.
Autrement, émettre un signal spécifique "button_press_event". S'il
renvoit la valeur TRUE
, arrêter le traitement.
Autrement, aller au parent du widget et répéter les deux étapes précédentes.
Continuer jusqu'à ce qu'un des gestionnaires de signal renvoit
TRUE
, ou jusqu'à ce qu'on ait atteint le
widget de plus haut niveau.
Quelques conséquences de ce qui précéde :
la valeur de retour de notre gestionnaire peut n'avoir aucun
effet s'il existe un gestionnaire implicite à moins de le connecter
avec connect_after
(),
pour empêcher le gestionnaire implicite d'être exécuté, il faut
se connecter avec connect
() et utiliser
la méthode emit_stop_by_name
() - la
valeur de retour n'affecte que si le signal est propagé,
pas l'émission en cours.