6#include <QtCore/qloggingcategory.h>
11#include <QtGui/qpa/qplatformmenu.h>
12#include <QtGui/qpa/qplatformtheme.h>
13#include <QtGui/private/qguiapplication_p.h>
15#include <QtQuickTemplates2/private/qquickabstractbutton_p_p.h>
16#include <QtQuickTemplates2/private/qquickaction_p.h>
17#include <QtQuickTemplates2/private/qquickmenu_p_p.h>
18#include <QtQuickTemplates2/private/qquickmenuseparator_p.h>
19#include <QtQuickTemplates2/private/qquicknativeiconloader_p.h>
20#include <QtQuickTemplates2/private/qquicknativemenuitem_p.h>
21#include <QtQuickTemplates2/private/qquickshortcutcontext_p_p.h>
43 auto *menuItem = qobject_cast<QQuickMenuItem *>(nonNativeItem);
46 if (menuItem->action()) {
48 }
else if (menuItem->subMenu()) {
52 type = Type::MenuItem;
54 }
else if (qobject_cast<QQuickMenuSeparator *>(nonNativeItem)) {
55 type = Type::Separator;
59 parentMenu, nonNativeItem,
type));
60 if (
type == Type::Unknown) {
64 return nativeMenuItemPtr.release();
67 qCDebug(lcNativeMenuItem) <<
"attemping to create native menu item for"
68 << nativeMenuItemPtr->debugText();
70 nativeMenuItemPtr->m_handle.reset(parentMenuPrivate->handle->createMenuItem());
71 if (!nativeMenuItemPtr->m_handle)
73 if (!nativeMenuItemPtr->m_handle)
76 auto *nativeMenuItem = nativeMenuItemPtr.release();
81 nativeMenuItem->action(), [nativeMenuItem, parentMenu](){
82 nativeMenuItem->action()->trigger(parentMenu);
93 nativeMenuItem->subMenu())->handle.get());
102 menuItem, [menuItem](){
107 QQuickAbstractButtonPrivate::get(menuItem)->click();
116 case Type::Separator:
121 return nativeMenuItem;
125 QQuickNativeMenuItem::Type
type)
127 , m_parentMenu(parentMenu)
128 , m_nonNativeItem(nonNativeItem)
140 return m_type == Type::Action ? qobject_cast<QQuickMenuItem *>(m_nonNativeItem)->action() :
nullptr;
145 return m_type == Type::SubMenu ? qobject_cast<QQuickMenuItem *>(m_nonNativeItem)->subMenu() :
nullptr;
150 return m_type == Type::Separator ? qobject_cast<QQuickMenuSeparator *>(m_nonNativeItem) :
nullptr;
155 return m_handle.get();
160 if (m_type == Type::Unknown)
171 auto *menuItem = qobject_cast<QQuickMenuItem *>(m_nonNativeItem);
176 : menuItem && menuItem->isEnabled();
184 m_handle->setCheckable(checkable);
187 m_handle->setChecked(checked);
193 : menuItem ? menuItem->text() :
QString();
194 m_handle->setText(
text);
198 m_handle->setHasExclusiveGroup(
false);
208 const bool dprChanged = !
qFuzzyCompare(
window->devicePixelRatio(), menuPrivate->lastDevicePixelRatio);
217 subMenuPrivate->syncWithNativeMenu();
218 if (subMenuPrivate->handle)
219 m_handle->setMenu(subMenuPrivate->handle.get());
222#if QT_CONFIG(shortcut)
224 m_handle->setShortcut(
action->shortcut());
229 if (menuPrivate->handle)
230 menuPrivate->handle->syncMenuItem(m_handle.get());
233 qCDebug(lcNativeMenuItem) <<
"sync called on" <<
debugText() <<
"handle" << m_handle.get()
235 <<
"checked" << checked <<
"text" <<
text;
244 if (
const auto *menuItem = qobject_cast<QQuickMenuItem *>(m_nonNativeItem))
245 return menuItem->icon();
253 static int slot = staticMetaObject.indexOfSlot(
"updateIcon()");
269void QQuickNativeMenuItem::updateIcon()
274void QQuickNativeMenuItem::addShortcut()
276#if QT_CONFIG(shortcut)
288void QQuickNativeMenuItem::removeShortcut()
290#if QT_CONFIG(shortcut)
291 if (m_shortcutId == -1)
297 sequence =
action()->shortcut();
317 qobject_cast<QQuickMenuItem *>(m_nonNativeItem)->
text());
318 case Type::Separator:
329#include "moc_qquicknativemenuitem_p.cpp"
static QGuiApplicationPrivate * instance()
static QPlatformTheme * platformTheme()
The QKeySequence class encapsulates a key sequence as used by shortcuts.
bool isEmpty() const
Returns true if the key sequence is empty; otherwise returns false.
bool isCheckable() const
\qmlproperty bool QtQuick.Controls::Action::checkable
void checkedChanged(bool checked)
void checkableChanged(bool checkable)
void enabledChanged(bool enabled)
void textChanged(const QString &text)
void iconChanged(const QQuickIcon &icon)
bool isEnabled() const
\qmlproperty bool QtQuick.Controls::Action::enabled
bool isChecked() const
\qmlproperty bool QtQuick.Controls::Action::checked
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
void setIcon(const QQuickIcon &icon)
void setEnabled(bool enabled)
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Combined button and popup list for selecting options.
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
static bool isSeparator(char c)
#define qCDebug(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
GLenum GLenum GLsizei const GLuint GLboolean enabled
#define QStringLiteral(str)
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
static bool matcher(QObject *object, Qt::ShortcutContext context)