aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickwindowmodule.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-01-23 16:21:14 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-01-24 09:10:16 +0100
commit817cd03a5f437c9e8862646cca5ea016b1223bc7 (patch)
tree3c6d2f6e605c1d87df3b8f2f40552cda09f6de86 /src/quick/items/qquickwindowmodule.cpp
parentc57bee9dda9857c3efbc34f3f0806a6cea705a9d (diff)
Let ApplicationWindow inherit QQuickWindowQmlImpl
Inheriting QQuickWindow would mean that ApplicationWindow would have to duplicate all that visibility and root item marker related code. Change-Id: I3b58631011a88d6a079c091db08215f2eef6df84 Reviewed-by: Alan Alpert <aalpert@blackberry.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Diffstat (limited to 'src/quick/items/qquickwindowmodule.cpp')
-rw-r--r--src/quick/items/qquickwindowmodule.cpp211
1 files changed, 104 insertions, 107 deletions
diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp
index 065c50c8f6..58bc598559 100644
--- a/src/quick/items/qquickwindowmodule.cpp
+++ b/src/quick/items/qquickwindowmodule.cpp
@@ -45,127 +45,126 @@
QT_BEGIN_NAMESPACE
-class QQuickWindowQmlImpl : public QQuickWindow, public QQmlParserStatus
+class QQuickWindowQmlImplPrivate : public QQuickWindowPrivate
{
- Q_INTERFACES(QQmlParserStatus)
- Q_OBJECT
-
- Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
- Q_PROPERTY(Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged)
-
public:
- QQuickWindowQmlImpl(QWindow *parent = 0)
- : QQuickWindow(parent)
- , m_complete(false)
- , m_visible(isVisible())
- , m_visibility(AutomaticVisibility)
+ QQuickWindowQmlImplPrivate()
+ : complete(false)
+ , visible(false)
+ , visibility(QQuickWindow::AutomaticVisibility)
{
- connect(this, &QWindow::visibleChanged, this, &QQuickWindowQmlImpl::visibleChanged);
- connect(this, &QWindow::visibilityChanged, this, &QQuickWindowQmlImpl::visibilityChanged);
}
- void setVisible(bool visible) {
- if (!m_complete)
- m_visible = visible;
- else if (!transientParent() || transientParent()->isVisible())
- QQuickWindow::setVisible(visible);
- }
+ bool complete;
+ bool visible;
+ QQuickWindow::Visibility visibility;
+ QV4::PersistentValue rootItemMarker;
+};
- void setVisibility(Visibility visibility)
- {
- if (!m_complete)
- m_visibility = visibility;
- else
- QQuickWindow::setVisibility(visibility);
- }
+QQuickWindowQmlImpl::QQuickWindowQmlImpl(QWindow *parent)
+ : QQuickWindow(*(new QQuickWindowQmlImplPrivate), parent)
+{
+ connect(this, &QWindow::visibleChanged, this, &QQuickWindowQmlImpl::visibleChanged);
+ connect(this, &QWindow::visibilityChanged, this, &QQuickWindowQmlImpl::visibilityChanged);
+}
+
+void QQuickWindowQmlImpl::setVisible(bool visible)
+{
+ Q_D(QQuickWindowQmlImpl);
+ if (!d->complete)
+ d->visible = visible;
+ else if (!transientParent() || transientParent()->isVisible())
+ QQuickWindow::setVisible(visible);
+}
+
+void QQuickWindowQmlImpl::setVisibility(Visibility visibility)
+{
+ Q_D(QQuickWindowQmlImpl);
+ if (!d->complete)
+ d->visibility = visibility;
+ else
+ QQuickWindow::setVisibility(visibility);
+}
+
+QQuickWindowAttached *QQuickWindowQmlImpl::qmlAttachedProperties(QObject *object)
+{
+ return new QQuickWindowAttached(object);
+}
- static QQuickWindowAttached *qmlAttachedProperties(QObject *object)
+void QQuickWindowQmlImpl::classBegin()
+{
+ Q_D(QQuickWindowQmlImpl);
+ QQmlEngine* e = qmlEngine(this);
+ //Give QQuickView behavior when created from QML with QQmlApplicationEngine
+ if (QCoreApplication::instance()->property("__qml_using_qqmlapplicationengine") == QVariant(true)) {
+ if (e && !e->incubationController())
+ e->setIncubationController(incubationController());
+ }
+ Q_ASSERT(e);
{
- return new QQuickWindowAttached(object);
+ QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(e);
+ QV4::Scope scope(v4);
+ QV4::ScopedObject v(scope, QV4::QQuickRootItemMarker::create(e, this));
+ d->rootItemMarker = v;
}
+}
-Q_SIGNALS:
- void visibleChanged(bool arg);
- void visibilityChanged(QWindow::Visibility visibility);
-
-protected:
- void classBegin() Q_DECL_OVERRIDE {
- QQmlEngine* e = qmlEngine(this);
- //Give QQuickView behavior when created from QML with QQmlApplicationEngine
- if (QCoreApplication::instance()->property("__qml_using_qqmlapplicationengine") == QVariant(true)) {
- if (e && !e->incubationController())
- e->setIncubationController(incubationController());
- }
- Q_ASSERT(e);
- {
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(e);
- QV4::Scope scope(v4);
- QV4::ScopedObject v(scope, QV4::QQuickRootItemMarker::create(e, this));
- rootItemMarker = v;
- }
+void QQuickWindowQmlImpl::componentComplete()
+{
+ Q_D(QQuickWindowQmlImpl);
+ d->complete = true;
+ if (transientParent() && !transientParent()->isVisible()) {
+ connect(transientParent(), &QQuickWindow::visibleChanged, this,
+ &QQuickWindowQmlImpl::setWindowVisibility, Qt::QueuedConnection);
+ } else {
+ setWindowVisibility();
}
+}
- void componentComplete() Q_DECL_OVERRIDE {
- m_complete = true;
- if (transientParent() && !transientParent()->isVisible()) {
- connect(transientParent(), &QQuickWindow::visibleChanged, this,
- &QQuickWindowQmlImpl::setWindowVisibility, Qt::QueuedConnection);
- } else {
- setWindowVisibility();
- }
+void QQuickWindowQmlImpl::setWindowVisibility()
+{
+ Q_D(QQuickWindowQmlImpl);
+ if (transientParent() && !transientParent()->isVisible())
+ return;
+
+ if (sender()) {
+ disconnect(transientParent(), &QWindow::visibleChanged, this,
+ &QQuickWindowQmlImpl::setWindowVisibility);
}
-private Q_SLOTS:
- void setWindowVisibility()
- {
- if (transientParent() && !transientParent()->isVisible())
- return;
-
- if (sender()) {
- disconnect(transientParent(), &QWindow::visibleChanged, this,
- &QQuickWindowQmlImpl::setWindowVisibility);
- }
-
- // We have deferred window creation until we have the full picture of what
- // the user wanted in terms of window state, geometry, visibility, etc.
-
- if ((m_visibility == Hidden && m_visible) || (m_visibility > AutomaticVisibility && !m_visible)) {
- QQmlData *data = QQmlData::get(this);
- Q_ASSERT(data && data->context);
-
- QQmlError error;
- error.setObject(this);
-
- const QQmlContextData* urlContext = data->context;
- while (urlContext && urlContext->url.isEmpty())
- urlContext = urlContext->parent;
- error.setUrl(urlContext ? urlContext->url : QUrl());
-
- QString objectId = data->context->findObjectId(this);
- if (!objectId.isEmpty())
- error.setDescription(QCoreApplication::translate("QQuickWindowQmlImpl",
- "Conflicting properties 'visible' and 'visibility' for Window '%1'").arg(objectId));
- else
- error.setDescription(QCoreApplication::translate("QQuickWindowQmlImpl",
- "Conflicting properties 'visible' and 'visibility'"));
-
- QQmlEnginePrivate::get(data->context->engine)->warning(error);
- }
-
- if (m_visibility == AutomaticVisibility) {
- setWindowState(QGuiApplicationPrivate::platformIntegration()->defaultWindowState(flags()));
- setVisible(m_visible);
- } else {
- setVisibility(m_visibility);
- }
+ // We have deferred window creation until we have the full picture of what
+ // the user wanted in terms of window state, geometry, visibility, etc.
+
+ if ((d->visibility == Hidden && d->visible) || (d->visibility > AutomaticVisibility && !d->visible)) {
+ QQmlData *data = QQmlData::get(this);
+ Q_ASSERT(data && data->context);
+
+ QQmlError error;
+ error.setObject(this);
+
+ const QQmlContextData* urlContext = data->context;
+ while (urlContext && urlContext->url.isEmpty())
+ urlContext = urlContext->parent;
+ error.setUrl(urlContext ? urlContext->url : QUrl());
+
+ QString objectId = data->context->findObjectId(this);
+ if (!objectId.isEmpty())
+ error.setDescription(QCoreApplication::translate("QQuickWindowQmlImpl",
+ "Conflicting properties 'visible' and 'visibility' for Window '%1'").arg(objectId));
+ else
+ error.setDescription(QCoreApplication::translate("QQuickWindowQmlImpl",
+ "Conflicting properties 'visible' and 'visibility'"));
+
+ QQmlEnginePrivate::get(data->context->engine)->warning(error);
}
-private:
- bool m_complete;
- bool m_visible;
- Visibility m_visibility;
- QV4::PersistentValue rootItemMarker;
-};
+ if (d->visibility == AutomaticVisibility) {
+ setWindowState(QGuiApplicationPrivate::platformIntegration()->defaultWindowState(flags()));
+ setVisible(d->visible);
+ } else {
+ setVisibility(d->visibility);
+ }
+}
void QQuickWindowModule::defineModule()
{
@@ -181,8 +180,6 @@ void QQuickWindowModule::defineModule()
qmlRegisterUncreatableType<QQuickScreen>(uri, 2, 0, "Screen", QStringLiteral("Screen can only be used via the attached property."));
}
-#include "qquickwindowmodule.moc"
-
QT_END_NAMESPACE
QML_DECLARE_TYPEINFO(QQuickWindowQmlImpl, QML_HAS_ATTACHED_PROPERTIES)