diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2011-03-15 17:44:15 +0100 |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2011-03-15 17:44:15 +0100 |
commit | af8a2a94b796baf6a6dfb4906d3af875191f0eea (patch) | |
tree | d1de2216d0e7b2ec2acb263418a500126debf5b2 /examples/qml-compositor/main.cpp | |
parent | 612ab72281b87eb407887b2112c9041d8fbb6d75 (diff) |
Added proper removing of windows in QML compositor.
Diffstat (limited to 'examples/qml-compositor/main.cpp')
-rw-r--r-- | examples/qml-compositor/main.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/examples/qml-compositor/main.cpp b/examples/qml-compositor/main.cpp index 1e5e7404a..af28bd46e 100644 --- a/examples/qml-compositor/main.cpp +++ b/examples/qml-compositor/main.cpp @@ -245,6 +245,7 @@ public: signals: void windowAdded(QVariant window); + void windowDestroyed(QVariant window); private slots: void surfaceMapped(const QRect &rect) { @@ -252,11 +253,19 @@ private slots: surface->setGeometry(rect); } + void surfaceDestroyed(QObject *object) { + WindowItem *item = m_windowMap.take(object); + emit windowDestroyed(QVariant::fromValue(static_cast<QSGItem *>(item))); + delete item; + } + protected: void surfaceCreated(WaylandSurface *surface) { WindowItem *item = new WindowItem(surface, rootObject()); connect(surface, SIGNAL(mapped(const QRect &)), this, SLOT(surfaceMapped(const QRect &))); + connect(surface, SIGNAL(destroyed(QObject *)), this, SLOT(surfaceDestroyed(QObject *))); emit windowAdded(QVariant::fromValue(static_cast<QSGItem *>(item))); + m_windowMap[surface] = item; } void paintEvent(QPaintEvent *event) { @@ -264,6 +273,9 @@ protected: frameFinished(); glFinish(); } + +private: + QMap<QObject *, WindowItem *> m_windowMap; }; int main(int argc, char *argv[]) @@ -276,6 +288,7 @@ int main(int argc, char *argv[]) compositor.rootContext()->setContextProperty("compositor", &compositor); QObject::connect(&compositor, SIGNAL(windowAdded(QVariant)), compositor.rootObject(), SLOT(windowAdded(QVariant))); + QObject::connect(&compositor, SIGNAL(windowDestroyed(QVariant)), compositor.rootObject(), SLOT(windowDestroyed(QVariant))); return app.exec(); |