GTK的訊息流說明(X Window做後端的情況)

李先靜發表於2020-04-06

1.         初始化時,GDKmainloop註冊一個事件源(gdkevents-x11.c:gdk_events_init),讓mainloop掛到X Windowsocket上。

 

2.         GTK呼叫GDKgdk_event_handler_set函式設定事件處理函式(gtkmain.c: do_pre_parse_initialization)gtk_main_do_event

 

3.         當有X Window事件過來時,mainloop呼叫事件源的事件分發函式gdk_event_dispatch

 

4.         gdk_event_dispatch中呼叫gdk_event_translateXevent轉換成GdkEvent,並放到Gdk的訊息佇列中。

 

5.         gdk_event_dispatch中從GDK的訊息佇列中取出事件,並呼叫gtk設定的事件處理函式gtk_main_do_event

 

6.         gtk_main_do_event中呼叫gtk_get_event_widget得到事件的Widget,然後呼叫相應widget函式。

 

7.         widget函式裡呼叫各控制元件過載的函式或者所註冊的事件處理函式。

 

8.         這樣,事件就到達了你所connect的回撥函式裡。

相關文章