首页 文章

如何将gtk“configure-event”传播到自定义gtkwidget

提问于
浏览
1

我们在基于gtk的应用程序中有一个特定的场景,其中有一个包含gtkwidgets的顶层gtk窗口,它实际上是webkit创建的webview .

我们的用例是这样的,我们需要在隐藏顶层gtkwindow之后触发子窗口小部件(webview)的大小调整,因为应用程序从一个场景转换到另一个场景 . 这最终会导致调整大小仅在我们显示顶层窗口时发生,因为调整大小子窗口小部件的回调是使用size_allocate信号注册的,该信号仅在显示调用期间被释放 .

此问题的解决方法可能是我们为configure_event信号而不是size_allocate注册回调,因为即使窗口处于隐藏状态,也会发出configure_event信号 . (在size_allocate信号的情况下,信号被调度为仅在下一个show call,所以我们有一个图形麻烦,转换不是无缝的 . )现在,问题是configure_event仅为顶层窗口而不是子窗口小部件发出 .

我们测试了一个简单的gtk示例,其中我们创建了一个顶层窗口和一个按钮 . 以下观察我们可以做出:

  • 如果我们没有为toplevel或按钮注册任何回调,则按钮会随着toplevel一起调整大小 . (gtk默认调整所有子窗口小部件的大小,根据toplevel的调整大小)

  • 只要我们为顶层窗口注册一个configure_event回调,并从中返回true ..子按钮会在调整顶层大小时停止调整大小 . 但是当我们从此回调返回false时,按钮开始随顶层窗口一起调整大小因此,必须有一些事件被传递到子按钮,该按钮会自动调整按钮的大小 .

现在有两个问题:

  • 什么是传递给子窗口小部件的事件,返回false时没有到达窗口小部件?(我们没有为子窗口注册的configure_event获得任何回调)

  • 由于我们的案例有一个自定义webview小部件,它的行为与标准的gtk按钮小部件的行为不同,因为configure_event.So唯一的出路是知道我们注册了哪个事件,为它注册一个回调并调用自定义调整大小在该回调的webview小部件上 .

1 回答

  • 0

    回调的返回值很重要 . TRUE 具有 I handled this, do not propagte this event any further down the widget tree 的含义 . FALSE 进一步传播事件 . 它与任何其他事件无关 .

相关问题