Escribir manejadores de señales

Para descubrir qué tipo de manejador de señales puede conectar a una señal, puede buscarlo en la documentación de referencia en el archivo de cabecera. Aquí hay un ejemplo de una declaración de señal que puede ver en las cabeceras de gtkmm:

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

Aparte del nombre de la señal (focus), hay otras dos cosas importantes que tener en cuenta aquí: el número que sigue a la palabra SignalProxy en el principio (1, en este caso), y los tipos en la lista (bool y Gtk::DirectionType). El número indica cuántos argumentos debe tener el manejador de señales; el primer tipo, bool, es el tipo que el manejador de señales debe devolver; y el tipo siguiente, Gtk::DirectionType, es el tipo del primer y único argumento de esta señal. Mirando la documentación de referencia, también puede ver los nombres de los argumentos.

Los mismos principios se aplican a las señales que tienen más argumentos. Aquí hay una con tres (tomada de <gtkmm/editable.h>):

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

Sigue la misma forma. El número 3 al final del nombre del tipo indica que el manejador de señales necesitará tres argumentos. El primer tipo en la lista es void, por lo que ese será el tipo que devolverá el manejador de señales. Los tres tipos siguientes son los de los argumentos, en orden. El prototipo de manejador de señales se podría ver así:

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