delete event和destroy信号

来源:互联网 发布:做视频软件下载 编辑:程序博客网 时间:2024/06/05 11:18

0. 有关g_signal和gtk_signal

    g_signal_emit之后,立即会调用g_signal_connect注册的回调函数。

    gtksignal也是gsignal, main_loop中收到xevent后,x_event->gdk_event  ->g_signal

 

    如delete_event和destroy两个gtk的信号实际定义如下:

   

   它们一个是GObject的信号(destroy),一个是widget的信号(delete_event)

 

1. delete event的产生

 (1) main_loop中收到x_event ClientMessage -->gdk_event GDK_CLIENT_EVENT

 

(2) gdk_event GDK_CLIENT_EVENT --> gdk_event GDK_DELETE

     当收到client event后, 通过函数gdk_wm_protocols_filter判断其为WM_DELETE_WINDOW后,会进到  gtk_main_do_event中:

 

 

(3)gdk_event GDK_DELETE -->g_signal DELETE_EVENT

 

2. destroy signal的产生过程

 (1)当gtk_widget_destroy(widget)调用后,gtk_object_destroy(object)被调用

(2)g_object_run_dispose

(3) 调用gtk Object的dispose函数gtk_object_dispose

GtkObject中, gobject_class->dispose= gtk_object_dispose

(4)上一步发出的DESTROY信号,gtk_object连接了一个默认的处理函数gtk_object_real_destroy

 

 

从上面的1(2)中的代码,可以看到,delete_event的回调函数返回FALSE时,gtk_widget_destroy会被调用,进而触发destroy信号的发出


原创粉丝点击