aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/platform/qquickplatformdialog.cpp34
-rw-r--r--src/imports/platform/qquickplatformmenu.cpp9
-rw-r--r--src/imports/platform/qquickplatformmenuitem.cpp8
-rw-r--r--src/imports/platform/qquickplatformsystemtrayicon.cpp8
-rw-r--r--src/imports/platform/widgets/qwidgetplatform_p.h59
5 files changed, 65 insertions, 53 deletions
diff --git a/src/imports/platform/qquickplatformdialog.cpp b/src/imports/platform/qquickplatformdialog.cpp
index 6a772940..dee4335d 100644
--- a/src/imports/platform/qquickplatformdialog.cpp
+++ b/src/imports/platform/qquickplatformdialog.cpp
@@ -41,12 +41,7 @@
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickwindow.h>
-#ifdef QT_WIDGETS_LIB
-#include "widgets/qwidgetplatformcolordialog_p.h"
-#include "widgets/qwidgetplatformfiledialog_p.h"
-#include "widgets/qwidgetplatformfontdialog_p.h"
-#include "widgets/qwidgetplatformmessagedialog_p.h"
-#endif
+#include "widgets/qwidgetplatform_p.h"
QT_BEGIN_NAMESPACE
@@ -346,31 +341,6 @@ void QQuickPlatformDialog::componentComplete()
setParentWindow(findParentWindow());
}
-static QPlatformDialogHelper *createWidgetDialog(QPlatformTheme::DialogType type, QObject *parent)
-{
- QPlatformDialogHelper *dialog = nullptr;
-#ifdef QT_WIDGETS_LIB
- switch (type) {
- case QPlatformTheme::ColorDialog:
- dialog = new QWidgetPlatformColorDialog(parent);
- break;
- case QPlatformTheme::FileDialog:
- dialog = new QWidgetPlatformFileDialog(parent);
- break;
- case QPlatformTheme::FontDialog:
- dialog = new QWidgetPlatformFontDialog(parent);
- break;
- case QPlatformTheme::MessageDialog:
- dialog = new QWidgetPlatformMessageDialog(parent);
- break;
- default:
- Q_UNREACHABLE();
- break;
- }
-#endif
- return dialog;
-}
-
static const char *qmlTypeName(const QObject *object)
{
return object->metaObject()->className() + qstrlen("QQuickPlatform");
@@ -382,7 +352,7 @@ bool QQuickPlatformDialog::create()
if (useNativeDialog())
m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(m_type);
if (!m_handle)
- m_handle = createWidgetDialog(m_type, this);
+ m_handle = QWidgetPlatform::createDialog(m_type, this);
qCDebug(qtLabsPlatformDialogs) << qmlTypeName(this) << "->" << m_handle;
if (m_handle) {
onCreate(m_handle);
diff --git a/src/imports/platform/qquickplatformmenu.cpp b/src/imports/platform/qquickplatformmenu.cpp
index 3fb93be9..17d3b2ce 100644
--- a/src/imports/platform/qquickplatformmenu.cpp
+++ b/src/imports/platform/qquickplatformmenu.cpp
@@ -52,9 +52,7 @@
#include <QtQuick/qquickwindow.h>
#include <QtQuick/qquickitem.h>
-#ifdef QT_WIDGETS_LIB
-#include "widgets/qwidgetplatformmenu_p.h"
-#endif
+#include "widgets/qwidgetplatform_p.h"
QT_BEGIN_NAMESPACE
@@ -185,10 +183,9 @@ QPlatformMenu * QQuickPlatformMenu::create()
if (!m_handle)
m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenu();
-#ifdef QT_WIDGETS_LIB
if (!m_handle)
- m_handle = new QWidgetPlatformMenu;
-#endif
+ m_handle = QWidgetPlatform::createMenu();
+
qCDebug(qtLabsPlatformMenus) << "Menu ->" << m_handle;
if (m_handle) {
diff --git a/src/imports/platform/qquickplatformmenuitem.cpp b/src/imports/platform/qquickplatformmenuitem.cpp
index 3b5d0f6b..9f261d24 100644
--- a/src/imports/platform/qquickplatformmenuitem.cpp
+++ b/src/imports/platform/qquickplatformmenuitem.cpp
@@ -44,9 +44,7 @@
#include <QtGui/qpa/qplatformtheme.h>
#include <QtGui/private/qguiapplication_p.h>
-#ifdef QT_WIDGETS_LIB
-#include "widgets/qwidgetplatformmenuitem_p.h"
-#endif
+#include "widgets/qwidgetplatform_p.h"
QT_BEGIN_NAMESPACE
@@ -142,10 +140,8 @@ QPlatformMenuItem *QQuickPlatformMenuItem::create()
if (!m_handle)
m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem();
-#ifdef QT_WIDGETS_LIB
if (!m_handle)
- m_handle = new QWidgetPlatformMenuItem;
-#endif
+ m_handle = QWidgetPlatform::createMenuItem();
if (m_handle) {
connect(m_handle, &QPlatformMenuItem::activated, this, &QQuickPlatformMenuItem::triggered);
diff --git a/src/imports/platform/qquickplatformsystemtrayicon.cpp b/src/imports/platform/qquickplatformsystemtrayicon.cpp
index 39101f8a..70393c41 100644
--- a/src/imports/platform/qquickplatformsystemtrayicon.cpp
+++ b/src/imports/platform/qquickplatformsystemtrayicon.cpp
@@ -42,9 +42,7 @@
#include <QtGui/qpa/qplatformtheme.h>
#include <QtGui/private/qguiapplication_p.h>
-#ifdef QT_WIDGETS_LIB
-#include "widgets/qwidgetplatformsystemtrayicon_p.h"
-#endif
+#include "widgets/qwidgetplatform_p.h"
QT_BEGIN_NAMESPACE
@@ -176,10 +174,8 @@ QQuickPlatformSystemTrayIcon::QQuickPlatformSystemTrayIcon(QObject *parent)
m_handle(nullptr)
{
m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon();
-#ifdef QT_WIDGETS_LIB
if (!m_handle)
- m_handle = new QWidgetPlatformSystemTrayIcon(this);
-#endif
+ m_handle = QWidgetPlatform::createSystemTrayIcon(this);
qCDebug(qtLabsPlatformTray) << "SystemTrayIcon ->" << m_handle;
if (m_handle) {
diff --git a/src/imports/platform/widgets/qwidgetplatform_p.h b/src/imports/platform/widgets/qwidgetplatform_p.h
index 212900cf..06dcc9d3 100644
--- a/src/imports/platform/widgets/qwidgetplatform_p.h
+++ b/src/imports/platform/widgets/qwidgetplatform_p.h
@@ -49,22 +49,75 @@
//
#include <QtCore/qdebug.h>
-#include <QtWidgets/qapplication.h>
+#include <QtCore/qcoreapplication.h>
+#include <QtGui/qpa/qplatformtheme.h>
+#include <QtGui/qpa/qplatformdialoghelper.h>
+#include <QtGui/qpa/qplatformsystemtrayicon.h>
+#include <QtGui/qpa/qplatformmenu.h>
+
+#ifdef QT_WIDGETS_LIB
+#include "qwidgetplatformcolordialog_p.h"
+#include "qwidgetplatformfiledialog_p.h"
+#include "qwidgetplatformfontdialog_p.h"
+#include "qwidgetplatformmessagedialog_p.h"
+#include "qwidgetplatformmenu_p.h"
+#include "qwidgetplatformmenuitem_p.h"
+#include "qwidgetplatformsystemtrayicon_p.h"
+#endif
QT_BEGIN_NAMESPACE
+#ifndef QT_WIDGETS_LIB
+typedef QPlatformMenu QWidgetPlatformMenu;
+typedef QPlatformMenuItem QWidgetPlatformMenuItem;
+typedef QPlatformColorDialogHelper QWidgetPlatformColorDialog;
+typedef QPlatformFileDialogHelper QWidgetPlatformFileDialog;
+typedef QPlatformFontDialogHelper QWidgetPlatformFontDialog;
+typedef QPlatformMessageDialogHelper QWidgetPlatformMessageDialog;
+typedef QPlatformSystemTrayIcon QWidgetPlatformSystemTrayIcon;
+#endif
+
namespace QWidgetPlatform
{
static inline bool isAvailable(const char *type)
{
- if (!qobject_cast<QApplication *>(QCoreApplication::instance())) {
+ if (!qApp->inherits("QApplication")) {
qCritical("\nERROR: No native %s implementation available."
- "\nQt Labs Platform requires Qt Widgets on this platform."
+ "\nQt Labs Platform requires Qt Widgets on this setup."
"\nAdd 'QT += widgets' to .pro and create QApplication in main().\n", type);
return false;
}
return true;
}
+
+ template<typename T>
+ static inline T *createWidget(const char *name, QObject *parent)
+ {
+ static bool available = isAvailable(name);
+#ifdef QT_WIDGETS_LIB
+ if (available)
+ return new T(parent);
+#else
+ Q_UNUSED(parent)
+ Q_UNUSED(available)
+#endif
+ return nullptr;
+ }
+
+ static inline QPlatformMenu *createMenu(QObject *parent = nullptr) { return createWidget<QWidgetPlatformMenu>("Menu", parent); }
+ static inline QPlatformMenuItem *createMenuItem(QObject *parent = nullptr) { return createWidget<QWidgetPlatformMenuItem>("MenuItem", parent); }
+ static inline QPlatformSystemTrayIcon *createSystemTrayIcon(QObject *parent = nullptr) { return createWidget<QWidgetPlatformSystemTrayIcon>("SystemTrayIcon", parent); }
+ static inline QPlatformDialogHelper *createDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr)
+ {
+ switch (type) {
+ case QPlatformTheme::ColorDialog: return createWidget<QWidgetPlatformColorDialog>("ColorDialog", parent);
+ case QPlatformTheme::FileDialog: return createWidget<QWidgetPlatformFileDialog>("FileDialog", parent);
+ case QPlatformTheme::FontDialog: return createWidget<QWidgetPlatformFontDialog>("FontDialog", parent);
+ case QPlatformTheme::MessageDialog: return createWidget<QWidgetPlatformMessageDialog>("MessageDialog", parent);
+ default: Q_UNREACHABLE(); break;
+ return nullptr;
+ }
+ }
}
QT_END_NAMESPACE