summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h6
-rw-r--r--src/corelib/tools/tools.pri2
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp25
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp5
-rw-r--r--src/sql/drivers/ibase/qsql_ibase.cpp4
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp2
-rw-r--r--tests/auto/qsharedpointer/tst_qsharedpointer.cpp3
7 files changed, 32 insertions, 15 deletions
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index 928805a..0471a1b 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -48,6 +48,8 @@
#pragma qt_sync_stop_processing
#endif
+#include <QtCore/qatomic.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -138,14 +140,14 @@ namespace QtSharedPointer {
inline void internalConstruct(T *ptr)
{
-#ifndef QT_NO_DEBUG
+#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
if (ptr) internalSafetyCheckAdd(ptr);
#endif
value = ptr;
}
inline void internalDestroy()
{
-#ifndef QT_NO_DEBUG
+#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
if (value) internalSafetyCheckRemove(value);
#endif
}
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index aea0c6c..c93a065 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -28,6 +28,8 @@ HEADERS += \
tools/qregexp.h \
tools/qringbuffer_p.h \
tools/qshareddata.h \
+ tools/qsharedpointer.h \
+ tools/qsharedpointer_impl.h \
tools/qset.h \
tools/qsize.h \
tools/qstack.h \
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
index 1b499b6..3185664 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
@@ -378,7 +378,7 @@ void QDirectFBPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op)
Q_D(QDirectFBPaintEngine);
d->dirtyClip = true;
const QPoint bottom = d->transform.map(QPoint(0, int(path.controlPointRect().bottom())));
- if (bottom.y() >= d->lastLockedHeight)
+ if (bottom.y() > d->lastLockedHeight)
d->lock();
QRasterPaintEngine::clip(path, op);
}
@@ -389,7 +389,7 @@ void QDirectFBPaintEngine::clip(const QRect &rect, Qt::ClipOperation op)
d->dirtyClip = true;
if (d->clip() && !d->clip()->hasRectClip && d->clip()->enabled) {
const QPoint bottom = d->transform.map(QPoint(0, rect.bottom()));
- if (bottom.y() >= d->lastLockedHeight)
+ if (bottom.y() > d->lastLockedHeight)
d->lock();
}
@@ -567,6 +567,7 @@ void QDirectFBPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pixmap,
QPixmapData *data = pixmap.pixmapData();
Q_ASSERT(data->classId() == QPixmapData::DirectFBClass);
QDirectFBPixmapData *dfbData = static_cast<QDirectFBPixmapData*>(data);
+ dfbData->unlockDirectFB();
IDirectFBSurface *s = dfbData->directFBSurface();
d->blit(r, s, sr);
}
@@ -598,6 +599,10 @@ void QDirectFBPaintEngine::drawTiledPixmap(const QRectF &r,
QRasterPaintEngine::drawTiledPixmap(r, pix, sp);
} else {
d->unlock();
+ QPixmapData *data = pixmap.pixmapData();
+ Q_ASSERT(data->classId() == QPixmapData::DirectFBClass);
+ QDirectFBPixmapData *dfbData = static_cast<QDirectFBPixmapData*>(data);
+ dfbData->unlockDirectFB();
d->drawTiledPixmap(r, pixmap);
}
}
@@ -913,11 +918,17 @@ void QDirectFBPaintEnginePrivate::end()
void QDirectFBPaintEnginePrivate::setPen(const QPen &p)
{
pen = p;
- simplePen = (pen.style() == Qt::NoPen) ||
- (pen.style() == Qt::SolidLine
- && !antialiased
- && (pen.brush().style() == Qt::SolidPattern)
- && (pen.widthF() <= 1 && scale != NoScale));
+ if (pen.style() == Qt::NoPen) {
+ simplePen = true;
+ } else if (pen.style() == Qt::SolidLine
+ && !antialiased
+ && pen.brush().style() == Qt::SolidPattern
+ && pen.widthF() <= 1.0
+ && (scale == NoScale || pen.isCosmetic())) {
+ simplePen = true;
+ } else {
+ simplePen = false;
+ }
}
void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode mode)
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index 9dc7818..c9d5d7c 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -90,7 +90,6 @@ void QDirectFBPixmapData::resize(int width, int height)
setSerialNumber(++global_ser_no);
}
-
// mostly duplicated from qimage.cpp (QImageData::checkForAlphaPixels)
static bool checkForAlphaPixels(const QImage &img)
{
@@ -209,6 +208,7 @@ void QDirectFBPixmapData::copy(const QPixmapData *data, const QRect &rect)
QPixmapData::copy(data, rect);
return;
}
+ unlockDirectFB();
const QDirectFBPixmapData *otherData = static_cast<const QDirectFBPixmapData*>(data);
IDirectFBSurface *src = otherData->directFBSurface();
@@ -296,10 +296,10 @@ void QDirectFBPixmapData::fill(const QColor &color)
QPixmap QDirectFBPixmapData::transformed(const QTransform &transform,
Qt::TransformationMode mode) const
{
+ QDirectFBPixmapData *that = const_cast<QDirectFBPixmapData*>(this);
if (!dfbSurface || transform.type() != QTransform::TxScale
|| mode != Qt::FastTransformation)
{
- QDirectFBPixmapData *that = const_cast<QDirectFBPixmapData*>(this);
const QImage *image = that->buffer();
Q_ASSERT(image);
const QImage transformed = image->transformed(transform, mode);
@@ -308,6 +308,7 @@ QPixmap QDirectFBPixmapData::transformed(const QTransform &transform,
data->fromImage(transformed, Qt::AutoColor);
return QPixmap(data);
}
+ that->unlockDirectFB();
const QSize size = transform.mapRect(QRect(0, 0, w, h)).size();
if (size.isEmpty())
diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp
index 893c98c..0c4fff0 100644
--- a/src/sql/drivers/ibase/qsql_ibase.cpp
+++ b/src/sql/drivers/ibase/qsql_ibase.cpp
@@ -157,8 +157,8 @@ static void delDA(XSQLDA *&sqlda)
if (!sqlda)
return;
for (int i = 0; i < sqlda->sqld; ++i) {
- delete sqlda->sqlvar[i].sqlind;
- delete sqlda->sqlvar[i].sqldata;
+ delete [] sqlda->sqlvar[i].sqlind;
+ delete [] sqlda->sqlvar[i].sqldata;
}
free(sqlda);
sqlda = 0;
diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp
index d197388..0c92013 100644
--- a/src/sql/drivers/psql/qsql_psql.cpp
+++ b/src/sql/drivers/psql/qsql_psql.cpp
@@ -831,7 +831,7 @@ bool QPSQLDriver::commitTransaction()
if (d->pro == QPSQLDriver::Version8 ||
d->pro == QPSQLDriver::Version81 ||
d->pro == QPSQLDriver::Version82) {
- transaction_failed = QByteArray(PQcmdStatus(res)) == QByteArray("ROLLBACK")?true:false;
+ transaction_failed = qstrcmp(PQcmdStatus(res), "ROLLBACK") == 0;
}
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK || transaction_failed) {
diff --git a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
index 795ce76..a11164f 100644
--- a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
@@ -39,7 +39,7 @@
**
****************************************************************************/
-
+#define QT_SHAREDPOINTER_TRACK_POINTERS
#include "qsharedpointer.h"
#include "externaltests.h"
#include <QtTest/QtTest>
@@ -995,6 +995,7 @@ void tst_QSharedPointer::invalidConstructs()
test.setDebugMode(true);
test.setQtModules(QTest::QExternalTest::QtCore);
test.setProgramHeader(
+ "#define QT_SHAREDPOINTER_TRACK_POINTERS\n"
"#include <QtCore/qsharedpointer.h>\n"
"\n"
"struct Data { int i; };\n"