2017-06-20 96 views
2

GTK Toolbar当工具栏的宽度不足以显示其内容时,GTK Toolbar会显示溢出菜单。如何在GTK工具栏中显示ToolItems的溢出菜单

如果工具栏包含ToolItem s包含ComboBox es似乎此功能不起作用。

这里是an example code,它演示了这个问题。它是用Haskell编写的,但我认为把它翻译成其他语言不应该太困难。

构建回购的说明写在README.md

最后一个命令打开一个小的GTK窗口。如果你做得更大,你会在窗口中看到两个ComboBox es。问题是,如果您将窗口缩小一点,则右侧的ComboBox会消失,即使toolbarShowArrow已启用,也不会出现溢出菜单。

(不幸的是我没有对SO足够的声誉,所以我上传他们回购在这里发表两个截图)。

有趣的是,如果我改变ToolbarToolItem s的内容,以ToolButton S代表例如,我得到溢出菜单。

此外,我用3个软件包进行了测试:针对GTK2的gtk,针对GTK3的gtk3以及针对具有gobject内省功能的GTK3的gi-gtk。他们都有同样的问题。

所以问题是:有没有解决这个问题的方法?

回答

0

文档指出此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,每个发射期间,在决定是否要设置(或清除)代理项目

你会还的,当然,连接::activateMenuItem做一些适当的事情,与原来的ToolItem有关。

...但是如果最终的ToolItem孩子是ComboBox,是否可以从MenuItem做任何有用的工作是一个不同的问题。它不会将其弹出式菜单显示为可以使用的东西。我猜你可以将ComboBox的副本添加到MenuItem并将其用作代理...但在这种情况下,您可能已经超出了溢出菜单的含义范围,应该确保您的Toolbar不够小,无法丢失此类控件。

或者可能不是!尝试一下,看看它是如何发展的。

相关问题