信号发射是 GTK 为指定的物件和信号执行所有处理函式的过程。
首先,注意从信号发射传回的值是最后一个处理函式执行后传回的值。因为所有事件信号都是 GTK_RUN_LAST 型别,GTK 提供的处理函式将成为预设处理函式,除非你用 gtk_signal_connect_after() 设置连接。
一个事件 (如”button_press_event”) 的处理过程是:
- 从事件发生的元件开始。
- 发出通常的 “event” 信号。如果信号处理函式返回 TRUE 值,停止所有的处理。
- 否则,发出一个指定的,”button_press_event” 信号。如果它传回 TRUE,停止所有的处理。
- 否则,转到父元件,重复前两步。
- 继续直到某些信号处理函式传回 TRUE,或者直到达到了最顶层的元件。
上述问题的一些重点是:
- 如果信号有一个预设的处理函式,那么你的处理函式传回的值不起作用,除非你用 gtk_signal_connect_after() 设置连接。(译者注:这是因为预设处理函式最后执行,而信号发射的传回值取最后一个处理函式的传回值。)
- 为了阻止预设的信号处理函式运行,你需要用 gtk_signal_connect() 设置连接,并使用 gtk_signal_emit_stop_by_name() – 传回值之影响信号是否传播,不影响当前信号的发射。(译者注:也就是说,gtk_signal_emit_stop_by_name() 才影响信号的发射。停止发射,就使连接到这个信号的其它函式不继续被呼叫。)
1 則留言
Comments are closed.