GTK+ 2.0 教學-信號的發射和傳播

信號發射是 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() 才影響信號的發射。停止發射,就使連接到這個信號的其它函式不繼續被呼叫。)

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *