diff options
-rw-r--r-- | src/gui/kernel/qplatformmenu.h | 1 | ||||
-rw-r--r-- | src/platformsupport/dbusmenu/qdbusmenutypes.cpp | 5 | ||||
-rw-r--r-- | src/platformsupport/dbusmenu/qdbusplatformmenu.cpp | 6 | ||||
-rw-r--r-- | src/platformsupport/dbusmenu/qdbusplatformmenu_p.h | 5 | ||||
-rw-r--r-- | src/widgets/kernel/qaction.cpp | 1 | ||||
-rw-r--r-- | src/widgets/kernel/qactiongroup.cpp | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qmenu.cpp | 1 |
7 files changed, 16 insertions, 4 deletions
diff --git a/src/gui/kernel/qplatformmenu.h b/src/gui/kernel/qplatformmenu.h index 38481b4372..22848fcff6 100644 --- a/src/gui/kernel/qplatformmenu.h +++ b/src/gui/kernel/qplatformmenu.h @@ -87,6 +87,7 @@ public: virtual void setEnabled(bool enabled) = 0; virtual void setIconSize(int size) = 0; virtual void setNativeContents(WId item) { Q_UNUSED(item); } + virtual void setHasExclusiveGroup(bool hasExclusiveGroup) { Q_UNUSED(hasExclusiveGroup); } Q_SIGNALS: void activated(); diff --git a/src/platformsupport/dbusmenu/qdbusmenutypes.cpp b/src/platformsupport/dbusmenu/qdbusmenutypes.cpp index 03e14c57b2..fbd487aec7 100644 --- a/src/platformsupport/dbusmenu/qdbusmenutypes.cpp +++ b/src/platformsupport/dbusmenu/qdbusmenutypes.cpp @@ -184,9 +184,8 @@ QDBusMenuItem::QDBusMenuItem(const QDBusPlatformMenuItem *item) m_properties.insert(QLatin1String("children-display"), QLatin1String("submenu")); m_properties.insert(QLatin1String("enabled"), item->isEnabled()); if (item->isCheckable()) { - // dbusmenu supports "radio" too, but QPlatformMenuItem doesn't seem to - // (QAction would have an exclusive actionGroup) - m_properties.insert(QLatin1String("toggle-type"), QLatin1String("checkmark")); + QString toggleType = item->hasExclusiveGroup() ? QLatin1String("radio") : QLatin1String("checkmark"); + m_properties.insert(QLatin1String("toggle-type"), toggleType); m_properties.insert(QLatin1String("toggle-state"), item->isChecked() ? 1 : 0); } /* TODO support shortcuts diff --git a/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp b/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp index c813d8255b..70a908a9d6 100644 --- a/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp +++ b/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp @@ -61,6 +61,7 @@ QDBusPlatformMenuItem::QDBusPlatformMenuItem(quintptr tag) , m_isCheckable(false) , m_isChecked(false) , m_dbusID(nextDBusID++) + , m_hasExclusiveGroup(false) { menuItemsByID.insert(m_dbusID, this); } @@ -124,6 +125,11 @@ void QDBusPlatformMenuItem::setChecked(bool isChecked) m_isChecked = isChecked; } +void QDBusPlatformMenuItem::setHasExclusiveGroup(bool hasExclusiveGroup) +{ + m_hasExclusiveGroup = hasExclusiveGroup; +} + void QDBusPlatformMenuItem::setShortcut(const QKeySequence &shortcut) { m_shortcut = shortcut; diff --git a/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h b/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h index 0ff424ec9a..f8316ef89d 100644 --- a/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h +++ b/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h @@ -97,6 +97,8 @@ public: void setCheckable(bool checkable) Q_DECL_OVERRIDE; bool isChecked() const { return m_isChecked; } void setChecked(bool isChecked) Q_DECL_OVERRIDE; + bool hasExclusiveGroup() const { return m_hasExclusiveGroup; } + void setHasExclusiveGroup(bool hasExclusiveGroup) Q_DECL_OVERRIDE; QKeySequence shortcut() const { return m_shortcut; } void setShortcut(const QKeySequence& shortcut) Q_DECL_OVERRIDE; void setIconSize(int size) Q_DECL_OVERRIDE { Q_UNUSED(size); } @@ -123,7 +125,8 @@ private: bool m_isCheckable : 1; bool m_isChecked : 1; int m_dbusID : 16; - int m_reserved : 7; + bool m_hasExclusiveGroup : 1; + int m_reserved : 6; QKeySequence m_shortcut; }; diff --git a/src/widgets/kernel/qaction.cpp b/src/widgets/kernel/qaction.cpp index 72d6fffefd..718ecffcc9 100644 --- a/src/widgets/kernel/qaction.cpp +++ b/src/widgets/kernel/qaction.cpp @@ -612,6 +612,7 @@ void QAction::setActionGroup(QActionGroup *group) d->group = group; if(group) group->addAction(this); + d->sendDataChanged(); } /*! diff --git a/src/widgets/kernel/qactiongroup.cpp b/src/widgets/kernel/qactiongroup.cpp index 98ed132e95..7934ae1d90 100644 --- a/src/widgets/kernel/qactiongroup.cpp +++ b/src/widgets/kernel/qactiongroup.cpp @@ -196,6 +196,7 @@ QAction *QActionGroup::addAction(QAction* a) if (oldGroup) oldGroup->removeAction(a); a->d_func()->group = this; + a->d_func()->sendDataChanged(); } return a; } diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index ae20159473..514cb1a8c9 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -3231,6 +3231,7 @@ static void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem *i item->setShortcut(action->shortcut()); item->setCheckable(action->isCheckable()); item->setChecked(action->isChecked()); + item->setHasExclusiveGroup(action->actionGroup() && action->actionGroup()->isExclusive()); item->setFont(action->font()); item->setRole((QPlatformMenuItem::MenuRole) action->menuRole()); item->setEnabled(action->isEnabled()); |