Skip to content

Commit 9f7fe69

Browse files
author
hekra
committed
replace QQuickView by QQuickWindow
1 parent fbf036d commit 9f7fe69

File tree

6 files changed

+147
-86
lines changed

6 files changed

+147
-86
lines changed

inc/extension_qt/quick2_view_executor.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <QtCore/QXmlStreamWriter>
2727
#include <QtQuick/QQuickView>
2828
#include <QtQuick/QQuickItem>
29+
#include <QtQuick/QQuickWindow>
2930

3031
namespace webdriver {
3132

@@ -137,15 +138,15 @@ class Quick2ViewCmdExecutor : public QWindowViewCmdExecutor {
137138
virtual void IsOnline(bool*, Error** error) NOT_SUPPORTED_IMPL;
138139

139140
protected:
140-
QQuickView* getView(const ViewId& viewId, Error** error);
141+
QQuickWindow* getView(const ViewId& viewId, Error** error);
141142
typedef QHash<QString, QQuickItem*> XMLElementMap;
142143

143144
QQuickItem* getElement(const ElementId &element, Error** error);
144-
QQuickItem* getFocusItem(QQuickView* view);
145+
QQuickItem* getFocusItem(QQuickWindow* view);
145146
bool FilterElement(const QQuickItem* item, const std::string& locator, const std::string& query);
146147
void FindElementsByXpath(QQuickItem* parent, const std::string &query, std::vector<ElementId>* elements, Error **error);
147148
void FindElements(QQuickItem* parent, const std::string& locator, const std::string& query, std::vector<ElementId>* elements, Error** error);
148-
void moveMouseInternal(QQuickView* view, QPointF& point);
149+
void moveMouseInternal(QQuickWindow* view, QPointF& point);
149150

150151
private:
151152
DISALLOW_COPY_AND_ASSIGN(Quick2ViewCmdExecutor);

src/Test/Headers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ int wd_setup(int argc, char *argv[])
164164
#elif defined(OS_POSIX)
165165
cmd_line.InitFromArgv(argc, argv);
166166
#endif
167-
167+
cmd_line.AppendSwitch("verbose");
168168
#ifndef QT_NO_SAMPLES
169169
/* optional samples setup */
170170
wd_samples_setup(widgetCreator, webCreator, qmlCreator, cmd_line);

src/webdriver/extension_qt/qml_view_util.cc

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ QWindow* QQmlViewUtil::getQWindowView(Session* session, const ViewId& viewId) {
9494
return qobject_cast<QWindow*>(qViewHandle->get());
9595
}
9696

97-
QQuickView* QQmlViewUtil::getQMLView(Session* session, const ViewId& viewId) {
97+
QQuickWindow* QQmlViewUtil::getQMLView(Session* session, const ViewId& viewId) {
9898
ViewHandle* viewHandle = session->GetViewHandle(viewId);
9999
if (NULL == viewHandle)
100100
return NULL;
@@ -103,8 +103,68 @@ QQuickView* QQmlViewUtil::getQMLView(Session* session, const ViewId& viewId) {
103103
if (NULL == qViewHandle)
104104
return NULL;
105105

106-
return qobject_cast<QQuickView*>(qViewHandle->get());
106+
return qobject_cast<QQuickWindow*>(qViewHandle->get());
107107
}
108+
109+
QQmlEngine* QQmlViewUtil::getQMLEngine(QQuickWindow* qquickWindow) {
110+
QQuickView* pView = qobject_cast<QQuickView*>(qquickWindow);
111+
112+
if (pView != NULL)
113+
return pView->engine();
114+
115+
QQuickWindow* pWin = qobject_cast<QQuickWindow*>(qquickWindow);
116+
117+
if (pView != NULL) {
118+
QQuickItem* item = pWin->contentItem();
119+
return QQmlEngine::contextForObject(item)->engine();
120+
}
121+
122+
return NULL;
123+
}
124+
125+
void QQmlViewUtil::setSource(const QUrl &url, bool sync, QQuickWindow* qquickWindow) {
126+
QQuickView* pView = qobject_cast<QQuickView*>(qquickWindow);
127+
128+
if (pView != NULL) {
129+
if (sync) {
130+
QEventLoop loop;
131+
QObject::connect(pView, SIGNAL(statusChanged(QQuickView::Status)),&loop,SLOT(quit()));
132+
pView->setSource(url);
133+
134+
if (QQuickView::Loading == pView->status()) {
135+
loop.exec();
136+
}
137+
} else {
138+
pView->setSource(url);
139+
}
140+
}
141+
else {
142+
// TODO async / sync mode
143+
QQmlEngine* engine = QQmlViewUtil::getQMLEngine(qquickWindow);
144+
QQmlApplicationEngine* appEngine = qobject_cast<QQmlApplicationEngine*>(engine);
145+
146+
if (appEngine != NULL) {
147+
appEngine->load(url);
148+
}
149+
}
150+
}
151+
152+
const QUrl QQmlViewUtil::getSource(QQuickWindow* qquickWindow) {
153+
QQuickView* pView = qobject_cast<QQuickView*>(qquickWindow);
154+
155+
if (pView != NULL) {
156+
return pView->source();
157+
}
158+
159+
QQmlEngine* engine = QQmlViewUtil::getQMLEngine(qquickWindow);
160+
QQmlApplicationEngine* appEngine = qobject_cast<QQmlApplicationEngine*>(engine);
161+
162+
if (appEngine != NULL) {
163+
return appEngine->baseUrl();
164+
}
165+
return QUrl();
166+
}
167+
108168
#else
109169
void QQmlViewUtil::removeInternalSuffixes(QString& str) {
110170
str.remove(QRegExp(QLatin1String("_QMLTYPE_\\d+")));

src/webdriver/extension_qt/qml_view_util.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
class QWindow;
3131
class QQuickView;
3232
#include <QtQuick/QQuickItem>
33+
#include <QtQml/QQmlContext>
34+
#include <QtQml/QQmlApplicationEngine>
3335
#else
3436
class QDeclarativeView;
3537
#include <QtDeclarative/QDeclarativeItem>
@@ -49,7 +51,10 @@ class QQmlViewUtil {
4951

5052
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
5153
static QWindow* getQWindowView(Session* session, const ViewId& viewId);
52-
static QQuickView* getQMLView(Session* session, const ViewId& viewId);
54+
static QQuickWindow* getQMLView(Session* session, const ViewId& viewId);
55+
static QQmlEngine* getQMLEngine(QQuickWindow* qquickWindow);
56+
static void setSource(const QUrl &url, bool sync, QQuickWindow* qquickWindow);
57+
static const QUrl getSource(QQuickWindow* qquickWindow);
5358
#else
5459
static QDeclarativeView* getQMLView(Session* session, const ViewId& viewId);
5560
#endif

src/webdriver/extension_qt/quick2_view_enumerator.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <QtGui/QGuiApplication>
3030
#include <QtQml/QQmlEngine>
3131
#include <QtQuick/QQuickView>
32+
#include <QtQuick/QQuickWindow>
3233

3334
namespace webdriver {
3435

@@ -37,13 +38,23 @@ void Quick2ViewEnumeratorImpl::EnumerateViews(Session* session, std::set<ViewId>
3738

3839
foreach(QWindow* pWindow, QGuiApplication::allWindows())
3940
{
41+
session->logger().Log(kInfoLogLevel,
42+
"Quick2ViewEnumerator found new view ");
4043
if (!pWindow->isVisible()) continue;
44+
session->logger().Log(kInfoLogLevel,
45+
"Quick2ViewEnumerator found new view visible ");
4146

42-
QQuickView* pView = qobject_cast<QQuickView*>(pWindow);
47+
QQuickWindow* pView = qobject_cast<QQuickWindow*>(pWindow);
4348
if (pView != NULL) {
49+
session->logger().Log(kInfoLogLevel,
50+
"Quick2ViewEnumerator found new view QQuickWindow ");
51+
4452
ViewHandlePtr handle(new QWindowViewHandle(pView));
4553
ViewId viewId = session->GetViewForHandle(handle);
4654
if (!viewId.is_valid()) {
55+
session->logger().Log(kInfoLogLevel,
56+
"Quick2ViewEnumerator found new view is_valid");
57+
4758
if (session->AddNewView(handle, &viewId)) {
4859
session->logger().Log(kInfoLogLevel,
4960
"Quick2ViewEnumerator found new view("+viewId.id()+")");

0 commit comments

Comments
 (0)