diff options
Diffstat (limited to 'src/imports/platform')
12 files changed, 68 insertions, 24 deletions
diff --git a/src/imports/platform/platform.pri b/src/imports/platform/platform.pri index 1e300251..2227d89c 100644 --- a/src/imports/platform/platform.pri +++ b/src/imports/platform/platform.pri @@ -11,8 +11,7 @@ HEADERS += \ $$PWD/qquickplatformmenuitemgroup_p.h \ $$PWD/qquickplatformmenuseparator_p.h \ $$PWD/qquickplatformmessagedialog_p.h \ - $$PWD/qquickplatformstandardpaths_p.h \ - $$PWD/qquickplatformsystemtrayicon_p.h + $$PWD/qquickplatformstandardpaths_p.h SOURCES += \ $$PWD/qquickplatformcolordialog.cpp \ @@ -27,5 +26,12 @@ SOURCES += \ $$PWD/qquickplatformmenuitemgroup.cpp \ $$PWD/qquickplatformmenuseparator.cpp \ $$PWD/qquickplatformmessagedialog.cpp \ - $$PWD/qquickplatformstandardpaths.cpp \ - $$PWD/qquickplatformsystemtrayicon.cpp + $$PWD/qquickplatformstandardpaths.cpp + + +qtConfig(systemtrayicon) { + HEADERS += \ + $$PWD/qquickplatformsystemtrayicon_p.h + SOURCES += \ + $$PWD/qquickplatformsystemtrayicon.cpp +} diff --git a/src/imports/platform/qquickplatformmenu.cpp b/src/imports/platform/qquickplatformmenu.cpp index 34a114f5..fbef8b8d 100644 --- a/src/imports/platform/qquickplatformmenu.cpp +++ b/src/imports/platform/qquickplatformmenu.cpp @@ -38,7 +38,6 @@ #include "qquickplatformmenubar_p.h" #include "qquickplatformmenuitem_p.h" #include "qquickplatformiconloader_p.h" -#include "qquickplatformsystemtrayicon_p.h" #include <QtCore/qloggingcategory.h> #include <QtGui/qicon.h> @@ -54,6 +53,10 @@ #include "widgets/qwidgetplatform_p.h" +#if QT_CONFIG(systemtrayicon) +#include "qquickplatformsystemtrayicon_p.h" +#endif + QT_BEGIN_NAMESPACE /*! @@ -173,8 +176,10 @@ QPlatformMenu * QQuickPlatformMenu::create() m_handle = m_menuBar->handle()->createMenu(); else if (m_parentMenu && m_parentMenu->handle()) m_handle = m_parentMenu->handle()->createSubMenu(); +#if QT_CONFIG(systemtrayicon) else if (m_systemTrayIcon && m_systemTrayIcon->handle()) m_handle = m_systemTrayIcon->handle()->createMenu(); +#endif // TODO: implement ^ // - QCocoaMenuBar::createMenu() @@ -227,8 +232,10 @@ void QQuickPlatformMenu::sync() if (m_menuBar && m_menuBar->handle()) m_menuBar->handle()->syncMenu(m_handle); +#if QT_CONFIG(systemtrayicon) else if (m_systemTrayIcon && m_systemTrayIcon->handle()) m_systemTrayIcon->handle()->updateMenu(m_handle); +#endif for (QQuickPlatformMenuItem *item : m_items) item->sync(); diff --git a/src/imports/platform/qquickplatformsystemtrayicon_p.h b/src/imports/platform/qquickplatformsystemtrayicon_p.h index c1eddcda..7aa07512 100644 --- a/src/imports/platform/qquickplatformsystemtrayicon_p.h +++ b/src/imports/platform/qquickplatformsystemtrayicon_p.h @@ -53,6 +53,8 @@ #include <QtQml/qqmlparserstatus.h> #include <QtQml/qqml.h> +QT_REQUIRE_CONFIG(systemtrayicon); + QT_BEGIN_NAMESPACE class QQuickPlatformMenu; diff --git a/src/imports/platform/qtlabsplatformplugin.cpp b/src/imports/platform/qtlabsplatformplugin.cpp index 6a1d5210..bcb9ac98 100644 --- a/src/imports/platform/qtlabsplatformplugin.cpp +++ b/src/imports/platform/qtlabsplatformplugin.cpp @@ -52,8 +52,9 @@ #include "qquickplatformmenuseparator_p.h" #include "qquickplatformstandardpaths_p.h" - -#include "qquickplatformsystemtrayicon_p.h" +#if QT_CONFIG(systemtrayicon) +# include "qquickplatformsystemtrayicon_p.h" +#endif Q_DECLARE_METATYPE(QStandardPaths::StandardLocation) Q_DECLARE_METATYPE(QStandardPaths::LocateOptions) @@ -107,7 +108,9 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri) qRegisterMetaType<QStandardPaths::StandardLocation>(); qRegisterMetaType<QStandardPaths::LocateOptions>(); +#if QT_CONFIG(systemtrayicon) qmlRegisterType<QQuickPlatformSystemTrayIcon>(uri, 1, 0, "SystemTrayIcon"); +#endif } QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenu.cpp b/src/imports/platform/widgets/qwidgetplatformmenu.cpp index eddc7ccc..1aacb0ff 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenu.cpp +++ b/src/imports/platform/widgets/qwidgetplatformmenu.cpp @@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE QWidgetPlatformMenu::QWidgetPlatformMenu(QObject *parent) - : m_menu(new QMenu) + : m_tag(reinterpret_cast<quintptr>(this)), m_menu(new QMenu) { setParent(parent); @@ -69,6 +69,10 @@ void QWidgetPlatformMenu::insertMenuItem(QPlatformMenuItem *item, QPlatformMenuI QWidgetPlatformMenuItem *widgetBefore = qobject_cast<QWidgetPlatformMenuItem *>(before); m_menu->insertAction(widgetBefore ? widgetBefore->action() : nullptr, widgetItem->action()); + int index = m_items.indexOf(widgetBefore); + if (index < 0) + index = m_items.count(); + m_items.insert(index, widgetItem); } void QWidgetPlatformMenu::removeMenuItem(QPlatformMenuItem *item) @@ -77,6 +81,7 @@ void QWidgetPlatformMenu::removeMenuItem(QPlatformMenuItem *item) if (!widgetItem) return; + m_items.removeOne(widgetItem); m_menu->removeAction(widgetItem->action()); } @@ -87,17 +92,17 @@ void QWidgetPlatformMenu::syncMenuItem(QPlatformMenuItem *item) void QWidgetPlatformMenu::syncSeparatorsCollapsible(bool enable) { - Q_UNUSED(enable); + m_menu->setSeparatorsCollapsible(enable); } quintptr QWidgetPlatformMenu::tag() const { - return 0; + return m_tag; } void QWidgetPlatformMenu::setTag(quintptr tag) { - Q_UNUSED(tag); + m_tag = tag; } void QWidgetPlatformMenu::setText(const QString &text) @@ -163,24 +168,26 @@ void QWidgetPlatformMenu::dismiss() QPlatformMenuItem *QWidgetPlatformMenu::menuItemAt(int position) const { - Q_UNUSED(position); - return nullptr; + return m_items.value(position); } QPlatformMenuItem *QWidgetPlatformMenu::menuItemForTag(quintptr tag) const { - Q_UNUSED(tag); + for (QWidgetPlatformMenuItem *item : m_items) { + if (item->tag() == tag) + return item; + } return nullptr; } QPlatformMenuItem *QWidgetPlatformMenu::createMenuItem() const { - return nullptr; + return new QWidgetPlatformMenuItem; } QPlatformMenu *QWidgetPlatformMenu::createSubMenu() const { - return nullptr; + return new QWidgetPlatformMenu; } QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenu_p.h b/src/imports/platform/widgets/qwidgetplatformmenu_p.h index 2eea6470..1df9ef78 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenu_p.h +++ b/src/imports/platform/widgets/qwidgetplatformmenu_p.h @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE class QMenu; +class QWidgetPlatformMenuItem; class QWidgetPlatformMenu : public QPlatformMenu { @@ -91,7 +92,9 @@ public: QPlatformMenu *createSubMenu() const override; private: + quintptr m_tag; QScopedPointer<QMenu> m_menu; + QVector<QWidgetPlatformMenuItem *> m_items; }; QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp b/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp index c7576296..8519c899 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp +++ b/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp @@ -35,6 +35,7 @@ ****************************************************************************/ #include "qwidgetplatformmenuitem_p.h" +#include "qwidgetplatformmenu_p.h" #include <QtWidgets/qmenu.h> #include <QtWidgets/qaction.h> @@ -42,7 +43,7 @@ QT_BEGIN_NAMESPACE QWidgetPlatformMenuItem::QWidgetPlatformMenuItem(QObject *parent) - : m_action(new QAction) + : m_tag(reinterpret_cast<quintptr>(this)), m_action(new QAction) { setParent(parent); connect(m_action.data(), &QAction::hovered, this, &QPlatformMenuItem::hovered); @@ -60,12 +61,12 @@ QAction *QWidgetPlatformMenuItem::action() const quintptr QWidgetPlatformMenuItem::tag() const { - return 0; + return m_tag; } void QWidgetPlatformMenuItem::setTag(quintptr tag) { - Q_UNUSED(tag); + m_tag = tag; } void QWidgetPlatformMenuItem::setText(const QString &text) @@ -80,7 +81,8 @@ void QWidgetPlatformMenuItem::setIcon(const QIcon &icon) void QWidgetPlatformMenuItem::setMenu(QPlatformMenu *menu) { - m_action->setMenu(qobject_cast<QMenu *>(menu)); + QWidgetPlatformMenu *widgetMenu = qobject_cast<QWidgetPlatformMenu *>(menu); + m_action->setMenu(widgetMenu ? widgetMenu->menu() : nullptr); } void QWidgetPlatformMenuItem::setVisible(bool visible) @@ -113,10 +115,12 @@ void QWidgetPlatformMenuItem::setChecked(bool checked) m_action->setChecked(checked); } +#if QT_CONFIG(shortcut) void QWidgetPlatformMenuItem::setShortcut(const QKeySequence &shortcut) { m_action->setShortcut(shortcut); } +#endif void QWidgetPlatformMenuItem::setEnabled(bool enabled) { diff --git a/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h b/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h index 82398bb8..752f8a03 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h +++ b/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h @@ -76,11 +76,14 @@ public: void setRole(MenuRole role) override; void setCheckable(bool checkable) override; void setChecked(bool checked) override; +#if QT_CONFIG(shortcut) void setShortcut(const QKeySequence& shortcut) override; +#endif void setEnabled(bool enabled) override; void setIconSize(int size) override; private: + quintptr m_tag; QScopedPointer<QAction> m_action; }; diff --git a/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp b/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp index 1f851ba1..365692dc 100644 --- a/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp +++ b/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp @@ -71,7 +71,9 @@ bool QWidgetPlatformMessageDialog::show(Qt::WindowFlags flags, Qt::WindowModalit m_dialog->setIcon(static_cast<QMessageBox::Icon>(options->icon())); m_dialog->setText(options->text()); m_dialog->setInformativeText(options->informativeText()); +#if QT_CONFIG(textedit) m_dialog->setDetailedText(options->detailedText()); +#endif m_dialog->setStandardButtons(static_cast<QMessageBox::StandardButtons>(int(options->standardButtons()))); return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); diff --git a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp index 4ef1e423..1cdfcfde 100644 --- a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp +++ b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp @@ -78,11 +78,13 @@ void QWidgetPlatformSystemTrayIcon::updateToolTip(const QString &tooltip) void QWidgetPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu) { +#if QT_CONFIG(menu) QWidgetPlatformMenu *widgetMenu = qobject_cast<QWidgetPlatformMenu *>(menu); if (!widgetMenu) return; m_systray->setContextMenu(widgetMenu->menu()); +#endif } QRect QWidgetPlatformSystemTrayIcon::geometry() const diff --git a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h index 90abf97e..11ea5377 100644 --- a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h +++ b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h @@ -50,6 +50,8 @@ #include <QtGui/qpa/qplatformsystemtrayicon.h> +QT_REQUIRE_CONFIG(systemtrayicon); + QT_BEGIN_NAMESPACE class QSystemTrayIcon; diff --git a/src/imports/platform/widgets/widgets.pri b/src/imports/platform/widgets/widgets.pri index 84efd930..54ad7187 100644 --- a/src/imports/platform/widgets/widgets.pri +++ b/src/imports/platform/widgets/widgets.pri @@ -2,11 +2,14 @@ QT += widgets DEPENDPATH += $$PWD HEADERS += \ - $$PWD/qwidgetplatform_p.h \ - $$PWD/qwidgetplatformsystemtrayicon_p.h + $$PWD/qwidgetplatform_p.h -SOURCES += \ - $$PWD/qwidgetplatformsystemtrayicon.cpp +qtConfig(systemtrayicon) { + HEADERS += \ + $$PWD/qwidgetplatformsystemtrayicon_p.h + SOURCES += \ + $$PWD/qwidgetplatformsystemtrayicon.cpp +} qtConfig(colordialog) | qtConfig(filedialog) | qtConfig(fontdialog) | qtConfig(messagebox) { HEADERS += \ |