Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192123
  • 博文数量: 111
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 1240
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 07:46
文章分类

全部博文(111)

文章存档

2015年(2)

2014年(1)

2011年(1)

2010年(7)

2009年(100)

我的朋友

分类: LINUX

2009-08-23 08:25:45


转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静

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的回调函数里。

阅读(613) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~