summaryrefslogtreecommitdiffstats
path: root/examples/qml-compositor/main.cpp
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-03-15 17:44:15 +0100
committerSamuel Rødal <samuel.rodal@nokia.com>2011-03-15 17:44:15 +0100
commitaf8a2a94b796baf6a6dfb4906d3af875191f0eea (patch)
treed1de2216d0e7b2ec2acb263418a500126debf5b2 /examples/qml-compositor/main.cpp
parent612ab72281b87eb407887b2112c9041d8fbb6d75 (diff)
Added proper removing of windows in QML compositor.
Diffstat (limited to 'examples/qml-compositor/main.cpp')
-rw-r--r--examples/qml-compositor/main.cpp13
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();