From 6175fb4ff2441794dba3b0cc3e06834a5fafb2d0 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
Date: Mon, 16 Jun 2014 14:55:37 +0200
Subject: [PATCH] WelcomePage: Add QMAKE variable for QQuickWidget support

To use QQuickWidget in the welcomepage just run
qmake "USE_QUICK_WIDGET=true".

I also removed the commented code for the event filter.

Change-Id: Ic56527704c0664b3eff4fdf6bef17e250b72db46
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
---
 src/plugins/welcome/welcome.pro       |  6 ++++
 src/plugins/welcome/welcomeplugin.cpp | 48 +++++++++++++--------------
 2 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro
index 2305e923000..c99ae8d0114 100644
--- a/src/plugins/welcome/welcome.pro
+++ b/src/plugins/welcome/welcome.pro
@@ -1,5 +1,11 @@
+
 QT += quick
 
+!isEmpty(USE_QUICK_WIDGET) {
+    QT +=  quickwidgets
+    DEFINES += USE_QUICK_WIDGET
+}
+
 include(../../qtcreatorplugin.pri)
 
 HEADERS += welcomeplugin.h
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
index 283ab02b763..11d3e2a411b 100644
--- a/src/plugins/welcome/welcomeplugin.cpp
+++ b/src/plugins/welcome/welcomeplugin.cpp
@@ -47,7 +47,13 @@
 
 #include <QDir>
 
-#include <QtQuick/QQuickView>
+#ifdef USE_QUICK_WIDGET
+    #include <QtQuickWidgets/QQuickWidget>
+    typedef QQuickWidget QuickContainer;
+#else
+    #include <QtQuick/QQuickView>
+    typedef QQuickView QuickContainer;
+#endif
 #include <QtQml/QQmlContext>
 #include <QtQml/QQmlEngine>
 
@@ -104,7 +110,7 @@ private:
     void facilitateQml(QQmlEngine *engine);
 
     QWidget *m_modeWidget;
-    QQuickView *m_welcomePage;
+    QuickContainer *m_welcomePage;
     QList<QObject*> m_pluginList;
     int m_activePlugin;
 };
@@ -124,46 +130,40 @@ WelcomeMode::WelcomeMode() :
     setContextHelpId(QLatin1String("Qt Creator Manual"));
     setContext(Core::Context(Core::Constants::C_WELCOME_MODE));
 
-    m_welcomePage = new QQuickView;
-#if QT_VERSION >= 0x050300
-    connect(m_welcomePage, SIGNAL(sceneGraphError(QQuickWindow::SceneGraphError,QString)),
-            this, SLOT(sceneGraphError(QQuickWindow::SceneGraphError,QString)));
-#endif // Qt 5.3
-    m_welcomePage->setObjectName(QLatin1String("WelcomePage"));
-    m_welcomePage->setResizeMode(QQuickView::SizeRootObjectToView);
-
-//  filter to forward dragEnter events
-//    m_welcomePage->installEventFilter(this);
-//    m_welcomePage->viewport()->installEventFilter(this);
-
     m_modeWidget = new QWidget;
     m_modeWidget->setObjectName(QLatin1String("WelcomePageModeWidget"));
-    QVBoxLayout *layout = new QVBoxLayout;
+    QVBoxLayout *layout = new QVBoxLayout(m_modeWidget);
     layout->setMargin(0);
     layout->setSpacing(0);
 
+    m_welcomePage = new QuickContainer();
+    m_welcomePage->setResizeMode(QuickContainer::SizeRootObjectToView);
+
+    m_welcomePage->setObjectName(QLatin1String("WelcomePage"));
+
+#if QT_VERSION >= 0x050300
+    connect(m_welcomePage, SIGNAL(sceneGraphError(QQuickWindow::SceneGraphError,QString)),
+            this, SLOT(sceneGraphError(QQuickWindow::SceneGraphError,QString)));
+#endif // Qt 5.3
+
     Utils::StyledBar* styledBar = new Utils::StyledBar(m_modeWidget);
     styledBar->setObjectName(QLatin1String("WelcomePageStyledBar"));
     layout->addWidget(styledBar);
 
+#ifdef USE_QUICK_WIDGET
+    m_welcomePage->setParent(m_modeWidget);
+    layout->addWidget(m_welcomePage);
+#else
     QWidget *container = QWidget::createWindowContainer(m_welcomePage, m_modeWidget);
     m_modeWidget->setLayout(layout);
     layout->addWidget(container);
+#endif // USE_QUICK_WIDGET
 
     connect(PluginManager::instance(), SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject*)));
 
     setWidget(m_modeWidget);
 }
 
-//bool WelcomeMode::eventFilter(QObject *, QEvent *e)
-//{
-//    if (e->type() == QEvent::DragEnter) {
-//        e->ignore();
-//        return true;
-//    }
-//    return false;
-//}
-
 WelcomeMode::~WelcomeMode()
 {
     QSettings *settings = Core::ICore::settings();
-- 
GitLab