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

时间:2014-04-03 10:56:44

标签: c gtk gtk3

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

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

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

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

  1. 如果我们没有为顶层或按钮注册任何回调,则按钮会随着顶层调整大小。(gtk默认调整所有子窗口小部件的大小按照顶层调整大小)
  2. 只要我们为顶层窗口注册一个configure_event回调,并从中返回true ..子按钮会在调整顶层大小时停止调整大小。但是当我们从此回调返回false时,按钮开始调整大小toplevel window.So必须有一些事件被传递到子按钮,它会自动调整按钮的大小。
  3. 现在有两个问题:

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

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

1 个答案:

答案 0 :(得分:0)

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