当工具栏不够宽以显示其内容时,GTK Toolbar
可以显示溢出菜单。
如果工具栏包含由ComboBox
包裹的ToolItem
,则此功能似乎无效。
以下an example code演示了此问题。它是用Haskell编写的,但我想将其翻译成其他语言并不太难。
构建仓库的说明写在README.md。
中最后一个命令打开一个小GTK窗口。如果你把它做得更大,你会在窗口看到两个ComboBox
es。问题是如果你使窗口变窄一点,那么即使ComboBox
被启用,右toolbarShowArrow
也会消失并且不会出现溢出菜单。
(很遗憾,我没有足够的声誉在SO上发布两个截图,所以我将它们上传到了回购。)
有趣的是,如果我将Toolbar
的内容从ToolItem
更改为ToolButton
s,我会收到溢出菜单。
我还测试了3个包:GTK2为gtk
,GTK3为gtk3
,gobject内省为GTK3 gi-gtk
。所有这些都有同样的问题。
所以问题是:这个问题是否有解决办法?
答案 0 :(得分:0)
文档说明了这个about gtk_toolbar_set_show_arrow()
:
设置当
toolbar
没有空间容纳所有项目时是否显示溢出菜单。如果TRUE
,则通过溢出菜单可以获得没有空间的项目。
所以,这是一个“溢出菜单”。我不会厌烦你进入GTK +源码,但只需说:你添加到Toolbar
的项目需要提供菜单项以显示在溢出菜单中。听起来合乎逻辑,对吧? :d
ToolButtons
工作是因为他们使用set_proxy_menu_item()
来调用MenuItem
,专门为此目的创建。{/ p>
这就是Toolbar
在确定项目是否可以溢出时查找的内容:代理MenuItem
,它可以放入溢出菜单 - 并且只有当它找到至少一个时才有任何意义给箭头打开那个菜单。
因此,如果您有其他小部件,可以通过以下任意一种方式在ToolItem
上设置代理菜单项,将它们带入溢出菜单:
gtk_tool_item_set_proxy_menu_item()
即可设置特定商品::create-menu-proxy
上的ToolItem
信号,并在每次发布期间决定是否设置(或清除)代理项目当然,您还可以::activate
与MenuItem
关联ToolItem
以执行与原始MenuItem
相关的适当操作。
...尽管如果最终ToolItem
孩子是ComboBox
,您是否可以从ComboBox
执行任何有用的操作,这是一个不同的问题。它不会将其弹出菜单显示为您可以使用的内容。我猜您可以将MenuItem
的副本添加到Toolbar
并将其用作代理...但在这种情况下,您可能会超出溢出菜单的范围for,而且应该确保您的<?php
echo $variable;
?>
不会小到足以丢失此类控件。
或许不是!试一试,看看它是怎么回事。