检查GObject是否处理信号

问题描述 投票:0回答:1

[Gtk4] 在某个线程中,我更改了小部件的标签,然后调用窗口销毁函数。问题是,X11 后端在绘画功能上引发 BadAccess 错误。我需要检查 widget/gobject 的信号是否已处理,如果是,则延迟窗口销毁例程。

  1. 没有功能可以检查这一点。在Gtk3中我可以调用gtk_get_event_widget(gtk_get_current_event()),但是Gtk4更复杂并且需要使用事件控制器。如何正确使用它来检测widget信号是否被处理?

  2. 有没有办法使用在处理信号之前和之后以作为参数给出的小部件调用的任何回调?

谢谢。

gtk3 glib gobject gtk4
1个回答
0
投票

问题是方法错误。正确的问题是:“如何以不直接调用 GTK API 的方式从线程内部更新 UI,这是不可能的,因为只有旋转主循环的线程才能调用 GTK API?”

正确问题的答案是:使用

g_main_context_invoke()
将函数调用从线程安排到主循环中;构造一个数据结构来保存 UI 线程应使用的所有数据,并将其传递给调用的函数。

© www.soinside.com 2019 - 2024. All rights reserved.