GTK+ 2.0 教学-深入探索信号处理函式

让我们来看一下函式 gtk_signal_connect() 的宣告。

gulong g_signal_connect( gpointer object, const gchar *name, GCallback func, gpointer func_data );

注意到传回值的型别 gulong 了吗?这是一个识别你的回呼函式的标签。前面讲过,每个信号和每个物件可以有多个回呼函式,并且它们会按设置的顺序依次运行。

利用这个标签,你可以用下面的函式从列表中删除这个回呼:

void g_signal_handler_disconnect( gpointer object, gulong id );

所以,通过传递你想在上面删除处理函式的元件,以及某个 signal_connect 函式传回的标签,你就可以中断一个信号处理函式的连接。

你也可以用 g_signal_handler_block() 和 g_signal_handler_unblock() 这类函式来暂时断开信号处理函式的连接。

void g_signal_handler_block( gpointer object, gulong id );
void g_signal_handlers_block_by_func( gpointer object, GCallback func, gpointer data );
void g_signal_handler_unblock( gpointer object, gulong id );
void g_signal_handlers_unblock_by_func( gpointer object, GCallback func, gpointer data );

1 則留言


Comments are closed.