Écriture de gestionnaires de signal

Pour savoir quel type de gestionnaire de signal vous pouvez connecter, regardez dans la documentation de référence ou dans le fichier d'en-tête. Voici un exemple de déclaration de signal que vous pouvez voir dans les fichiers d'en-tête de gtkmm :

Glib::SignalProxy1<bool, Gtk::DirectionType> signal_focus()

Outre le nom du signal (focus), deux choses sont importantes à noter ici : le nombre suivant le mot SignalProxy (1, dans notre cas), et les types de la liste (bool et Gtk::DirectionType). Le nombre indique le nombre de paramètres que le gestionnaire de signal doit posséder, le premier type, bool, est le type de retour du gestionnaire de signal et le suivant, Gtk::DirectionType, est le type du premier et unique paramètre de ce signal. En consultant la documentation de référence, vous pouvez également prendre connaissance des noms des arguments.

Les mêmes principes s'appliquent aux signaux avec plus de paramètres, voici un exemple avec trois paramètres (pris dans le fichier <gtkmm/editable.h>) :

Glib::SignalProxy3<void, const Glib::ustring&, int, int*> signal_insert_text()

Il est de la même forme. Le nombre 3 à la fin du nom du type indique que le gestionnaire de signal nécessite trois paramètres. Le premier type dans la liste des types est void, c'est le type de retour du gestionnaire de signal. Les trois types suivants sont les types des paramètres, dans l'ordre. Notre prototype de gestionnaire de signal ressemble à quelque chose comme :

void on_insert_text(const Glib::ustring& text, int length, int* position);