我们在基于gtk的应用程序中有一个特定的场景,其中有一个包含gtkwidgets的顶级gtk窗口,它实际上是由webkit创建的webview。
我们的用例是这样的,我们需要在隐藏顶层gtkwindow之后触发子窗口小部件(webview)的大小调整,因为应用程序从一个场景转换到另一个场景。 这最终会导致调整大小仅在我们显示顶层窗口时发生,因为调整大小子窗口小部件的回调是使用size_allocate信号注册的,该信号仅在show show期间被激活。
此问题的解决方法可能是我们为configure_event信号而不是size_allocate注册回调,因为即使窗口处于隐藏状态,也会发出configure_event信号。(在size_allocate信号的情况下,信号被安排得到仅在下一个show call中发出,所以我们有一个图形麻烦,转换不是无缝的。) 现在,问题是只为顶层窗口而不是子窗口小部件发出configure_event。
我们测试了一个简单的gtk示例,其中我们创建了一个顶层窗口和一个按钮。 根据观察我们可以做出:
现在有两个问题:
什么是传递给子窗口小部件的事件,返回false时没有到达窗口小部件?(我们没有为子窗口注册的configure_event回调)
由于我们的案例有一个自定义的webview小部件,它的行为与标准gtk按钮小部件的行为不同,因为configure_event.So唯一的出路是知道我们注册了哪个事件,为它注册一个回调并从该回调调用webview小部件上的自定义调整大小。
答案 0 :(得分:0)
回调的返回值很重要。 TRUE
具有I handled this, do not propagte this event any further down the widget tree
的含义。 FALSE
进一步传播事件。它与任何其他事件无关。