2017-06-20 106 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不夠小,無法丟失此類控件。

或者可能不是!嘗試一下,看看它是如何發展的。

相關問題