La emisión de señales es el proceso por el cual GTK+ ejecuta todos los manejadores de una señal y un objeto específicos.
Debe tenerse en cuenta en primer lugar que el valor de retorno de una emisión de señal es el valor de retorno del último manejador ejecutado. Como las señales de eventos son todas del tipo RUN_LAST, este valor será el del manejador predeterminado (dado por GTK+) a menos que se use el método connect_after().
La forma en la que se trata un evento (por ejemplo "button_press_event") es:
Empezar con el control donde se produjo el evento.
Se emite para él la señal genérica "event". Si ese manejador devuelve un valor TRUE (verdadero) se detiene el procesamiento.
En otro caso, se emite una señal específica "button_press_event". Si ésta devuelve TRUE (verdadero) se detiene el procesamiento.
En caso contrario, se pasa al padre del control y se repiten los dos pasos anteriores.
Se continúa hasta que algún manejador devuelve TRUE, o hasta que se alcanza al control de más alto nivel.
Algunas consecuencias de lo anterior son:
El valor de retorno de tu manejador no tendrá efecto si hay un manejador predeterminado, a menos que lo conectes con connect_after().
Para evitar que se llame al manejador predeterminado, tienes que usar el método connect() y utilizar emit_stop_by_name() - el valor de retorno sólo afecta a si la señal se propaga, pero no a la emisión actual.