delete event和destroy信号

本文深入探讨了GTK中的信号机制,包括g_signal_emit的工作原理及其如何触发注册的回调函数。详细解析了delete_event和destroy信号的生成过程,以及这些信号如何在GTK应用程序中被处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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信号的发出


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值