macOS: don't show invisible separator items
Give QCocoaMenu access to the item's visibility property by adding a public getter, and respect that state when syncing the separator to the corresponding QCocoaNSMenuItems. Pick-to: 6.1 5.15 Fixes: QTBUG-88651 Change-Id: I7e238e5d3be141ec8f4e8f6f3ab22d761094d2d2 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>bb10
parent
b2e053072d
commit
a3f3af8a8f
|
|
@ -303,9 +303,13 @@ void QCocoaMenu::syncSeparatorsCollapsible(bool enable)
|
|||
|
||||
for (NSMenuItem *item in m_nativeMenu.itemArray) {
|
||||
if (item.separatorItem) {
|
||||
if (auto *cocoaItem = qt_objc_cast<QCocoaNSMenuItem *>(item).platformMenuItem)
|
||||
cocoaItem->setVisible(!previousIsSeparator);
|
||||
item.hidden = previousIsSeparator;
|
||||
// hide item if previous was a separator, or if it's explicitly hidden
|
||||
bool itemVisible = !previousIsSeparator;
|
||||
if (auto *cocoaItem = qt_objc_cast<QCocoaNSMenuItem *>(item).platformMenuItem) {
|
||||
cocoaItem->setVisible(!previousIsSeparator && cocoaItem->isVisible());
|
||||
itemVisible = cocoaItem->isVisible();
|
||||
}
|
||||
item.hidden = !itemVisible;
|
||||
}
|
||||
|
||||
if (!item.hidden) {
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ public:
|
|||
inline bool isMerged() const { return m_merged; }
|
||||
inline bool isEnabled() const { return m_enabled && m_parentEnabled; }
|
||||
inline bool isSeparator() const { return m_isSeparator; }
|
||||
inline bool isVisible() const { return m_isVisible; }
|
||||
|
||||
QCocoaMenu *menu() const { return m_menu; }
|
||||
MenuRole effectiveRole() const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue