summaryrefslogtreecommitdiffstats
path: root/src/compositor/compositor_api/qwaylandquickoutput.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-09-03 12:40:19 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-09-04 16:12:47 +0200
commit4c5a796e96a66c18afbde0577d8b912a618fe710 (patch)
treee9b3aa53541f67d58dbf1599ae3181ac2cdae2ae /src/compositor/compositor_api/qwaylandquickoutput.cpp
parenta814616ff34bf5901fc299c6ba91c80cad39922d (diff)
Make it possible to construct QWaylandOutput
This requires QWaylandOutput to be initialized. This will happend when the QWaylandCompositor of the QWaylandOutputSpace that is set on the QWaylandOutput is created. QWaylandCompositor will send or post a Polish event to the QWaylandOutput which again will call QWaylandOutput::initialize. This function will create the global that will be put on the wl_displays registry This makes it possible to Create WaylandOutputs in QML (see the pure-qml example) and also gives a better programming model in C++ Change-Id: Iaf907ae18a283678eda6d04390dc9790ae0bced8
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquickoutput.cpp')
-rw-r--r--src/compositor/compositor_api/qwaylandquickoutput.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/compositor/compositor_api/qwaylandquickoutput.cpp b/src/compositor/compositor_api/qwaylandquickoutput.cpp
index 463901572..a32689225 100644
--- a/src/compositor/compositor_api/qwaylandquickoutput.cpp
+++ b/src/compositor/compositor_api/qwaylandquickoutput.cpp
@@ -40,28 +40,42 @@
QT_BEGIN_NAMESPACE
-QWaylandQuickOutput::QWaylandQuickOutput(QWaylandOutputSpace *outputSpace, QQuickWindow *window)
+QWaylandQuickOutput::QWaylandQuickOutput()
+ : QWaylandOutput()
+ , m_updateScheduled(false)
+ , m_automaticFrameCallback(true)
+{
+}
+
+QWaylandQuickOutput::QWaylandQuickOutput(QWaylandOutputSpace *outputSpace, QWindow *window)
: QWaylandOutput(outputSpace, window)
, m_updateScheduled(false)
, m_automaticFrameCallback(true)
{
- connect(window, &QQuickWindow::beforeSynchronizing,
+}
+
+void QWaylandQuickOutput::initialize()
+{
+ QWaylandOutput::initialize();
+
+ QQuickWindow *quickWindow = qobject_cast<QQuickWindow *>(window());
+ if (!quickWindow) {
+ qWarning("Initialization error: Could not locate QQuickWindow on initializing QWaylandQucikOutput %p.\n", this);
+ return;
+ }
+ connect(quickWindow, &QQuickWindow::beforeSynchronizing,
this, &QWaylandQuickOutput::updateStarted,
Qt::DirectConnection);
- connect(window, &QQuickWindow::beforeRendering,
+ connect(quickWindow, &QQuickWindow::beforeRendering,
this, &QWaylandQuickOutput::doFrameCallbacks);
}
-QQuickWindow *QWaylandQuickOutput::quickWindow() const
-{
- return static_cast<QQuickWindow *>(window());
-}
-
void QWaylandQuickOutput::update()
{
if (!m_updateScheduled) {
- quickWindow()->update();
+ //don't qobject_cast since we have verified the type in initialize
+ static_cast<QQuickWindow *>(window())->update();
m_updateScheduled = true;
}
}
@@ -83,6 +97,10 @@ void QWaylandQuickOutput::setAutomaticFrameCallback(bool automatic)
void QWaylandQuickOutput::updateStarted()
{
m_updateScheduled = false;
+
+ if (!compositor())
+ return;
+
frameStarted();
compositor()->cleanupGraphicsResources();
}