summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/global/qsystemdetection.h2
-rw-r--r--src/corelib/io/qdir.cpp2
-rw-r--r--src/corelib/io/qlockfile_win.cpp13
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp32
-rw-r--r--src/corelib/tools/qpoint.cpp8
-rw-r--r--src/corelib/tools/qsize.cpp8
-rw-r--r--src/corelib/tools/qvector.h17
-rw-r--r--src/gui/image/qimage.cpp12
-rw-r--r--src/gui/image/qimage_conversions.cpp6
-rw-r--r--src/gui/image/qimage_sse4.cpp3
-rw-r--r--src/gui/math3d/qgenericmatrix.h27
-rw-r--r--src/gui/math3d/qquaternion.h2
-rw-r--r--src/gui/painting/qdrawhelper.cpp10
-rw-r--r--src/gui/painting/qdrawhelper_sse4.cpp7
-rw-r--r--src/gui/painting/qdrawingprimitive_sse2_p.h23
-rw-r--r--src/gui/painting/qrgb.h37
-rw-r--r--src/openglextensions/qopenglextensions.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformforeignwindow.cpp26
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplication.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.mm5
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm18
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp2
-rw-r--r--src/printsupport/kernel/qprintdevice.cpp55
-rw-r--r--src/printsupport/kernel/qprintdevice_p.h8
-rw-r--r--src/printsupport/kernel/qprinterinfo.cpp17
-rw-r--r--src/printsupport/kernel/qprinterinfo.h4
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp41
-rw-r--r--src/sql/kernel/qsqldatabase.cpp3
-rw-r--r--src/tools/moc/moc.cpp3
-rw-r--r--src/tools/qdoc/generator.cpp57
-rw-r--r--src/tools/qdoc/generator.h1
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp57
-rw-r--r--src/tools/qdoc/htmlgenerator.h1
-rw-r--r--src/tools/qdoc/tree.cpp7
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp7
-rw-r--r--src/widgets/kernel/qapplication.cpp5
-rw-r--r--src/widgets/widgets/qdockwidget.cpp10
39 files changed, 323 insertions, 221 deletions
diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h
index eb9c4ff04f..64f9d91ec7 100644
--- a/src/corelib/global/qsystemdetection.h
+++ b/src/corelib/global/qsystemdetection.h
@@ -106,7 +106,7 @@
# if defined(WINCE) || defined(_WIN32_WCE)
# define Q_OS_WINCE
# elif defined(WINAPI_FAMILY)
-# if WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
+# if defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
# define Q_OS_WINPHONE
# define Q_OS_WINRT
# elif WINAPI_FAMILY==WINAPI_FAMILY_APP
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index 3a9ae2ee6d..9b1ec3917a 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -239,7 +239,7 @@ bool QDirSortItemComparator::operator()(const QDirSortItem &n1, const QDirSortIt
break;
}
case QDir::Size:
- r = int(qBound<qint64>(-1, f2->item.size() - f1->item.size(), 1));
+ r = f2->item.size() - f1->item.size();
break;
case QDir::Type:
{
diff --git a/src/corelib/io/qlockfile_win.cpp b/src/corelib/io/qlockfile_win.cpp
index a36e6e93b8..9fe86e1ad8 100644
--- a/src/corelib/io/qlockfile_win.cpp
+++ b/src/corelib/io/qlockfile_win.cpp
@@ -48,6 +48,12 @@ static inline QByteArray localHostName()
return qgetenv("COMPUTERNAME");
}
+static inline bool fileExists(const wchar_t *fileName)
+{
+ WIN32_FILE_ATTRIBUTE_DATA data;
+ return GetFileAttributesEx(fileName, GetFileExInfoStandard, &data);
+}
+
QLockFile::LockError QLockFilePrivate::tryLock_sys()
{
const QFileSystemEntry fileEntry(fileName);
@@ -79,8 +85,13 @@ QLockFile::LockError QLockFilePrivate::tryLock_sys()
case ERROR_SHARING_VIOLATION:
case ERROR_ALREADY_EXISTS:
case ERROR_FILE_EXISTS:
- case ERROR_ACCESS_DENIED: // readonly file, or file still in use by another process. Assume the latter, since we don't create it readonly.
return QLockFile::LockFailedError;
+ case ERROR_ACCESS_DENIED:
+ // readonly file, or file still in use by another process.
+ // Assume the latter if the file exists, since we don't create it readonly.
+ return fileExists((const wchar_t*)fileEntry.nativeFilePath().utf16())
+ ? QLockFile::LockFailedError
+ : QLockFile::PermissionError;
default:
qWarning() << "Got unexpected locking error" << lastError;
return QLockFile::UnknownError;
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index f103bec591..04c82b5cd3 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -198,7 +198,7 @@ static inline bool isDescendant(const QAbstractState *state1, const QAbstractSta
static bool containsDecendantOf(const QSet<QAbstractState *> &states, const QAbstractState *node)
{
- Q_FOREACH (QAbstractState *s, states)
+ foreach (QAbstractState *s, states)
if (isDescendant(s, node))
return true;
@@ -490,11 +490,11 @@ void QStateMachinePrivate::removeConflictingTransitions(QList<QAbstractTransitio
filteredTransitions.reserve(enabledTransitions.size());
std::sort(enabledTransitions.begin(), enabledTransitions.end(), transitionStateEntryLessThan);
- Q_FOREACH (QAbstractTransition *t1, enabledTransitions) {
+ foreach (QAbstractTransition *t1, enabledTransitions) {
bool t1Preempted = false;
QVarLengthArray<QAbstractTransition *> transitionsToRemove;
QSet<QAbstractState*> exitSetT1 = computeExitSet_Unordered(QList<QAbstractTransition*>() << t1);
- Q_FOREACH (QAbstractTransition *t2, filteredTransitions) {
+ foreach (QAbstractTransition *t2, filteredTransitions) {
QSet<QAbstractState*> exitSetT2 = computeExitSet_Unordered(QList<QAbstractTransition*>() << t2);
if (!exitSetT1.intersect(exitSetT2).isEmpty()) {
if (isDescendant(t1->sourceState(), t2->sourceState())) {
@@ -506,7 +506,7 @@ void QStateMachinePrivate::removeConflictingTransitions(QList<QAbstractTransitio
}
}
if (!t1Preempted) {
- Q_FOREACH (QAbstractTransition *t3, transitionsToRemove)
+ foreach (QAbstractTransition *t3, transitionsToRemove)
filteredTransitions.removeAll(t3);
filteredTransitions.append(t1);
}
@@ -615,7 +615,7 @@ QSet<QAbstractState*> QStateMachinePrivate::computeExitSet_Unordered(const QList
Q_ASSERT(domain != 0);
}
- Q_FOREACH (QAbstractState* s, configuration) {
+ foreach (QAbstractState* s, configuration) {
if (isDescendant(s, domain))
statesToExit.insert(s);
}
@@ -685,14 +685,14 @@ QList<QAbstractState*> QStateMachinePrivate::computeEntrySet(const QList<QAbstra
{
QSet<QAbstractState*> statesToEnter;
if (pendingErrorStates.isEmpty()) {
- Q_FOREACH (QAbstractTransition *t, enabledTransitions) {
- Q_FOREACH (QAbstractState *s, t->targetStates()) {
+ foreach (QAbstractTransition *t, enabledTransitions) {
+ foreach (QAbstractState *s, t->targetStates()) {
addDescendantStatesToEnter(s, statesToEnter, statesForDefaultEntry);
}
QList<QAbstractState *> effectiveTargetStates = getEffectiveTargetStates(t).toList();
QAbstractState *ancestor = getTransitionDomain(t, effectiveTargetStates);
- Q_FOREACH (QAbstractState *s, effectiveTargetStates) {
+ foreach (QAbstractState *s, effectiveTargetStates) {
addAncestorStatesToEnter(s, ancestor, statesToEnter, statesForDefaultEntry);
}
}
@@ -738,7 +738,7 @@ QAbstractState *QStateMachinePrivate::getTransitionDomain(QAbstractTransition *t
if (QState *tSource = t->sourceState()) {
if (isCompound(tSource)) {
bool allDescendants = true;
- Q_FOREACH (QAbstractState *s, effectiveTargetStates) {
+ foreach (QAbstractState *s, effectiveTargetStates) {
if (!isDescendant(s, tSource)) {
allDescendants = false;
break;
@@ -970,9 +970,9 @@ void QStateMachinePrivate::addDescendantStatesToEnter(QAbstractState *state,
if (QHistoryState *h = toHistoryState(state)) {
QList<QAbstractState*> historyConfiguration = QHistoryStatePrivate::get(h)->configuration;
if (!historyConfiguration.isEmpty()) {
- Q_FOREACH (QAbstractState *s, historyConfiguration)
+ foreach (QAbstractState *s, historyConfiguration)
addDescendantStatesToEnter(s, statesToEnter, statesForDefaultEntry);
- Q_FOREACH (QAbstractState *s, historyConfiguration)
+ foreach (QAbstractState *s, historyConfiguration)
addAncestorStatesToEnter(s, state->parentState(), statesToEnter, statesForDefaultEntry);
#ifdef QSTATEMACHINE_DEBUG
@@ -988,9 +988,9 @@ void QStateMachinePrivate::addDescendantStatesToEnter(QAbstractState *state,
if (defaultHistoryContent.isEmpty()) {
setError(QStateMachine::NoDefaultStateInHistoryStateError, h);
} else {
- Q_FOREACH (QAbstractState *s, defaultHistoryContent)
+ foreach (QAbstractState *s, defaultHistoryContent)
addDescendantStatesToEnter(s, statesToEnter, statesForDefaultEntry);
- Q_FOREACH (QAbstractState *s, defaultHistoryContent)
+ foreach (QAbstractState *s, defaultHistoryContent)
addAncestorStatesToEnter(s, state->parentState(), statesToEnter, statesForDefaultEntry);
#ifdef QSTATEMACHINE_DEBUG
qDebug() << q_func() << ": initial history targets for" << state << ':' << defaultHistoryContent;
@@ -1021,7 +1021,7 @@ void QStateMachinePrivate::addDescendantStatesToEnter(QAbstractState *state,
}
} else if (isParallel(state)) {
QState *grp = toStandardState(state);
- Q_FOREACH (QAbstractState *child, QStatePrivate::get(grp)->childStates()) {
+ foreach (QAbstractState *child, QStatePrivate::get(grp)->childStates()) {
if (!containsDecendantOf(statesToEnter, child))
addDescendantStatesToEnter(child, statesToEnter, statesForDefaultEntry);
}
@@ -1044,12 +1044,12 @@ void QStateMachinePrivate::addAncestorStatesToEnter(QAbstractState *s, QAbstract
QSet<QAbstractState*> &statesToEnter,
QSet<QAbstractState*> &statesForDefaultEntry)
{
- Q_FOREACH (QState *anc, getProperAncestors(s, ancestor)) {
+ foreach (QState *anc, getProperAncestors(s, ancestor)) {
if (!anc->parentState())
continue;
statesToEnter.insert(anc);
if (isParallel(anc)) {
- Q_FOREACH (QAbstractState *child, QStatePrivate::get(anc)->childStates()) {
+ foreach (QAbstractState *child, QStatePrivate::get(anc)->childStates()) {
if (!containsDecendantOf(statesToEnter, child))
addDescendantStatesToEnter(child, statesToEnter, statesForDefaultEntry);
}
diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp
index dc2a2d9739..94a245375b 100644
--- a/src/corelib/tools/qpoint.cpp
+++ b/src/corelib/tools/qpoint.cpp
@@ -528,12 +528,8 @@ QDebug operator<<(QDebug dbg, const QPointF &p)
/*!
\fn bool QPointF::isNull() const
- Returns \c true if both the x and y coordinates are set to +0.0;
- otherwise returns \c false.
-
- \note Since this function treats +0.0 and -0.0 differently, points
- with zero-valued coordinates where either or both values have a
- negative sign are not defined to be null points.
+ Returns \c true if both the x and y coordinates are set to 0.0 (ignoring
+ the sign); otherwise returns \c false.
*/
diff --git a/src/corelib/tools/qsize.cpp b/src/corelib/tools/qsize.cpp
index 19227432f2..24a29f0213 100644
--- a/src/corelib/tools/qsize.cpp
+++ b/src/corelib/tools/qsize.cpp
@@ -517,12 +517,8 @@ QDebug operator<<(QDebug dbg, const QSize &s)
/*!
\fn bool QSizeF::isNull() const
- Returns \c true if both the width and height are +0.0; otherwise returns
- false.
-
- \note Since this function treats +0.0 and -0.0 differently, sizes with
- zero width and height where either or both values have a negative
- sign are not defined to be null sizes.
+ Returns \c true if both the width and height are 0.0 (ignoring the sign);
+ otherwise returns \c false.
\sa isValid(), isEmpty()
*/
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 12baecd37c..2eb2dc4550 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -608,16 +608,23 @@ Q_OUTOFLINE_TEMPLATE T QVector<T>::value(int i, const T &defaultValue) const
template <typename T>
void QVector<T>::append(const T &t)
{
- const T copy(t);
const bool isTooSmall = uint(d->size + 1) > d->alloc;
if (!isDetached() || isTooSmall) {
+ const T copy(t);
QArrayData::AllocationOptions opt(isTooSmall ? QArrayData::Grow : QArrayData::Default);
reallocData(d->size, isTooSmall ? d->size + 1 : d->alloc, opt);
+
+ if (QTypeInfo<T>::isComplex)
+ new (d->end()) T(copy);
+ else
+ *d->end() = copy;
+
+ } else {
+ if (QTypeInfo<T>::isComplex)
+ new (d->end()) T(t);
+ else
+ *d->end() = t;
}
- if (QTypeInfo<T>::isComplex)
- new (d->end()) T(copy);
- else
- *d->end() = copy;
++d->size;
}
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index cac3d268c5..8373a5556b 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -2924,14 +2924,22 @@ template<class T> inline void do_mirror_data(QImageData *dst, QImageData *src,
if (dst == src) {
// When mirroring in-place, stop in the middle for one of the directions, since we
// are swapping the bytes instead of merely copying.
- const int srcXEnd = dstX0 ? w / 2 : w;
- const int srcYEnd = !dstX0 && dstY0 ? h / 2 : h;
+ const int srcXEnd = (dstX0 && !dstY0) ? w / 2 : w;
+ const int srcYEnd = dstY0 ? h / 2 : h;
for (int srcY = 0, dstY = dstY0; srcY < srcYEnd; ++srcY, dstY += dstYIncr) {
T *srcPtr = (T *) (src->data + srcY * src->bytes_per_line);
T *dstPtr = (T *) (dst->data + dstY * dst->bytes_per_line);
for (int srcX = 0, dstX = dstX0; srcX < srcXEnd; ++srcX, dstX += dstXIncr)
std::swap(srcPtr[srcX], dstPtr[dstX]);
}
+ // If mirroring both ways, the middle line needs to be mirrored horizontally only.
+ if (dstX0 && dstY0 && (h & 1)) {
+ int srcY = h / 2;
+ int srcXEnd2 = w / 2;
+ T *srcPtr = (T *) (src->data + srcY * src->bytes_per_line);
+ for (int srcX = 0, dstX = dstX0; srcX < srcXEnd2; ++srcX, dstX += dstXIncr)
+ std::swap(srcPtr[srcX], srcPtr[dstX]);
+ }
} else {
for (int srcY = 0, dstY = dstY0; srcY < h; ++srcY, dstY += dstYIncr) {
T *srcPtr = (T *) (src->data + srcY * src->bytes_per_line);
diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp
index 8cb886e09b..28e3a48689 100644
--- a/src/gui/image/qimage_conversions.cpp
+++ b/src/gui/image/qimage_conversions.cpp
@@ -117,7 +117,7 @@ static const uint *QT_FASTCALL convertRGB32ToARGB32PM(uint *buffer, const uint *
return buffer;
}
-#if defined(QT_COMPILER_SUPPORTS_SSE4_1) && !defined(__SSE4_1__)
+#ifdef QT_COMPILER_SUPPORTS_SSE4_1
extern const uint *QT_FASTCALL convertRGB32FromARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
#endif
@@ -144,7 +144,7 @@ void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversio
if (src->format == QImage::Format_RGB32)
convertToARGB32PM = convertRGB32ToARGB32PM;
if (dest->format == QImage::Format_RGB32) {
-#if defined(QT_COMPILER_SUPPORTS_SSE4_1) && !defined(__SSE4_1__)
+#ifdef QT_COMPILER_SUPPORTS_SSE4_1
if (qCpuHasFeature(SSE4_1))
convertFromARGB32PM = convertRGB32FromARGB32PM_sse4;
else
@@ -193,7 +193,7 @@ bool convert_generic_inplace(QImageData *data, QImage::Format dst_format, Qt::Im
if (data->format == QImage::Format_RGB32)
convertToARGB32PM = convertRGB32ToARGB32PM;
if (dst_format == QImage::Format_RGB32) {
-#if defined(QT_COMPILER_SUPPORTS_SSE4_1) && !defined(__SSE4_1__)
+#ifdef QT_COMPILER_SUPPORTS_SSE4_1
if (qCpuHasFeature(SSE4_1))
convertFromARGB32PM = convertRGB32FromARGB32PM_sse4;
else
diff --git a/src/gui/image/qimage_sse4.cpp b/src/gui/image/qimage_sse4.cpp
index fb63f5bff9..5fad4f572a 100644
--- a/src/gui/image/qimage_sse4.cpp
+++ b/src/gui/image/qimage_sse4.cpp
@@ -33,6 +33,7 @@
#include <qimage.h>
#include <private/qdrawhelper_p.h>
+#include <private/qdrawingprimitive_sse2_p.h>
#include <private/qimage_p.h>
#include <private/qsimd_p.h>
@@ -44,7 +45,7 @@ const uint *QT_FASTCALL convertRGB32FromARGB32PM_sse4(uint *buffer, const uint *
const QPixelLayout *, const QRgb *)
{
for (int i = 0; i < count; ++i)
- buffer[i] = 0xff000000 | qUnpremultiply(src[i]);
+ buffer[i] = 0xff000000 | qUnpremultiply_sse4(src[i]);
return buffer;
}
diff --git a/src/gui/math3d/qgenericmatrix.h b/src/gui/math3d/qgenericmatrix.h
index 89bc09f544..c08faaaa8b 100644
--- a/src/gui/math3d/qgenericmatrix.h
+++ b/src/gui/math3d/qgenericmatrix.h
@@ -47,7 +47,6 @@ class QGenericMatrix
public:
QGenericMatrix();
explicit QGenericMatrix(Qt::Initialization) {}
- QGenericMatrix(const QGenericMatrix<N, M, T>& other);
explicit QGenericMatrix(const T *values);
const T& operator()(int row, int column) const;
@@ -93,8 +92,6 @@ private:
#endif
T m[N][M]; // Column-major order to match OpenGL.
- explicit QGenericMatrix(int) {} // Construct without initializing identity matrix.
-
#if !defined(Q_NO_TEMPLATE_FRIENDS)
template <int NN, int MM, typename TT>
friend class QGenericMatrix;
@@ -108,14 +105,6 @@ Q_INLINE_TEMPLATE QGenericMatrix<N, M, T>::QGenericMatrix()
}
template <int N, int M, typename T>
-Q_INLINE_TEMPLATE QGenericMatrix<N, M, T>::QGenericMatrix(const QGenericMatrix<N, M, T>& other)
-{
- for (int col = 0; col < N; ++col)
- for (int row = 0; row < M; ++row)
- m[col][row] = other.m[col][row];
-}
-
-template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>::QGenericMatrix(const T *values)
{
for (int col = 0; col < N; ++col)
@@ -178,7 +167,7 @@ Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T>::fill(T value)
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<M, N, T> QGenericMatrix<N, M, T>::transposed() const
{
- QGenericMatrix<M, N, T> result(1);
+ QGenericMatrix<M, N, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[row][col] = m[col][row];
@@ -246,7 +235,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator/
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator+(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
{
- QGenericMatrix<N, M, T> result(1);
+ QGenericMatrix<N, M, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[col][row] = m1.m[col][row] + m2.m[col][row];
@@ -256,7 +245,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator+(const QGenericMatrix<N, M
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
{
- QGenericMatrix<N, M, T> result(1);
+ QGenericMatrix<N, M, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[col][row] = m1.m[col][row] - m2.m[col][row];
@@ -266,7 +255,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M
template <int N, int M1, int M2, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<M1, M2, T> operator*(const QGenericMatrix<N, M2, T>& m1, const QGenericMatrix<M1, N, T>& m2)
{
- QGenericMatrix<M1, M2, T> result(1);
+ QGenericMatrix<M1, M2, T> result(Qt::Uninitialized);
for (int row = 0; row < M2; ++row) {
for (int col = 0; col < M1; ++col) {
T sum(0.0f);
@@ -281,7 +270,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<M1, M2, T> operator*(const QGenericMatrix<N,
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& matrix)
{
- QGenericMatrix<N, M, T> result(1);
+ QGenericMatrix<N, M, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[col][row] = -matrix.m[col][row];
@@ -291,7 +280,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator*(T factor, const QGenericMatrix<N, M, T>& matrix)
{
- QGenericMatrix<N, M, T> result(1);
+ QGenericMatrix<N, M, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[col][row] = matrix.m[col][row] * factor;
@@ -301,7 +290,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator*(T factor, const QGenericM
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator*(const QGenericMatrix<N, M, T>& matrix, T factor)
{
- QGenericMatrix<N, M, T> result(1);
+ QGenericMatrix<N, M, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[col][row] = matrix.m[col][row] * factor;
@@ -311,7 +300,7 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator*(const QGenericMatrix<N, M
template <int N, int M, typename T>
Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator/(const QGenericMatrix<N, M, T>& matrix, T divisor)
{
- QGenericMatrix<N, M, T> result(1);
+ QGenericMatrix<N, M, T> result(Qt::Uninitialized);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[col][row] = matrix.m[col][row] / divisor;
diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h
index 240e31a5c2..52c717072d 100644
--- a/src/gui/math3d/qquaternion.h
+++ b/src/gui/math3d/qquaternion.h
@@ -266,7 +266,7 @@ inline bool operator==(const QQuaternion &q1, const QQuaternion &q2)
inline bool operator!=(const QQuaternion &q1, const QQuaternion &q2)
{
- return q1.xp != q2.xp || q1.yp != q2.yp || q1.zp != q2.zp || q1.wp != q2.wp;
+ return !operator==(q1, q2);
}
inline const QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2)
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index b3f9fd9f60..e46e997f1d 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -6352,22 +6352,24 @@ void qInitDrawhelperAsm()
}
#endif // SSSE3
-#if defined(QT_COMPILER_SUPPORTS_SSE4_1) && !defined(__SSE4_1__)
+#if QT_COMPILER_SUPPORTS_SSE4_1
if (qCpuHasFeature(SSE4_1)) {
+#if !defined(__SSE4_1__)
extern const uint *QT_FASTCALL convertARGB32ToARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
extern const uint *QT_FASTCALL convertRGBA8888ToARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
+ qPixelLayouts[QImage::Format_ARGB32].convertToARGB32PM = convertARGB32ToARGB32PM_sse4;
+ qPixelLayouts[QImage::Format_RGBA8888].convertToARGB32PM = convertRGBA8888ToARGB32PM_sse4;
+#endif
extern const uint *QT_FASTCALL convertARGB32FromARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
extern const uint *QT_FASTCALL convertRGBA8888FromARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
extern const uint *QT_FASTCALL convertRGBXFromARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
- qPixelLayouts[QImage::Format_ARGB32].convertToARGB32PM = convertARGB32ToARGB32PM_sse4;
- qPixelLayouts[QImage::Format_RGBA8888].convertToARGB32PM = convertRGBA8888ToARGB32PM_sse4;
qPixelLayouts[QImage::Format_ARGB32].convertFromARGB32PM = convertARGB32FromARGB32PM_sse4;
qPixelLayouts[QImage::Format_RGBA8888].convertFromARGB32PM = convertRGBA8888FromARGB32PM_sse4;
qPixelLayouts[QImage::Format_RGBX8888].convertFromARGB32PM = convertRGBXFromARGB32PM_sse4;
}
#endif
-#if defined(QT_COMPILER_SUPPORTS_AVX2) && !defined(__AVX2__)
+#if QT_COMPILER_SUPPORTS_AVX2 && !defined(__AVX2__)
if (qCpuHasFeature(AVX2)) {
extern const uint *QT_FASTCALL convertARGB32ToARGB32PM_avx2(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
extern const uint *QT_FASTCALL convertRGBA8888ToARGB32PM_avx2(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
diff --git a/src/gui/painting/qdrawhelper_sse4.cpp b/src/gui/painting/qdrawhelper_sse4.cpp
index 8e0b2cbb18..43a3958997 100644
--- a/src/gui/painting/qdrawhelper_sse4.cpp
+++ b/src/gui/painting/qdrawhelper_sse4.cpp
@@ -32,6 +32,7 @@
****************************************************************************/
#include <private/qdrawhelper_p.h>
+#include <private/qdrawingprimitive_sse2_p.h>
#if defined(QT_COMPILER_SUPPORTS_SSE4_1)
@@ -53,7 +54,7 @@ const uint *QT_FASTCALL convertARGB32FromARGB32PM_sse4(uint *buffer, const uint
const QPixelLayout *, const QRgb *)
{
for (int i = 0; i < count; ++i)
- buffer[i] = qUnpremultiply(src[i]);
+ buffer[i] = qUnpremultiply_sse4(src[i]);
return buffer;
}
@@ -61,7 +62,7 @@ const uint *QT_FASTCALL convertRGBA8888FromARGB32PM_sse4(uint *buffer, const uin
const QPixelLayout *, const QRgb *)
{
for (int i = 0; i < count; ++i)
- buffer[i] = ARGB2RGBA(qUnpremultiply(src[i]));
+ buffer[i] = ARGB2RGBA(qUnpremultiply_sse4(src[i]));
return buffer;
}
@@ -69,7 +70,7 @@ const uint *QT_FASTCALL convertRGBXFromARGB32PM_sse4(uint *buffer, const uint *s
const QPixelLayout *, const QRgb *)
{
for (int i = 0; i < count; ++i)
- buffer[i] = ARGB2RGBA(0xff000000 | qUnpremultiply(src[i]));
+ buffer[i] = ARGB2RGBA(0xff000000 | qUnpremultiply_sse4(src[i]));
return buffer;
}
diff --git a/src/gui/painting/qdrawingprimitive_sse2_p.h b/src/gui/painting/qdrawingprimitive_sse2_p.h
index fbee06e157..1a7dddf0d5 100644
--- a/src/gui/painting/qdrawingprimitive_sse2_p.h
+++ b/src/gui/painting/qdrawingprimitive_sse2_p.h
@@ -236,4 +236,27 @@ QT_END_NAMESPACE
#endif // __SSE2__
+QT_BEGIN_NAMESPACE
+#if QT_COMPILER_SUPPORTS_HERE(SSE4_1)
+QT_FUNCTION_TARGET(SSE4_1)
+inline QRgb qUnpremultiply_sse4(QRgb p)
+{
+ const uint alpha = qAlpha(p);
+ if (alpha == 255 || alpha == 0)
+ return p;
+ const uint invAlpha = qt_inv_premul_factor[alpha];
+ const __m128i via = _mm_set1_epi32(invAlpha);
+ const __m128i vr = _mm_set1_epi32(0x8000);
+ __m128i vl = _mm_cvtepu8_epi32(_mm_cvtsi32_si128(p));
+ vl = _mm_mullo_epi32(vl, via);
+ vl = _mm_add_epi32(vl, vr);
+ vl = _mm_srai_epi32(vl, 16);
+ vl = _mm_insert_epi32(vl, alpha, 3);
+ vl = _mm_packus_epi32(vl, vl);
+ vl = _mm_packus_epi16(vl, vl);
+ return _mm_cvtsi128_si32(vl);
+}
+#endif
+QT_END_NAMESPACE
+
#endif // QDRAWINGPRIMITIVE_SSE2_P_H
diff --git a/src/gui/painting/qrgb.h b/src/gui/painting/qrgb.h
index 05b3a76bce..f7f2185bef 100644
--- a/src/gui/painting/qrgb.h
+++ b/src/gui/painting/qrgb.h
@@ -36,11 +36,6 @@
#include <QtCore/qglobal.h>
#include <QtCore/qprocessordetection.h>
-#if defined(__SSE4_1__)
-#include <smmintrin.h>
-#elif defined(__SSE2__)
-#include <emmintrin.h>
-#endif
QT_BEGIN_NAMESPACE
@@ -92,45 +87,19 @@ inline Q_DECL_RELAXED_CONSTEXPR QRgb qPremultiply(QRgb x)
Q_GUI_EXPORT extern const uint qt_inv_premul_factor[];
-#if defined(__SSE2__)
-inline QRgb qUnpremultiply(QRgb p)
-{
- const uint alpha = qAlpha(p);
- if (alpha == 255 || alpha == 0)
- return p;
- const uint invAlpha = qt_inv_premul_factor[alpha];
- const __m128i via = _mm_set1_epi32(invAlpha);
- const __m128i vr = _mm_set1_epi32(0x8000);
-#ifdef __SSE4_1__
- __m128i vl = _mm_cvtepu8_epi32(_mm_cvtsi32_si128(p));
- vl = _mm_mullo_epi32(vl, via);
-#else
- __m128i vl = _mm_unpacklo_epi8(_mm_cvtsi32_si128(p), _mm_setzero_si128());
- vl = _mm_unpacklo_epi16(vl, vl);
- __m128i vll = _mm_mullo_epi16(vl, via);
- __m128i vlh = _mm_mulhi_epu16(vl, via);
- vl = _mm_add_epi32(vll, _mm_slli_epi32(vlh, 16));
-#endif
- vl = _mm_add_epi32(vl, vr);
- vl = _mm_srli_epi32(vl, 16);
- vl = _mm_packs_epi32(vl, _mm_setzero_si128());
- vl = _mm_insert_epi16(vl, alpha, 3);
- vl = _mm_packus_epi16(vl, _mm_setzero_si128());
- return _mm_cvtsi128_si32(vl);
-}
-#else
inline QRgb qUnpremultiply(QRgb p)
{
const uint alpha = qAlpha(p);
// Alpha 255 and 0 are the two most common values, which makes them beneficial to short-cut.
- if (alpha == 255 || alpha == 0)
+ if (alpha == 255)
return p;
+ if (alpha == 0)
+ return 0;
// (p*(0x00ff00ff/alpha)) >> 16 == (p*255)/alpha for all p and alpha <= 256.
const uint invAlpha = qt_inv_premul_factor[alpha];
// We add 0x8000 to get even rounding. The rounding also ensures that qPremultiply(qUnpremultiply(p)) == p for all p.
return qRgba((qRed(p)*invAlpha + 0x8000)>>16, (qGreen(p)*invAlpha + 0x8000)>>16, (qBlue(p)*invAlpha + 0x8000)>>16, alpha);
}
-#endif
QT_END_NAMESPACE
diff --git a/src/openglextensions/qopenglextensions.cpp b/src/openglextensions/qopenglextensions.cpp
index 2101e5546c..37c5a5d1f0 100644
--- a/src/openglextensions/qopenglextensions.cpp
+++ b/src/openglextensions/qopenglextensions.cpp
@@ -6941,7 +6941,7 @@ bool QOpenGLExtension_OES_EGL_image::initializeOpenGLFunctions()
Q_D(QOpenGLExtension_OES_EGL_image);
d->EGLImageTargetTexture2DOES = (void (QOPENGLF_APIENTRYP)(GLenum target, GLeglImageOES image))context->getProcAddress("glEGLImageTargetTexture2DOES");
- d->EGLImageTargetRenderbufferStorageOES = (void (QOPENGLF_APIENTRYP)(GLenum target, GLeglImageOES image))context->getProcAddress("glEGLImageTargetRenderbufferStorageOESs");
+ d->EGLImageTargetRenderbufferStorageOES = (void (QOPENGLF_APIENTRYP)(GLenum target, GLeglImageOES image))context->getProcAddress("glEGLImageTargetRenderbufferStorageOES");
return QAbstractOpenGLExtension::initializeOpenGLFunctions();
}
diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
index ec80bf0f8c..315a0faac0 100644
--- a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
@@ -73,19 +73,10 @@ void QAndroidPlatformForeignWindow::raise()
void QAndroidPlatformForeignWindow::setGeometry(const QRect &rect)
{
- QWindow *parent = window()->parent();
- QRect newGeometry = rect;
-
- if (parent != 0)
- newGeometry.moveTo(parent->mapToGlobal(rect.topLeft()));
-
- if (newGeometry == geometry())
- return;
-
- QAndroidPlatformWindow::setGeometry(newGeometry);
+ QAndroidPlatformWindow::setGeometry(rect);
if (m_surfaceId != -1)
- QtAndroid::setSurfaceGeometry(m_surfaceId, newGeometry);
+ QtAndroid::setSurfaceGeometry(m_surfaceId, rect);
}
void QAndroidPlatformForeignWindow::setVisible(bool visible)
@@ -118,18 +109,7 @@ void QAndroidPlatformForeignWindow::applicationStateChanged(Qt::ApplicationState
void QAndroidPlatformForeignWindow::setParent(const QPlatformWindow *window)
{
- QRect newGeometry = geometry();
-
- if (window != 0)
- newGeometry.moveTo(window->mapToGlobal(geometry().topLeft()));
-
- if (newGeometry != geometry())
- QAndroidPlatformWindow::setGeometry(newGeometry);
-
- if (m_surfaceId == -1)
- return;
-
- QtAndroid::setSurfaceGeometry(m_surfaceId, newGeometry);
+ Q_UNUSED(window);
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoaapplication.mm b/src/plugins/platforms/cocoa/qcocoaapplication.mm
index 79399e4183..227ab05c25 100644
--- a/src/plugins/platforms/cocoa/qcocoaapplication.mm
+++ b/src/plugins/platforms/cocoa/qcocoaapplication.mm
@@ -133,7 +133,7 @@ static const QByteArray q_macLocalEventType = QByteArrayLiteral("mac_generic_NSE
return true;
if ([event type] == NSApplicationDefined) {
- switch ([event subtype]) {
+ switch (static_cast<short>([event subtype])) {
case QtCocoaEventSubTypePostMessage:
[NSApp QT_MANGLE_NAMESPACE(qt_sendPostedMessage):event];
return true;
diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.mm b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
index 0eafae1f2d..c22fe8774b 100644
--- a/src/plugins/platforms/cocoa/qcocoainputcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
@@ -99,9 +99,8 @@ void QCocoaInputContext::reset()
return;
QCocoaAutoReleasePool pool;
- NSInputManager *currentIManager = [NSInputManager currentInputManager];
- if (currentIManager) {
- [currentIManager markedTextAbandoned:view];
+ if (NSTextInputContext *ctxt = [NSTextInputContext currentInputContext]) {
+ [ctxt discardMarkedText];
[view unmarkText];
}
}
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 25a92d2868..3c12228ef6 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -704,8 +704,10 @@ QT_WARNING_POP
}
// Popups implicitly grap mouse events; forward to the active popup if there is one
- if (QCocoaWindow *popup = QCocoaIntegration::instance()->activePopupWindow())
- targetView = popup->contentView();
+ if (QCocoaWindow *popup = QCocoaIntegration::instance()->activePopupWindow()) {
+ if (QNSView *popupView = popup->qtView())
+ targetView = popupView;
+ }
[targetView convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint];
ulong timestamp = [theEvent timestamp] * 1000;
@@ -757,12 +759,13 @@ QT_WARNING_POP
NSPoint windowPoint = [theEvent locationInWindow];
int windowScreenY = [window frame].origin.y + [window frame].size.height;
- int viewScreenY = [window convertBaseToScreen:[self convertPoint:[self frame].origin toView:nil]].y;
+ NSPoint windowCoord = [self convertPoint:[self frame].origin toView:nil];
+ int viewScreenY = [window convertRectToScreen:NSMakeRect(windowCoord.x, windowCoord.y, 0, 0)].origin.y;
int titleBarHeight = windowScreenY - viewScreenY;
NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil];
QPoint qtWindowPoint = QPoint(nsViewPoint.x, titleBarHeight + nsViewPoint.y);
- NSPoint screenPoint = [window convertBaseToScreen:windowPoint];
+ NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 0, 0)].origin;
QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y));
ulong timestamp = [theEvent timestamp] * 1000;
@@ -808,10 +811,7 @@ QT_WARNING_POP
}
if ([self hasMarkedText]) {
- NSInputManager* inputManager = [NSInputManager currentInputManager];
- if ([inputManager wantsToHandleMouseEvents]) {
- [inputManager handleMouseEvent:theEvent];
- }
+ [[NSTextInputContext currentInputContext] handleEvent:theEvent];
} else {
if ([QNSView convertKeyModifiers:[theEvent modifierFlags]] & Qt::MetaModifier) {
m_buttons |= Qt::RightButton;
@@ -1983,7 +1983,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
QPoint qtWindowPoint(windowPoint.x, windowPoint.y);
NSWindow *window = [self window];
- NSPoint screenPoint = [window convertBaseToScreen :point];
+ NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(point.x, point.y, 0, 0)].origin;
QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y));
QWindowSystemInterface::handleMouseEvent(target, mapWindowCoordinates(m_window, target, qtWindowPoint), qtScreenPoint, m_buttons);
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index b979dc6c4e..28fb3b6498 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -1631,6 +1631,8 @@ QStringList QWindowsFontDatabase::extraTryFontsForFamily(const QString &family)
++tf;
}
}
+ result.append(QStringLiteral("Segoe UI Emoji"));
+ result.append(QStringLiteral("Segoe UI Symbol"));
return result;
}
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
index 2bc9c00a94..397ee22987 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
@@ -483,7 +483,7 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
success = glXMakeContextCurrent(m_display, glxDrawable, glxDrawable, m_context);
}
- if (success) {
+ if (success && surfaceClass == QSurface::Window) {
int interval = surface->format().swapInterval();
QXcbScreen *screen = screenForPlatformSurface(surface);
if (interval >= 0 && m_swapInterval != interval && screen) {
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
index 8500aa1ffa..5d32eb7614 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -306,7 +306,6 @@ void QXcbConnection::initializeScreens()
m_virtualDesktops.append(virtualDesktop);
QList<QPlatformScreen *> siblings;
int outputCount = 0;
- int connectedOutputCount = 0;
if (has_randr_extension) {
xcb_generic_error_t *error = NULL;
// RRGetScreenResourcesCurrent is fast but it may return nothing if the
@@ -375,7 +374,6 @@ void QXcbConnection::initializeScreens()
QXcbScreen *screen = createScreen(virtualDesktop, outputs[i], output.data());
siblings << screen;
- ++connectedOutputCount;
hasOutputs = true;
m_screens << screen;
diff --git a/src/printsupport/kernel/qprintdevice.cpp b/src/printsupport/kernel/qprintdevice.cpp
index e645442be2..7c18b53e09 100644
--- a/src/printsupport/kernel/qprintdevice.cpp
+++ b/src/printsupport/kernel/qprintdevice.cpp
@@ -34,6 +34,8 @@
#include "qprintdevice_p.h"
#include "qplatformprintdevice.h"
+#include <private/qdebug_p.h>
+
QT_BEGIN_NAMESPACE
#ifndef QT_NO_PRINTER
@@ -244,6 +246,59 @@ QList<QMimeType> QPrintDevice::supportedMimeTypes() const
}
#endif // QT_NO_MIMETYPE
+# ifndef QT_NO_DEBUG_STREAM
+void QPrintDevice::format(QDebug debug) const
+{
+ QDebugStateSaver saver(debug);
+ debug.noquote();
+ debug.nospace();
+ if (isValid()) {
+ const QString deviceId = id();
+ const QString deviceName = name();
+ debug << "id=\"" << deviceId << "\", state=" << state();
+ if (!deviceName.isEmpty() && deviceName != deviceId)
+ debug << ", name=\"" << deviceName << '"';
+ if (!location().isEmpty())
+ debug << ", location=\"" << location() << '"';
+ debug << ", makeAndModel=\"" << makeAndModel() << '"';
+ if (isDefault())
+ debug << ", default";
+ if (isRemote())
+ debug << ", remote";
+ debug << ", defaultPageSize=" << defaultPageSize();
+ if (supportsCustomPageSizes())
+ debug << ", supportsCustomPageSizes";
+ debug << ", physicalPageSize=(";
+ QtDebugUtils::formatQSize(debug, minimumPhysicalPageSize());
+ debug << ")..(";
+ QtDebugUtils::formatQSize(debug, maximumPhysicalPageSize());
+ debug << "), defaultResolution=" << defaultResolution()
+ << ", defaultDuplexMode=" << defaultDuplexMode()
+ << ", defaultColorMode="<< defaultColorMode();
+# ifndef QT_NO_MIMETYPE
+ const QList<QMimeType> mimeTypes = supportedMimeTypes();
+ if (const int mimeTypeCount = mimeTypes.size()) {
+ debug << ", supportedMimeTypes=(";
+ for (int i = 0; i < mimeTypeCount; ++i)
+ debug << " \"" << mimeTypes.at(i).name() << '"';
+ debug << ')';
+ }
+# endif // !QT_NO_MIMETYPE
+ } else {
+ debug << "null";
+ }
+}
+
+QDebug operator<<(QDebug debug, const QPrintDevice &p)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace();
+ debug << "QPrintDevice(";
+ p.format(debug);
+ debug << ')';
+ return debug;
+}
+# endif // QT_NO_DEBUG_STREAM
#endif // QT_NO_PRINTER
QT_END_NAMESPACE
diff --git a/src/printsupport/kernel/qprintdevice_p.h b/src/printsupport/kernel/qprintdevice_p.h
index 6117239ac7..ad55cded0e 100644
--- a/src/printsupport/kernel/qprintdevice_p.h
+++ b/src/printsupport/kernel/qprintdevice_p.h
@@ -57,6 +57,7 @@ QT_BEGIN_NAMESPACE
class QPlatformPrintDevice;
class QMarginsF;
class QMimeType;
+class QDebug;
class Q_PRINTSUPPORT_EXPORT QPrintDevice
{
@@ -127,6 +128,10 @@ public:
QList<QMimeType> supportedMimeTypes() const;
#endif
+# ifndef QT_NO_DEBUG_STREAM
+ void format(QDebug debug) const;
+# endif
+
private:
friend class QPlatformPrinterSupport;
friend class QPlatformPrintDevice;
@@ -136,6 +141,9 @@ private:
Q_DECLARE_SHARED(QPrintDevice)
+# ifndef QT_NO_DEBUG_STREAM
+Q_PRINTSUPPORT_EXPORT QDebug operator<<(QDebug debug, const QPrintDevice &);
+# endif
#endif // QT_NO_PRINTER
QT_END_NAMESPACE
diff --git a/src/printsupport/kernel/qprinterinfo.cpp b/src/printsupport/kernel/qprinterinfo.cpp
index 33d67e3a55..ad488a10ed 100644
--- a/src/printsupport/kernel/qprinterinfo.cpp
+++ b/src/printsupport/kernel/qprinterinfo.cpp
@@ -31,6 +31,8 @@
#ifndef QT_NO_PRINTER
+#include <QtCore/qdebug.h>
+
#include <qpa/qplatformprintplugin.h>
#include <qpa/qplatformprintersupport.h>
@@ -469,6 +471,21 @@ QPrinterInfo QPrinterInfo::printerInfo(const QString &printerName)
return QPrinterInfo(printerName);
}
+# ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug debug, const QPrinterInfo &p)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace();
+ debug << "QPrinterInfo(";
+ if (p.isNull())
+ debug << "null";
+ else
+ p.d_ptr->m_printDevice.format(debug);
+ debug << ')';
+ return debug;
+}
+# endif // !QT_NO_DEBUG_STREAM
+
QT_END_NAMESPACE
#endif // QT_NO_PRINTER
diff --git a/src/printsupport/kernel/qprinterinfo.h b/src/printsupport/kernel/qprinterinfo.h
index f13dbc5cd6..39e44d4a0c 100644
--- a/src/printsupport/kernel/qprinterinfo.h
+++ b/src/printsupport/kernel/qprinterinfo.h
@@ -46,6 +46,7 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_PRINTER
class QPrinterInfoPrivate;
class QPrinterInfoPrivateDeleter;
+class QDebug;
class Q_PRINTSUPPORT_EXPORT QPrinterInfo
{
public:
@@ -98,6 +99,9 @@ private:
private:
friend class QPlatformPrinterSupport;
+# ifndef QT_NO_DEBUG_STREAM
+ friend Q_PRINTSUPPORT_EXPORT QDebug operator<<(QDebug debug, const QPrinterInfo &);
+# endif
Q_DECLARE_PRIVATE(QPrinterInfo)
QScopedPointer<QPrinterInfoPrivate, QPrinterInfoPrivateDeleter> d_ptr;
};
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index b8f9c472b9..d901008e00 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -1237,6 +1237,9 @@ bool QMYSQLDriver::open(const QString& db,
QString unixSocket;
#if MYSQL_VERSION_ID >= 50000
my_bool reconnect=false;
+ uint connectTimeout = 0;
+ uint readTimeout = 0;
+ uint writeTimeout = 0;
#endif
// extract the real options from the string
@@ -1252,6 +1255,12 @@ bool QMYSQLDriver::open(const QString& db,
else if (opt == QLatin1String("MYSQL_OPT_RECONNECT")) {
if (val == QLatin1String("TRUE") || val == QLatin1String("1") || val.isEmpty())
reconnect = true;
+ } else if (opt == QLatin1String("MYSQL_OPT_CONNECT_TIMEOUT")) {
+ connectTimeout = val.toInt();
+ } else if (opt == QLatin1String("MYSQL_OPT_READ_TIMEOUT")) {
+ readTimeout = val.toInt();
+ } else if (opt == QLatin1String("MYSQL_OPT_WRITE_TIMEOUT")) {
+ writeTimeout = val.toInt();
}
#endif
else if (val == QLatin1String("TRUE") || val == QLatin1String("1"))
@@ -1264,8 +1273,16 @@ bool QMYSQLDriver::open(const QString& db,
}
}
- if ((d->mysql = mysql_init((MYSQL*) 0)) &&
- mysql_real_connect(d->mysql,
+ if ((d->mysql = mysql_init((MYSQL*) 0))) {
+#if MYSQL_VERSION_ID >= 50000
+ if (connectTimeout != 0)
+ mysql_options(d->mysql, MYSQL_OPT_CONNECT_TIMEOUT, &connectTimeout);
+ if (readTimeout != 0)
+ mysql_options(d->mysql, MYSQL_OPT_READ_TIMEOUT, &readTimeout);
+ if (writeTimeout != 0)
+ mysql_options(d->mysql, MYSQL_OPT_WRITE_TIMEOUT, &writeTimeout);
+#endif
+ if (mysql_real_connect(d->mysql,
host.isNull() ? static_cast<const char *>(0)
: host.toLocal8Bit().constData(),
user.isNull() ? static_cast<const char *>(0)
@@ -1277,18 +1294,18 @@ bool QMYSQLDriver::open(const QString& db,
(port > -1) ? port : 0,
unixSocket.isNull() ? static_cast<const char *>(0)
: unixSocket.toLocal8Bit().constData(),
- optionFlags))
- {
- if (!db.isEmpty() && mysql_select_db(d->mysql, db.toLocal8Bit().constData())) {
- setLastError(qMakeError(tr("Unable to open database '%1'").arg(db), QSqlError::ConnectionError, d));
- mysql_close(d->mysql);
- setOpenError(true);
- return false;
- }
+ optionFlags)) {
+ if (!db.isEmpty() && mysql_select_db(d->mysql, db.toLocal8Bit().constData())) {
+ setLastError(qMakeError(tr("Unable to open database '%1'").arg(db), QSqlError::ConnectionError, d));
+ mysql_close(d->mysql);
+ setOpenError(true);
+ return false;
+ }
#if MYSQL_VERSION_ID >= 50000
- if(reconnect)
- mysql_options(d->mysql, MYSQL_OPT_RECONNECT, &reconnect);
+ if (reconnect)
+ mysql_options(d->mysql, MYSQL_OPT_RECONNECT, &reconnect);
#endif
+ }
} else {
setLastError(qMakeError(tr("Unable to connect"),
QSqlError::ConnectionError, d));
diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp
index 7bffb05a08..240e19bf20 100644
--- a/src/sql/kernel/qsqldatabase.cpp
+++ b/src/sql/kernel/qsqldatabase.cpp
@@ -1224,6 +1224,9 @@ QSqlRecord QSqlDatabase::record(const QString& tablename) const
\li CLIENT_INTERACTIVE
\li UNIX_SOCKET
\li MYSQL_OPT_RECONNECT
+ \li MYSQL_OPT_CONNECT_TIMEOUT
+ \li MYSQL_OPT_READ_TIMEOUT
+ \li MYSQL_OPT_WRITE_TIMEOUT
\endlist
\li
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index a9e33da01d..7300429fe0 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -140,7 +140,8 @@ bool Moc::parseClassHead(ClassDef *def)
}
} while (test(COMMA));
- if (knownGadgets.contains(def->superclassList.first().first)) {
+ if (!def->superclassList.isEmpty()
+ && knownGadgets.contains(def->superclassList.first().first)) {
// Q_GADGET subclasses are treated as Q_GADGETs
knownGadgets.insert(def->classname, def->qualified);
knownGadgets.insert(def->qualified, def->qualified);
diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp
index 99dec06233..2fdba5483a 100644
--- a/src/tools/qdoc/generator.cpp
+++ b/src/tools/qdoc/generator.cpp
@@ -419,6 +419,59 @@ QString Generator::fileName(const Node* node) const
return name;
}
+QString Generator::cleanRef(const QString& ref)
+{
+ QString clean;
+
+ if (ref.isEmpty())
+ return clean;
+
+ clean.reserve(ref.size() + 20);
+ const QChar c = ref[0];
+ const uint u = c.unicode();
+
+ if ((u >= 'a' && u <= 'z') ||
+ (u >= 'A' && u <= 'Z') ||
+ (u >= '0' && u <= '9')) {
+ clean += c;
+ } else if (u == '~') {
+ clean += "dtor.";
+ } else if (u == '_') {
+ clean += "underscore.";
+ } else {
+ clean += QLatin1Char('A');
+ }
+
+ for (int i = 1; i < (int) ref.length(); i++) {
+ const QChar c = ref[i];
+ const uint u = c.unicode();
+ if ((u >= 'a' && u <= 'z') ||
+ (u >= 'A' && u <= 'Z') ||
+ (u >= '0' && u <= '9') || u == '-' ||
+ u == '_' || u == ':' || u == '.') {
+ clean += c;
+ } else if (c.isSpace()) {
+ clean += QLatin1Char('-');
+ } else if (u == '!') {
+ clean += "-not";
+ } else if (u == '&') {
+ clean += "-and";
+ } else if (u == '<') {
+ clean += "-lt";
+ } else if (u == '=') {
+ clean += "-eq";
+ } else if (u == '>') {
+ clean += "-gt";
+ } else if (u == '#') {
+ clean += QLatin1Char('#');
+ } else {
+ clean += QLatin1Char('-');
+ clean += QString::number((int)u, 16);
+ }
+ }
+ return clean;
+}
+
QMap<QString, QString>& Generator::formattingLeftMap()
{
return fmtLeftMaps[format()];
@@ -521,10 +574,10 @@ QString Generator::fullDocumentLocation(const Node *node, bool useSubdir)
return fullDocumentLocation(functionNode->associatedProperty());
else if (functionNode->overloadNumber() > 1)
- anchorRef = QLatin1Char('#') + functionNode->name()
+ anchorRef = QLatin1Char('#') + cleanRef(functionNode->name())
+ QLatin1Char('-') + QString::number(functionNode->overloadNumber());
else
- anchorRef = QLatin1Char('#') + functionNode->name();
+ anchorRef = QLatin1Char('#') + cleanRef(functionNode->name());
break;
}
/*
diff --git a/src/tools/qdoc/generator.h b/src/tools/qdoc/generator.h
index 8f7e293eb3..535b508595 100644
--- a/src/tools/qdoc/generator.h
+++ b/src/tools/qdoc/generator.h
@@ -103,6 +103,7 @@ public:
static bool useOutputSubdirs() { return useOutputSubdirs_; }
static void setQmlTypeContext(QmlTypeNode* t) { qmlTypeContext_ = t; }
static QmlTypeNode* qmlTypeContext() { return qmlTypeContext_; }
+ static QString cleanRef(const QString& ref);
protected:
virtual void beginSubPage(const Aggregate* node, const QString& fileName);
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index 058fb38c17..7509af868a 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -3355,7 +3355,7 @@ void HtmlGenerator::generateSectionInheritedList(const Section& section, const N
out() << section.pluralMember;
}
out() << " inherited from <a href=\"" << fileName((*p).first)
- << '#' << HtmlGenerator::cleanRef(section.name.toLower()) << "\">"
+ << '#' << Generator::cleanRef(section.name.toLower()) << "\">"
<< protectEnc((*p).first->plainFullName(relative))
<< "</a></li>\n";
++p;
@@ -3610,62 +3610,9 @@ void HtmlGenerator::generateLink(const Atom* atom, CodeMarker* marker)
}
}
-QString HtmlGenerator::cleanRef(const QString& ref)
-{
- QString clean;
-
- if (ref.isEmpty())
- return clean;
-
- clean.reserve(ref.size() + 20);
- const QChar c = ref[0];
- const uint u = c.unicode();
-
- if ((u >= 'a' && u <= 'z') ||
- (u >= 'A' && u <= 'Z') ||
- (u >= '0' && u <= '9')) {
- clean += c;
- } else if (u == '~') {
- clean += "dtor.";
- } else if (u == '_') {
- clean += "underscore.";
- } else {
- clean += QLatin1Char('A');
- }
-
- for (int i = 1; i < (int) ref.length(); i++) {
- const QChar c = ref[i];
- const uint u = c.unicode();
- if ((u >= 'a' && u <= 'z') ||
- (u >= 'A' && u <= 'Z') ||
- (u >= '0' && u <= '9') || u == '-' ||
- u == '_' || u == ':' || u == '.') {
- clean += c;
- } else if (c.isSpace()) {
- clean += QLatin1Char('-');
- } else if (u == '!') {
- clean += "-not";
- } else if (u == '&') {
- clean += "-and";
- } else if (u == '<') {
- clean += "-lt";
- } else if (u == '=') {
- clean += "-eq";
- } else if (u == '>') {
- clean += "-gt";
- } else if (u == '#') {
- clean += QLatin1Char('#');
- } else {
- clean += QLatin1Char('-');
- clean += QString::number((int)u, 16);
- }
- }
- return clean;
-}
-
QString HtmlGenerator::registerRef(const QString& ref)
{
- QString clean = HtmlGenerator::cleanRef(ref);
+ QString clean = Generator::cleanRef(ref);
for (;;) {
QString& prevRef = refMap[clean.toLower()];
diff --git a/src/tools/qdoc/htmlgenerator.h b/src/tools/qdoc/htmlgenerator.h
index fe710024e0..615de8e8a3 100644
--- a/src/tools/qdoc/htmlgenerator.h
+++ b/src/tools/qdoc/htmlgenerator.h
@@ -85,7 +85,6 @@ public:
QString protectEnc(const QString &string);
static QString protect(const QString &string, const QString &encoding = "ISO-8859-1");
- static QString cleanRef(const QString& ref);
static QString sinceTitle(int i) { return sinceTitles[i]; }
protected:
diff --git a/src/tools/qdoc/tree.cpp b/src/tools/qdoc/tree.cpp
index ca044ff78f..0da963fe0b 100644
--- a/src/tools/qdoc/tree.cpp
+++ b/src/tools/qdoc/tree.cpp
@@ -388,7 +388,6 @@ void Tree::resolveInheritanceHelper(int pass, ClassNode* cn)
while (b != bases.end()) {
if (!(*b).node_) {
Node* n = qdb_->findClassNode((*b).path_);
-#if 0
/*
If the node for the base class was not found,
the reason might be that the subclass is in a
@@ -401,9 +400,11 @@ void Tree::resolveInheritanceHelper(int pass, ClassNode* cn)
*/
if (!n) {
Aggregate* parent = cn->parent();
- n = findClassNode((*b).path_, parent);
+ if (parent)
+ // Exclude the root namespace
+ if (parent->isNamespace() && !parent->name().isEmpty())
+ n = findClassNode((*b).path_, parent);
}
-#endif
if (n) {
ClassNode* bcn = static_cast<ClassNode*>(n);
(*b).node_ = bcn;
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 78f243a6d3..b02e2dc0ed 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -1176,6 +1176,7 @@ void WriteInitialization::writeProperties(const QString &varName,
continue;
QString propertyName = p->attributeName();
QString propertyValue;
+ bool delayProperty = false;
// special case for the property `geometry': Do not use position
if (isTopLevel && propertyName == QLatin1String("geometry") && p->elementRect()) {
@@ -1204,6 +1205,10 @@ void WriteInitialization::writeProperties(const QString &varName,
&& m_uic->customWidgetsInfo()->extends(className, QLatin1String("QAxWidget"))) {
// already done ;)
continue;
+ } else if (propertyName == QLatin1String("default")
+ && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QPushButton"))) {
+ // QTBUG-44406: Setting of QPushButton::default needs to be delayed until the parent is set
+ delayProperty = true;
} else if (propertyName == QLatin1String("database")
&& p->elementStringList()) {
// Sql support
@@ -1479,7 +1484,7 @@ void WriteInitialization::writeProperties(const QString &varName,
else if (propertyName == QLatin1String("accessibleName") || propertyName == QLatin1String("accessibleDescription"))
defineC = accessibilityDefineC;
- QTextStream &o = autoTrOutput(p);
+ QTextStream &o = delayProperty ? m_delayedOut : autoTrOutput(p);
if (defineC)
openIfndef(o, QLatin1String(defineC));
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index ed10beddd4..dd7474b930 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -2312,7 +2312,6 @@ QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool
*/
void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave, const QPointF &globalPosF)
{
- const QPoint globalPos = globalPosF.toPoint();
#if 0
if (leave) {
QEvent e(QEvent::Leave);
@@ -2399,6 +2398,10 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave, con
}
}
if (!enterList.isEmpty()) {
+ // Guard against QGuiApplicationPrivate::lastCursorPosition initialized to qInf(), qInf().
+ const QPoint globalPos = qIsInf(globalPosF.x())
+ ? QPoint(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)
+ : globalPosF.toPoint();
const QPoint windowPos = enterList.front()->window()->mapFromGlobal(globalPos);
for (int i = 0; i < enterList.size(); ++i) {
w = enterList.at(i);
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index db8d167b0d..21b0904cc0 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -1031,8 +1031,14 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect
q->setWindowFlags(flags);
- if (!rect.isNull())
- q->setGeometry(rect);
+ if (!rect.isNull()) {
+ if (floating) {
+ q->resize(rect.size());
+ q->move(rect.topLeft());
+ } else {
+ q->setGeometry(rect);
+ }
+ }
updateButtons();