Haskell 如何显示GTK工具栏中ToolItems的溢出菜单

Haskell 如何显示GTK工具栏中ToolItems的溢出菜单,haskell,gtk,gtk3,gtk2,Haskell,Gtk,Gtk3,Gtk2,GTK工具栏在工具栏宽度不足以显示其内容时会显示溢出菜单 如果工具栏包含由ToolItems包装的ComboBoxes,则此功能似乎不起作用 这是一个证明问题的例子。它是用Haskell写的,但我想把它翻译成其他语言应该不会太难 有关建立回购协议的说明,请参见 最后一个命令打开一个小的GTK窗口。如果将其放大,您将在窗口中看到两个组合框。问题是,如果将窗口缩小一点,即使启用了toolbarShowArrow,右侧的组合框也会消失,并且不会出现溢出菜单 (不幸的是,我没有足够的声誉,所以在这里发布

GTK
工具栏
在工具栏宽度不足以显示其内容时会显示溢出菜单

如果工具栏包含由
ToolItem
s包装的
ComboBox
es,则此功能似乎不起作用

这是一个证明问题的例子。它是用Haskell写的,但我想把它翻译成其他语言应该不会太难

有关建立回购协议的说明,请参见

最后一个命令打开一个小的GTK窗口。如果将其放大,您将在窗口中看到两个组合框。问题是,如果将窗口缩小一点,即使启用了
toolbarShowArrow
,右侧的
组合框也会消失,并且不会出现溢出菜单

(不幸的是,我没有足够的声誉,所以在这里发布了两个截图,所以我将它们上传到了回购协议上。)

有趣的是,例如,如果我将
工具栏
的内容从
工具项
s更改为
工具按钮
s,我会得到溢出菜单

我还用3个软件包对此进行了测试:
gtk
用于GTK2,
gtk3
用于gtk3,以及
gi gtk
用于gtk3的gobject内省。他们都有相同的问题


所以问题是:这个问题有什么解决办法吗?

文档中说明:

设置当
工具栏上没有空间容纳所有项目时,是否显示溢出菜单。如果
TRUE
,则没有空间的项目通过溢出菜单可用

所以,这是一个“溢出菜单”。我不会绕道进入GTK+源代码,但我只想说:添加到
工具栏的项目需要提供菜单项,以显示在其溢出菜单中。现在听起来合乎逻辑,对吧D

工具按钮
之所以有效,是因为它们使用专门为此目的创建的
菜单项调用
set\u proxy\u menu item()

这就是
Toolbar
在决定项目是否会溢出时所寻找的:proxy
MenuItem
s,它可以将其放入溢出菜单中,并且只有当它找到至少一个时,才有必要给出箭头以打开该菜单

因此,如果您有其他小部件,您可以通过在
工具项
上设置代理菜单项,将它们放入溢出菜单,方法如下:

  • 只需调用以设置特定项
  • 连接到
    ::在
    工具项
    上创建菜单代理
    信号,并在每次发射期间决定是否设置(或清除)代理项
当然,您还需要连接
::在
菜单项
上激活
,以执行与原始
工具项
相关的适当操作

…不过,如果最终的
工具项
子项是一个
组合框
,那么是否可以从
菜单项
中执行任何有用的操作则是另一个问题。它不会将其弹出菜单公开为您可以使用的内容。我想你可以在
菜单项中添加一个重复的
组合框
,并将其用作你的代理。。。但在这种情况下,很可能您超出了溢出菜单的功能范围,应该确保您的
工具栏
不会变得太小而丢失此类控件

也许不是!试一试,看看效果如何