diff --git a/src/quick/designer/designerwindowmanager_p.h b/src/quick/designer/designerwindowmanager_p.h index 17a227d212918131c1593d3bfd86a767ec70aab5..7414f4e3ba04094a54e6de4cc8befd4722c706d5 100644 --- a/src/quick/designer/designerwindowmanager_p.h +++ b/src/quick/designer/designerwindowmanager_p.h @@ -93,8 +93,6 @@ public: QSGContext *sceneGraphContext() const; QSGRenderContext *createRenderContext(QSGContext *) const { return m_renderContext.data(); } - QList<QQuickWindow *> windows() const { return QList<QQuickWindow *>(); }; - static void createOpenGLContext(QQuickWindow *window); private: diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index b55761ba85b9dc92f863baf0ffb828f69ccf0189..81001e19fa76d26cdf97bb04f47458f559fea7d6 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -452,6 +452,7 @@ void QQuickWindowPrivate::init(QQuickWindow *c, QQuickRenderControl *control) sg = renderControl->sceneGraphContext(); context = renderControl->renderContext(sg); } else { + windowManager->addWindow(q); sg = windowManager->sceneGraphContext(); context = windowManager->createRenderContext(sg); } @@ -1077,10 +1078,12 @@ QQuickWindow::~QQuickWindow() Q_D(QQuickWindow); d->animationController->deleteLater(); - if (d->renderControl) + if (d->renderControl) { d->renderControl->windowDestroyed(); - else if (d->windowManager) + } else if (d->windowManager) { + d->windowManager->removeWindow(this); d->windowManager->windowDestroyed(this); + } QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete); delete d->incubationController; d->incubationController = 0; diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp index bd9c7609ad1cc634d7906d314e56c9e55a217b07..f3e879c354a8e65bc37d372eb5174051449dd689 100644 --- a/src/quick/scenegraph/qsgrenderloop.cpp +++ b/src/quick/scenegraph/qsgrenderloop.cpp @@ -126,8 +126,6 @@ public: QSGContext *sceneGraphContext() const; QSGRenderContext *createRenderContext(QSGContext *) const { return rc; } - QList<QQuickWindow *> windows() const { return m_windows.keys(); } - bool event(QEvent *); struct WindowData { diff --git a/src/quick/scenegraph/qsgrenderloop_p.h b/src/quick/scenegraph/qsgrenderloop_p.h index 47b59992e2dade740764921824a4b19fc9b4f70b..4a22fd60e79754953ef028c8aad67015f7271c14 100644 --- a/src/quick/scenegraph/qsgrenderloop_p.h +++ b/src/quick/scenegraph/qsgrenderloop_p.h @@ -44,6 +44,7 @@ #include <QtGui/QImage> #include <private/qtquickglobal_p.h> +#include <QtCore/QSet> QT_BEGIN_NAMESPACE @@ -78,7 +79,9 @@ public: virtual void releaseResources(QQuickWindow *window) = 0; - virtual QList<QQuickWindow *> windows() const = 0; + void addWindow(QQuickWindow *win) { m_windows.insert(win); } + void removeWindow(QQuickWindow *win) { m_windows.remove(win); } + QSet<QQuickWindow *> windows() const { return m_windows; } // ### make this less of a singleton static QSGRenderLoop *instance(); @@ -99,6 +102,8 @@ public Q_SLOTS: private: static QSGRenderLoop *s_instance; + + QSet<QQuickWindow *> m_windows; }; QT_END_NAMESPACE diff --git a/src/quick/scenegraph/qsgthreadedrenderloop.cpp b/src/quick/scenegraph/qsgthreadedrenderloop.cpp index 3dc2a50542d5711dd52e0c34068e148ba4a03f77..ba8c3a7fce02b09bc0ce0ee3cb618c108356cb1e 100644 --- a/src/quick/scenegraph/qsgthreadedrenderloop.cpp +++ b/src/quick/scenegraph/qsgthreadedrenderloop.cpp @@ -738,14 +738,6 @@ QSGThreadedRenderLoop::QSGThreadedRenderLoop() QSG_GUI_DEBUG((void *) 0, "QSGThreadedRenderLoop() created"); } -QList<QQuickWindow *> QSGThreadedRenderLoop::windows() const -{ - QList<QQuickWindow *> list; - foreach (const Window &w, m_windows) - list << w.window; - return list; -} - QSGRenderContext *QSGThreadedRenderLoop::createRenderContext(QSGContext *sg) const { return sg->createRenderContext(); diff --git a/src/quick/scenegraph/qsgthreadedrenderloop_p.h b/src/quick/scenegraph/qsgthreadedrenderloop_p.h index 3997ef92b7be59c1ee243b195556a4c00e17a52e..e142f7f2c8f719f208f61736d3cba988c7e9f6ad 100644 --- a/src/quick/scenegraph/qsgthreadedrenderloop_p.h +++ b/src/quick/scenegraph/qsgthreadedrenderloop_p.h @@ -79,8 +79,6 @@ public: bool interleaveIncubation() const; - QList<QQuickWindow *> windows() const; - public Q_SLOTS: void animationStarted(); void animationStopped(); diff --git a/src/quick/scenegraph/qsgwindowsrenderloop.cpp b/src/quick/scenegraph/qsgwindowsrenderloop.cpp index cbe9ea384b46bb8035c249ba622f93276fb5ce17..913b73779830ef1550b6e990a7323c15792e40bb 100644 --- a/src/quick/scenegraph/qsgwindowsrenderloop.cpp +++ b/src/quick/scenegraph/qsgwindowsrenderloop.cpp @@ -111,15 +111,6 @@ QSGWindowsRenderLoop::~QSGWindowsRenderLoop() delete m_sg; } -QList<QQuickWindow *> QSGWindowsRenderLoop::windows() const -{ - QList<QQuickWindow *> list; - foreach (const WindowData &w, m_windows) - list << w.window; - return list; -} - - bool QSGWindowsRenderLoop::interleaveIncubation() const { return m_animationDriver->isRunning() && anyoneShowing(); diff --git a/src/quick/scenegraph/qsgwindowsrenderloop_p.h b/src/quick/scenegraph/qsgwindowsrenderloop_p.h index 6c26e728da09c55326d060bb2919d4906eb818da..e4ee688c9f61b4876bf98911ae3eab2337439aa4 100644 --- a/src/quick/scenegraph/qsgwindowsrenderloop_p.h +++ b/src/quick/scenegraph/qsgwindowsrenderloop_p.h @@ -86,8 +86,6 @@ public: bool interleaveIncubation() const; - QList<QQuickWindow *> windows() const; - public Q_SLOTS: void started(); void stopped();