偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.
全部博文(1750)
分类: LINUX
2009-02-06 14:05:56
1. 初始化时,GDK向mainloop注册一个事件源(gdkevents-x11.c:gdk_events_init),让mainloop挂到X Window的socket上。
2. GTK调用GDK的gdk_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_translate把Xevent转换成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的回调函数里。