[Previous] [Contents] [Next]
18. Advanced Event and Signal Handling
Connecting and Disconnecting Signal Handlers
FUNCTION gtk_signal_connect( object :
pGtkObject ; name : pgchar ;
func : GtkSignalFunc ;
name : pgchar ; func : pGtkSignalFunc ;
func_data : gpointer ) :
guint;
FUNCTION gtk_signal_connect_after( object :
pGtkObject ; name : pgchar ;
func : GtkSignalFunc ;
func_data : gpointer ) : guint;
FUNCTION gtk_signal_connect_object( object :
pGtkObject ; name : pgchar ;
func : GtkSignalFunc ;
slot_object : pGtkObject ) : guint;
FUNCTION gtk_signal_connect_object_after( object :
pGtkObject ; name : pgchar ;
func : GtkSignalFunc ;
slot_object : pGtkObject ) : guint;
FUNCTION gtk_signal_connect_full( object :
pGtkObject ; name : pgchar ;
func : GtkSignalFunc ;
marshall : GtkCallbackMarshal ; data : gpointer ;
destroy_func : GtkDestroyNotify ;
object_signal : gint ;
after : gint ) :
guint;
FUNCTION gtk_signal_connect_interp( object :
pGtkObject ; name : pgchar ;
func : GtkCallbackMarshal ;
data : gpointer ; destroy_func : GtkDestroyNotify ;
after : gint ) :
guint;
PROCEDURE gtk_signal_connect_object_while_alive( object :
pGtkObject ;
name : pgchar ;
func : GtkSignalFunc ;
alive_object : pGtkObject );
PROCEDURE gtk_signal_connect_while_alive( object :
pGtkObject ; signal : pgchar ;
func : GtkSignalFunc ;
func_data : gpointer ; alive_object : pGtkObject );
PROCEDURE gtk_signal_disconnect( object :
pGtkObject ; handler_id : guint );
PROCEDURE gtk_signal_disconnect_by_func( object :
pGtkObject ;
func : GtkSignalFunc ;
data : gpointer );
Blocking and Unblocking Signal Handlers
PROCEDURE gtk_signal_handler_block( object :
pGtkObject ; handler_id : guint );
PROCEDURE gtk_signal_handler_block_by_func( object :
pGtkObject ;
func : GtkSignalFunc ;
data : gpointer );
PROCEDURE gtk_signal_handler_block_by_data( object :
pGtkObject ; data : gpointer );
PROCEDURE gtk_signal_handler_unblock( object :
pGtkObject ; handler_id : guint );
PROCEDURE gtk_signal_handler_unblock_by_func( object :
pGtkObject ;
func : GtkSignalFunc ;
data : gpointer );
PROCEDURE gtk_signal_handler_unblock_by_data( object :
pGtkObject ;
data : gpointer );
Emitting and Stopping Signals
PROCEDURE gtk_signal_emit( object :
pGtkObject ; signal_id : guint ; ... );
PROCEDURE gtk_signal_emit_by_name( object :
pGtkObject ; name : pgchar ; ... );
PROCEDURE gtk_signal_emitv( object :
pGtkObject ; signal_id : guint ;
params : pGtkArg );
PROCEDURE gtk_signal_emitv_by_name( object :
pGtkObject ; name : pgchar ;
params : pGtkArg );
FUNCTION gtk_signal_n_emissions( object :
pGtkObject ; signal_id : guint ) :
guint;
FUNCTION gtk_signal_n_emissions_by_name( object :
pGtkObject ;
name : pgchar ) :
guint;
PROCEDURE gtk_signal_emit_stop( object :
pGtkObject ; signal_id : guint );
PROCEDURE gtk_signal_emit_stop_by_name( object :
pGtkObject ; name : pgchar );
[Previous] [Contents] [Next]
Signal emission is the process whereby GTK runs all handlers for a specific object and signal.
First, note that the return value from a signal emission is the return value of the last handler executed. Since
event signals are all of type GTK_RUN_LAST, this will be the default (GTK supplied) handler, unless you connect
with gtk_signal_connect_after().
The way an event (say button_press_event) is handled, is:
- Start with the widget where the event occured.
-
Emit the generic event signal. If that signal handler returns a value of TRUE,
stop all processing.
-
Otherwise, emit a specific, button_press_event signal. If that returns TRUE, stop
all processing.
- Otherwise, go to the widget's parent, and repeat the above two steps.
- Continue until some signal handler returns TRUE, or until the top-level widget is reached.
Some consequences of the above are:
-
Your handler's return value will have no effect if there is a default handler, unless you connect with
gtk_signal_connect_after().
-
To prevent the default handler from being run, you need to connect with gtk_signal_connect()
and use gtk_signal_emit_stop_by_name() - the return value only affects whether the
signal is propagated, not the current emission.
[Previous] [Contents] [Next]