如何在GTK工具栏中显示ToolItems的溢出菜单
GTK Toolbar
当工具栏的宽度不足以显示其内容时,GTK Toolbar
会显示溢出菜单。如何在GTK工具栏中显示ToolItems的溢出菜单
如果工具栏包含ToolItem
s包含ComboBox
es似乎此功能不起作用。
这里是an example code,它演示了这个问题。它是用Haskell编写的,但我认为把它翻译成其他语言不应该太困难。
构建回购的说明写在README.md。
最后一个命令打开一个小的GTK窗口。如果你做得更大,你会在窗口中看到两个ComboBox
es。问题是,如果您将窗口缩小一点,则右侧的ComboBox
会消失,即使toolbarShowArrow
已启用,也不会出现溢出菜单。
(不幸的是我没有对SO足够的声誉,所以我上传他们回购在这里发表两个截图)。
有趣的是,如果我改变Toolbar
从ToolItem
s的内容,以ToolButton
S代表例如,我得到溢出菜单。
此外,我用3个软件包进行了测试:针对GTK2的gtk
,针对GTK3的gtk3
以及针对具有gobject内省功能的GTK3的gi-gtk
。他们都有同样的问题。
所以问题是:有没有解决这个问题的方法?
文档指出此about gtk_toolbar_set_show_arrow()
:
设置是否显示溢出菜单时
toolbar
没有空间上的所有项目。如果TRUE
,没有空间的项目通过溢出菜单可用。
因此,这是一个“溢出菜单”。我不会因为绕道GTK +来源而烦恼你,但可以这么说:你添加到Toolbar
的项目需要提供菜单项以显示在其溢出菜单中。听起来合乎逻辑吧? :D
ToolButtons
工作,因为他们叫set_proxy_menu_item()
与MenuItem
他们专门为此创建。
而这正是Toolbar
看起来决定项目是否可以溢出时:代理MenuItem
S,它可以放入溢出菜单 - 且仅当它找到至少一个是有没有给箭头,打开菜单中的任何一点。
所以,如果你有其他的小工具,可以让他们到溢出菜单设置您ToolItem
代理菜单项,通过任一:
- 简单地调用
gtk_tool_item_set_proxy_menu_item()
设置一个特定的项目 - 连接到
::create-menu-proxy
信号您ToolItem
,每个发射期间,在决定是否要设置(或清除)代理项目
你会还的,当然,连接::activate
就MenuItem
做一些适当的事情,与原来的ToolItem
有关。
...但是如果最终的ToolItem
孩子是ComboBox
,是否可以从MenuItem
做任何有用的工作是一个不同的问题。它不会将其弹出式菜单显示为可以使用的东西。我猜你可以将ComboBox
的副本添加到MenuItem
并将其用作代理...但在这种情况下,您可能已经超出了溢出菜单的含义范围,应该确保您的Toolbar
不够小,无法丢失此类控件。
或者可能不是!尝试一下,看看它是如何发展的。