有没有办法监控使用GTK3从小部件发出的所有信号?我知道event
信号是在事件发生之前发出的,但我不确定GTK术语中“事件”和“信号”之间的区别 - 因为这似乎不能捕获所有信号。
我知道GDK有一个函数gdk_set_show_events
,但这主要显示从操作系统发送到窗口的事件。是否有GTK3等价物?
答案 0 :(得分:1)
没有内置功能AFAIK,但我相信你可以自己一起破解:
使用g_signal_lookup获取gtype的所有信号ID。然后在实例的每个信号上使用g_signal_add_emission_hook来注册每当发出特定信号时要调用的钩子。在钩子函数内部,您通过*ihint
为您提供了信号ID,g_signal_query可以为您提供打印调试消息所需的所有信息。 (我没有测试它,但它应该工作)
请注意,遗憾的是,这不适用于使用G_SIGNAL_NO_HOOKS定义的信号。
答案 1 :(得分:0)
使用 g_signal_lookup 获取所有信号ID
比描述的要复杂一些。要使用 g_signal_lookup ,首先需要一个信号名称。如果要监视独立于对象类型的每个信号,首先需要列出特定实例类型的所有信号。这可以通过 g_signal_list_ids 安排,只需一个 GType 。要获得实例上发出的所有信号,您需要迭代此实例的所有父类型。您可以使用 g_type_parent 。
来完成此操作我自己构建了一些实用程序函数,为问题所针对的相同调试目的提供此功能。您可以使用gemu_glib_util_connect_to_all_signals将 GObject -instance的所有信号连接到Emission-Hook,或者将发射-Hook连接到 GtkWidget -instance及其所有子项与gemu_gtk_util_signal_connect_to_widget_children。