--- a/src/gui/image/qpixmap_s60.cpp Fri Sep 17 08:34:18 2010 +0300
+++ b/src/gui/image/qpixmap_s60.cpp Mon Oct 04 01:19:32 2010 +0300
@@ -63,6 +63,42 @@
const uchar qt_pixmap_bit_mask[] = { 0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80 };
+static bool cleanup_function_registered = false;
+static QS60PixmapData *firstPixmap = 0;
+
+void qt_symbian_register_pixmap(QS60PixmapData *pd)
+{
+ if(!cleanup_function_registered) {
+ qAddPostRoutine(qt_symbian_release_pixmaps);
+ cleanup_function_registered = true;
+ }
+
+ pd->next = firstPixmap;
+ pd->prev = 0;
+ if (firstPixmap)
+ firstPixmap->prev = pd;
+ firstPixmap = pd;
+}
+
+void qt_symbian_unregister_pixmap(QS60PixmapData *pd)
+{
+ if (pd->next)
+ pd->next->prev = pd->prev;
+ if (pd->prev)
+ pd->prev->next = pd->next;
+ else
+ firstPixmap = pd->next;
+}
+
+void qt_symbian_release_pixmaps()
+{
+ // Scan all QS60PixmapData objects in the system and destroy them.
+ QS60PixmapData *pd = firstPixmap;
+ while (pd != 0) {
+ pd->release();
+ pd = pd->next;
+ }
+}
/*
\class QSymbianFbsClient
@@ -356,15 +392,18 @@
cfbsBitmap(0),
pengine(0),
bytes(0),
- formatLocked(false)
+ formatLocked(false),
+ next(0),
+ prev(0)
{
-
+ qt_symbian_register_pixmap(this);
}
QS60PixmapData::~QS60PixmapData()
{
release();
delete symbianBitmapDataAccess;
+ qt_symbian_unregister_pixmap(this);
}
void QS60PixmapData::resize(int width, int height)