Merge remote-tracking branch 'origin/stable' into dev

Conflicts:
	src/corelib/global/qglobal.h
	src/plugins/platforms/cocoa/qnsview.mm

Change-Id: I6fe345df5c417cb7a55a3f91285d9b47a22c04fa
This commit is contained in:
Frederik Gladhorn 2013-06-04 19:34:36 +02:00
commit 80604a0786
212 changed files with 971 additions and 418 deletions

41
configure vendored
View File

@ -880,6 +880,7 @@ QT_DEFAULT_BUILD_PARTS="libs tools examples"
CFG_BUILD_PARTS=""
CFG_NOBUILD_PARTS=""
CFG_SKIP_MODULES=""
CFG_COMPILE_EXAMPLES=auto
CFG_RELEASE_QMAKE=no
CFG_AUDIO_BACKEND=auto
CFG_V8SNAPSHOT=auto
@ -1404,6 +1405,13 @@ while [ "$#" -gt 0 ]; do
fi
CFG_SKIP_MODULES="$CFG_SKIP_MODULES $VAL"
;;
compile-examples)
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
CFG_COMPILE_EXAMPLES="$VAL"
else
UNKNOWN_OPT=yes
fi
;;
sdk)
if [ "$BUILD_ON_MAC" = "yes" ]; then
DeviceVar set !host_build:QMAKE_MAC_SDK "$VAL"
@ -2336,12 +2344,6 @@ for e in gawk nawk awk; do
fi
done
# find perl
PERL="/usr/bin/perl"
if "$WHICH" perl >/dev/null 2>&1 && ( perl /dev/null ) >/dev/null 2>&1; then
PERL=`$WHICH perl`
fi
### skip this if the user just needs help...
if [ "$OPT_HELP" != "yes" ]; then
@ -2664,15 +2666,12 @@ esac
if [ "$XPLATFORM_ANDROID" = "yes" ]; then
if [ -z "$CFG_DEFAULT_ANDROID_NDK_HOST" ]; then
case $PLATFORM in
linux-*-64)
if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86_64" ]; then
CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86_64
else
CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86
fi
;;
linux-*)
CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86
if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86" ]; then
CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86
elif [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86_64" ]; then
CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86_64
fi
;;
macx-*)
CFG_DEFAULT_ANDROID_NDK_HOST=darwin-x86
@ -3154,6 +3153,18 @@ else
QT_HOST_DATA=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_DATA"`
fi
# Do not actually build the examples in production builds with -prefix, unless requested
if [ "$CFG_COMPILE_EXAMPLES" = auto ]; then
if [ "$CFG_DEV" = "yes" ] || [ "x$outpath" = "x$QT_INSTALL_PREFIX" ]; then
CFG_COMPILE_EXAMPLES=yes
else
CFG_COMPILE_EXAMPLES=no
fi
fi
if [ "$CFG_COMPILE_EXAMPLES" = "yes" ]; then
QMAKE_CONFIG="$QMAKE_CONFIG compile_examples"
fi
#-------------------------------------------------------------------------------
# help - interactive parts of the script _after_ this section please
#-------------------------------------------------------------------------------
@ -3455,6 +3466,8 @@ Additional options:
-skip <module> ..... Exclude an entire module from the build.
-compile-examples .. Compile examples even in a production build.
-no-gui ............ Don't build the Qt GUI module and dependencies.
+ -gui ............... Build the Qt GUI module and dependencies.

View File

@ -62,8 +62,8 @@ android:!bundled_jar_file {
} else {
DEX_CMD = $$SDK_ROOT/platform-tools/dx
!exists($$DEX_CMD): DEX_CMD = $$SDK_ROOT/build-tools/$$BUILD_TOOLS_REVISION/dx
!exists($$DEX_CMD): error("The path $$DEX_CMD does not exist. Please set the environment variable ANDROID_BUILD_TOOLS_REVISION to the revision of the build tools installed in your Android SDK.")
}
!exists($$DEX_CMD): error("The path $$DEX_CMD does not exist. Please set the environment variable ANDROID_BUILD_TOOLS_REVISION to the revision of the build tools installed in your Android SDK.")
QMAKE_LINK_SHLIB_CMD = $$DEX_CMD --dex --output $(TARGET) $$CLASS_DIR
} else {
QMAKE_LINK_SHLIB_CMD = jar cf $(TARGET) -C $$CLASS_DIR .

View File

@ -93,8 +93,7 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
}
# Do not actually build the examples in production builds with -prefix
!equals(TEMPLATE, subdirs):prefix_build:!contains(QT_CONFIG, private_tests) {
!equals(TEMPLATE, subdirs):!compile_examples {
TEMPLATE = aux
CONFIG -= have_target qt staticlib dll
SOURCES =

View File

@ -240,13 +240,15 @@ defineTest(qtAddTargetEnv) {
deppath += $$shell_path($$eval(QT.$${dep}.libs))
equals(QMAKE_HOST.os, Windows) {
deppath.name = PATH
} else:contains(QMAKE_HOST.os, Linux|FreeBSD) {
} else:contains(QMAKE_HOST.os, Linux|FreeBSD|OpenBSD|NetBSD|DragonFly|SunOS|HP-UX|QNX|GNU) {
deppath.name = LD_LIBRARY_PATH
} else:equals(QMAKE_HOST.os, Darwin) {
contains(QT_CONFIG, qt_framework): \
deppath.name = DYLD_FRAMEWORK_PATH
else: \
deppath.name = DYLD_LIBRARY_PATH
} else:equals(QMAKE_HOST.os, AIX) {
deppath.name = LIBPATH
} else {
error("Operating system not supported.")
}

View File

@ -3,7 +3,7 @@
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
** This file is part of the qmake application of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage

View File

@ -3,7 +3,7 @@
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
** This file is part of the qmake application of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage

View File

@ -182,6 +182,7 @@ const char _Optimization[] = "Optimization";
const char _OptimizeReferences[] = "OptimizeReferences";
const char _OutputDirectory[] = "OutputDirectory";
const char _OutputFile[] = "OutputFile";
const char _PlatformToolSet[] = "PlatformToolSet";
const char _PrecompiledHeader[] = "PrecompiledHeader";
const char _PrecompiledHeaderFile[] = "PrecompiledHeaderFile";
const char _PrecompiledHeaderOutputFile[] = "PrecompiledHeaderOutputFile";
@ -467,10 +468,6 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
<< attrTag("Condition", condition)
<< valueTag(tool.Configuration.IntermediateDirectory);
}
if (tool.Configuration.CompilerVersion >= NET2012) {
xml << tagValue("PlatformToolSet",
platformToolSetVersion(tool.Configuration.CompilerVersion));
}
if ( !tool.Configuration.PrimaryOutput.isEmpty() ) {
xml<< tag("TargetName")
<< attrTag("Condition", condition)
@ -668,10 +665,6 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool)
<< attrTag("Condition", condition)
<< valueTag(config.IntermediateDirectory);
}
if (config.CompilerVersion >= NET2012) {
xml << tagValue("PlatformToolSet",
platformToolSetVersion(config.CompilerVersion));
}
if (!config.PrimaryOutput.isEmpty()) {
xml << tag("TargetName")
<< attrTag("Condition", condition)
@ -1649,6 +1642,7 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCConfiguration &tool)
xml << tag("PropertyGroup")
<< attrTag("Condition", generateCondition(tool))
<< attrTag("Label", "Configuration")
<< attrTagS(_PlatformToolSet, platformToolSetVersion(tool.CompilerVersion))
<< attrTagS(_OutputDirectory, tool.OutputDirectory)
<< attrTagT(_ATLMinimizesCRunTimeLibraryUsage, tool.ATLMinimizesCRunTimeLibraryUsage)
<< attrTagT(_BuildBrowserInformation, tool.BuildBrowserInformation)
@ -2057,7 +2051,6 @@ QString VCXProjectWriter::platformToolSetVersion(const DotNET version)
case NET2012:
return "v110";
}
Q_ASSERT(!"This MSVC version does not support the PlatformToolSet tag!");
return QString();
}

View File

@ -183,7 +183,7 @@ XmlOutput& XmlOutput::operator<<(const xml_output& o)
addRaw(QString("</%1>").arg(o.xo_text));
break;
case tValueTag:
addRaw(QString("%1").arg(doConversion(o.xo_text)));
addRaw(doConversion(o.xo_text));
setFormat(NoNewLine);
closeTag();
setFormat(NewLine);

View File

@ -31,9 +31,7 @@
\brief The Qt Concurrent module contains functionality to support concurrent execution of program code
\ingroup modules
\ingroup technology-apis
The Qt Concurrent module extends the basic threading support found in \l{Qt Core} module and
simplifies the development of code that can be executed in parallel on all available CPU cores.
*/

View File

@ -58,7 +58,7 @@ QMAKE_DYNAMIC_LIST_FILE = $$PWD/QtCore.dynlist
contains(DEFINES,QT_EVAL):include(eval.pri)
HOST_BINS = $$[QT_HOST_BINS/raw]
HOST_BINS = $$[QT_HOST_BINS]
host_bins.name = host_bins
host_bins.variable = HOST_BINS

View File

@ -28,7 +28,6 @@
/*!
\page containers.html
\title Container Classes
\ingroup technology-apis
\ingroup groups
\ingroup qt-basic-concepts
\keyword container class

View File

@ -78,7 +78,10 @@ template <typename T> inline void qbswap(const T src, uchar *dest)
// If you want to avoid the memcopy, you must write specializations for this function
template <typename T> inline void qToUnaligned(const T src, uchar *dest)
{
memcpy(dest, &src, sizeof(T));
// Using sizeof(T) inside memcpy function produces internal compiler error with
// MSVC2008/ARM in tst_endian -> use extra indirection to resolve size of T.
const size_t size = sizeof(T);
memcpy(dest, &src, size);
}
/* T qFromLittleEndian(const uchar *src)

View File

@ -311,6 +311,11 @@
#define QT_NO_LOCALSERVER
#endif
// QPdf
#if !defined(QT_NO_PDF) && (defined(QT_NO_TEMPORARYFILE))
#define QT_NO_PDF
#endif
// QMenu
#if !defined(QT_NO_MENU) && (defined(QT_NO_ACTION))
#define QT_NO_MENU

View File

@ -851,6 +851,13 @@ Requires:
Name: Color Names
SeeAlso: ???
Feature: PDF
Description: Supports pdf format
Section: Painting
Requires: TEMPORARYFILE
Name: QPdf
SeeAlso: ???
Feature: PRINTER
Description: Supports printing
Section: Painting

View File

@ -45,6 +45,7 @@
#include "QtCore/qcoreapplication.h"
#include "QtCore/qfileinfo.h"
#include "QtCore/qdebug.h"
#include "QtCore/qdatetime.h"
#include "private/qcore_unix_p.h" // qt_safe_open
#include "private/qabstractfileengine_p.h"
@ -80,12 +81,13 @@ static qint64 qt_write_loop(int fd, const char *data, qint64 len)
int QLockFilePrivate::checkFcntlWorksAfterFlock()
{
#ifndef QT_NO_TEMPORARYFILE
QTemporaryFile file;
if (!file.open())
return -2;
return 0;
const int fd = file.d_func()->engine()->handle();
if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs
return -3;
return 0;
struct flock flockData;
flockData.l_type = F_WRLCK;
flockData.l_whence = SEEK_SET;
@ -95,6 +97,9 @@ int QLockFilePrivate::checkFcntlWorksAfterFlock()
if (fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems
return 0;
return 1;
#else
return 0;
#endif
}
static QBasicAtomicInt fcntlOK = Q_BASIC_ATOMIC_INITIALIZER(-1);

View File

@ -39,8 +39,11 @@
**
****************************************************************************/
#include "qplatformdefs.h"
#include "qsavefile.h"
#ifndef QT_NO_TEMPORARYFILE
#include "qplatformdefs.h"
#include "private/qsavefile_p.h"
#include "qfileinfo.h"
#include "qabstractfileengine_p.h"
@ -381,3 +384,5 @@ bool QSaveFile::directWriteFallback() const
}
QT_END_NAMESPACE
#endif // QT_NO_TEMPORARYFILE

View File

@ -42,6 +42,10 @@
#ifndef QSAVEFILE_H
#define QSAVEFILE_H
#include <QtCore/qglobal.h>
#ifndef QT_NO_TEMPORARYFILE
#include <QtCore/qfiledevice.h>
#include <QtCore/qstring.h>
@ -51,7 +55,6 @@
QT_BEGIN_NAMESPACE
class QAbstractFileEngine;
class QSaveFilePrivate;
@ -90,4 +93,6 @@ private:
QT_END_NAMESPACE
#endif // QT_NO_TEMPORARYFILE
#endif // QSAVEFILE_H

View File

@ -53,6 +53,10 @@
// We mean it.
//
#include <QtCore/qglobal.h>
#ifndef QT_NO_TEMPORARYFILE
#include "private/qfiledevice_p.h"
QT_BEGIN_NAMESPACE
@ -75,4 +79,6 @@ protected:
QT_END_NAMESPACE
#endif // QT_NO_TEMPORARYFILE
#endif // QSAVEFILE_P_H

View File

@ -42,6 +42,10 @@
#ifndef QTEMPORARYFILE_P_H
#define QTEMPORARYFILE_P_H
#include <QtCore/qglobal.h>
#ifndef QT_NO_TEMPORARYFILE
#include "private/qfsfileengine_p.h"
#include "private/qfilesystemengine_p.h"
#include "private/qfile_p.h"
@ -99,5 +103,7 @@ public:
QT_END_NAMESPACE
#endif // QT_NO_TEMPORARYFILE
#endif /* QTEMPORARYFILE_P_H */

View File

@ -886,7 +886,8 @@ bool Parser::parseString(bool *latin1)
return false;
}
}
if (ch > 0xff) {
// bail out if the string is not pure latin1 or too long to hold as a latin1string (which has only 16 bit for the length)
if (ch > 0xff || json - start >= 0x8000) {
*latin1 = false;
break;
}

View File

@ -52,6 +52,8 @@
#include "qelapsedtimer.h"
#include "qcoreapplication_p.h"
#include "qsysinfo.h"
#include <private/qthread_p.h>
#include <private/qmutexpool_p.h>
@ -305,8 +307,14 @@ static void resolveTimerAPI()
#endif
triedResolve = true;
#if !defined(Q_OS_WINCE)
# if defined(_MSC_VER) && _MSC_VER >= 1700
if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) { // QTBUG-27266, Disable when running MSVC2012-built code on pre-Windows 8
# else
{
# endif
qtimeSetEvent = (ptimeSetEvent)QSystemLibrary::resolve(QLatin1String("winmm"), "timeSetEvent");
qtimeKillEvent = (ptimeKillEvent)QSystemLibrary::resolve(QLatin1String("winmm"), "timeKillEvent");
}
#else
qtimeSetEvent = (ptimeSetEvent)QSystemLibrary::resolve(QLatin1String("Mmtimer"), "timeSetEvent");
qtimeKillEvent = (ptimeKillEvent)QSystemLibrary::resolve(QLatin1String("Mmtimer"), "timeKillEvent");

View File

@ -201,6 +201,12 @@ QT_BEGIN_NAMESPACE
function to manipulate the rectangle's coordinates and dimensions
in one go.
\section1 Constraints
QRect is limited to the minimum and maximum values for the \c int type.
Operations on a QRect that could potentially result in values outside this
range will result in undefined behavior.
\sa QRectF, QRegion
*/

View File

@ -31,7 +31,6 @@
\brief An introduction to Inter-Process Communication and Remote Procedure Calling with D-Bus.
\keyword QtDBus
\ingroup technology-apis
\section1 Introduction

View File

@ -32,7 +32,6 @@
to perform Inter-Process Communication using the \l{D-Bus} protocol.
\ingroup modules
\ingroup technology-apis
\target The QDBus compiler

View File

@ -31,6 +31,8 @@ HEADERS += \
kernel/qplatformclipboard.h \
kernel/qplatformnativeinterface.h \
kernel/qplatformmenu.h \
kernel/qshapedpixmapdndwindow_p.h \
kernel/qsimpledrag_p.h \
kernel/qsurfaceformat.h \
kernel/qguiapplication.h \
kernel/qguiapplication_p.h \
@ -89,6 +91,8 @@ SOURCES += \
kernel/qplatformclipboard.cpp \
kernel/qplatformnativeinterface.cpp \
kernel/qsessionmanager.cpp \
kernel/qshapedpixmapdndwindow.cpp \
kernel/qsimpledrag.cpp \
kernel/qsurfaceformat.cpp \
kernel/qguiapplication.cpp \
kernel/qwindow.cpp \

View File

@ -49,6 +49,7 @@
#include <QtGui/private/qpixmap_raster_p.h>
#include <qpa/qplatformscreen_p.h>
#include <private/qdnd_p.h>
#include <private/qsimpledrag_p.h>
QT_BEGIN_NAMESPACE
@ -99,7 +100,11 @@ QPlatformClipboard *QPlatformIntegration::clipboard() const
*/
QPlatformDrag *QPlatformIntegration::drag() const
{
return 0;
static QSimpleDrag *drag = 0;
if (!drag) {
drag = new QSimpleDrag;
}
return drag;
}
#endif

View File

@ -510,15 +510,21 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w,
}
}
if (w->isTopLevel() && qt_window_private(const_cast<QWindow*>(w))->positionAutomatic) {
const QWindow *tp = w->transientParent();
if (tp) {
// A transient window should be centered w.r.t. its transient parent.
rect.moveCenter(tp->geometry().center());
} else {
// Center the window on the screen. (Only applicable on platforms
// which do not provide a better way.)
QPlatformScreen *scr = QPlatformScreen::platformScreenForWindow(w);
rect.moveCenter(scr->availableGeometry().center());
if (const QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(w)) {
const QRect availableGeometry = platformScreen->availableGeometry();
// Center unless the geometry ( + unknown window frame) is too large for the screen).
if (rect.height() < (availableGeometry.height() * 8) / 9
&& rect.width() < (availableGeometry.width() * 8) / 9) {
const QWindow *tp = w->transientParent();
if (tp) {
// A transient window should be centered w.r.t. its transient parent.
rect.moveCenter(tp->geometry().center());
} else {
// Center the window on the screen. (Only applicable on platforms
// which do not provide a better way.)
rect.moveCenter(availableGeometry.center());
}
}
}
}
return rect;

View File

@ -62,7 +62,7 @@
#include <private/qguiapplication_p.h>
#include <private/qdnd_p.h>
#include <QtPlatformSupport/private/qshapedpixmapdndwindow_p.h>
#include <private/qshapedpixmapdndwindow_p.h>
QT_BEGIN_NAMESPACE

View File

@ -56,7 +56,7 @@ class QEventLoop;
class QDropData;
class QShapedPixmapWindow;
class QBasicDrag : public QPlatformDrag, public QObject
class Q_GUI_EXPORT QBasicDrag : public QPlatformDrag, public QObject
{
public:
virtual ~QBasicDrag();
@ -99,7 +99,7 @@ private:
QShapedPixmapWindow *m_drag_icon_window;
};
class QSimpleDrag : public QBasicDrag
class Q_GUI_EXPORT QSimpleDrag : public QBasicDrag
{
public:
QSimpleDrag();

View File

@ -907,11 +907,13 @@ bool QOpenGLShaderProgram::link()
GLint len;
d->glfuncs->glGetProgramInfoLog(program, value, &len, logbuf);
d->log = QString::fromLatin1(logbuf);
QString name = objectName();
if (name.isEmpty())
qWarning() << "QOpenGLShader::link:" << d->log;
else
qWarning() << "QOpenGLShader::link[" << name << "]:" << d->log;
if (!d->linked) {
QString name = objectName();
if (name.isEmpty())
qWarning() << "QOpenGLShader::link:" << d->log;
else
qWarning() << "QOpenGLShader::link[" << name << "]:" << d->log;
}
delete [] logbuf;
}
return d->linked;

View File

@ -98,10 +98,12 @@ void QBackingStore::flush(const QRegion &region, QWindow *win, const QPoint &off
if (!win)
win = window();
#ifdef QBACKINGSTORE_DEBUG
if (win && win->isTopLevel() && !qt_window_private(win)->receivedExpose) {
qWarning().nospace() << "QBackingStore::flush() called with non-exposed window "
<< win << ", behavior is undefined";
}
#endif
d_ptr->platformBackingStore->flush(win, region, offset);
}

View File

@ -293,6 +293,7 @@ bool QPainterPrivate::attachPainterPrivate(QPainter *q, QPaintDevice *pdev)
// Update matrix.
if (q->d_ptr->state->WxF) {
q->d_ptr->state->redirectionMatrix = q->d_ptr->state->matrix;
q->d_ptr->state->redirectionMatrix *= q->d_ptr->hidpiScaleTransform().inverted();
q->d_ptr->state->redirectionMatrix.translate(-offset.x(), -offset.y());
q->d_ptr->state->worldMatrix = QTransform();
q->d_ptr->state->WxF = false;

View File

@ -38,9 +38,13 @@
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qpdf_p.h"
#ifndef QT_NO_PDF
#include "qplatformdefs.h"
#include <qdebug.h>
#include "qpdf_p.h"
#include <qfile.h>
#include <qtemporaryfile.h>
#include <private/qmath_p.h>
@ -2624,5 +2628,6 @@ void QPdfEnginePrivate::newPage()
<< "q q\n";
}
QT_END_NAMESPACE
#endif // QT_NO_PDF

View File

@ -52,6 +52,11 @@
//
// We mean it.
//
#include <QtCore/qglobal.h>
#ifndef QT_NO_PDF
#include "QtGui/qmatrix.h"
#include "QtCore/qstring.h"
#include "QtCore/qvector.h"
@ -328,5 +333,7 @@ void QPdfEngine::setResolution(int resolution)
QT_END_NAMESPACE
#endif // QT_NO_PDF
#endif // QPDF_P_H

View File

@ -40,6 +40,9 @@
****************************************************************************/
#include <qpdfwriter.h>
#ifndef QT_NO_PDF
#include <QtCore/private/qobject_p.h>
#include "private/qpdf_p.h"
#include <QtCore/qfile.h>
@ -214,3 +217,5 @@ void QPdfWriter::setMargins(const Margins &m)
}
QT_END_NAMESPACE
#endif // QT_NO_PDF

View File

@ -42,12 +42,15 @@
#ifndef QPDFWRITER_H
#define QPDFWRITER_H
#include <QtCore/qglobal.h>
#ifndef QT_NO_PDF
#include <QtCore/qobject.h>
#include <QtGui/qpagedpaintdevice.h>
QT_BEGIN_NAMESPACE
class QIODevice;
class QPdfWriterPrivate;
@ -83,4 +86,6 @@ private:
QT_END_NAMESPACE
#endif // QT_NO_PDF
#endif

View File

@ -91,6 +91,8 @@ static const unsigned short symbol_map[0x100] = {
// ---------------------------- PS/PDF helper methods -----------------------------------
#ifndef QT_NO_PDF
QByteArray QFontSubset::glyphName(unsigned short unicode, bool symbol)
{
if (symbol && unicode < 0x100)
@ -311,6 +313,7 @@ int QFontSubset::addGlyph(int index)
return idx;
}
#endif // QT_NO_PDF
// ------------------------------ Truetype generation ----------------------------------------------

View File

@ -62,13 +62,19 @@ class QFontSubset
public:
explicit QFontSubset(QFontEngine *fe, int obj_id = 0)
: object_id(obj_id), noEmbed(false), fontEngine(fe), downloaded_glyphs(0), standard_font(false)
{ fontEngine->ref.ref(); addGlyph(0); }
{
fontEngine->ref.ref();
#ifndef QT_NO_PDF
addGlyph(0);
#endif
}
~QFontSubset() {
if (!fontEngine->ref.deref())
delete fontEngine;
}
QByteArray toTruetype() const;
#ifndef QT_NO_PDF
QByteArray widthArray() const;
QByteArray createToUnicodeMap() const;
QVector<int> getReverseMap() const;
@ -77,6 +83,7 @@ public:
static QByteArray glyphName(unsigned short unicode, bool symbol);
int addGlyph(int index);
#endif
const int object_id;
bool noEmbed;
QFontEngine *fontEngine;

View File

@ -62,6 +62,7 @@ static void connManager_cleanup()
// this is not atomic or thread-safe!
int shutdown = appShutdown.fetchAndStoreAcquire(1);
Q_ASSERT(shutdown == 0);
Q_UNUSED(shutdown);
QNetworkConfigurationManagerPrivate *cmp = connManager_ptr.fetchAndStoreAcquire(0);
if (cmp)
cmp->cleanup();

View File

@ -1602,7 +1602,7 @@ QList<QSslError> QSslSocketBackendPrivate::verify(QList<QSslCertificate> certifi
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
q_sk_push( (_STACK *)intermediates, reinterpret_cast<X509 *>(cert.handle()));
#else
q_sk_push( (STACK *)intermediates, reinterpret_cast<X509 *>(cert.handle()));
q_sk_push( (STACK *)intermediates, reinterpret_cast<char *>(cert.handle()));
#endif
}
}

View File

@ -183,7 +183,7 @@ DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG)
DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return 0, return)
#else
DEFINEFUNC(STACK *, sk_new_null, DUMMYARG, DUMMYARG, return 0, return)
DEFINEFUNC2(void, sk_push, STACK *a, a, void *b, b, return, DUMMYARG)
DEFINEFUNC2(void, sk_push, STACK *a, a, char *b, b, return, DUMMYARG)
DEFINEFUNC(void, sk_free, STACK *a, a, return, DUMMYARG)
DEFINEFUNC2(char *, sk_value, STACK *a, a, int b, b, return 0, return)
#endif
@ -297,7 +297,11 @@ DEFINEFUNC(int, X509_EXTENSION_get_critical, X509_EXTENSION *a, a, return 0, ret
DEFINEFUNC(ASN1_OCTET_STRING *, X509_EXTENSION_get_data, X509_EXTENSION *a, a, return 0, return)
DEFINEFUNC(void, BASIC_CONSTRAINTS_free, BASIC_CONSTRAINTS *a, a, return, DUMMYARG)
DEFINEFUNC(void, AUTHORITY_KEYID_free, AUTHORITY_KEYID *a, a, return, DUMMYARG)
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
DEFINEFUNC2(int, ASN1_STRING_print, BIO *a, a, const ASN1_STRING *b, b, return 0, return)
#else
DEFINEFUNC2(int, ASN1_STRING_print, BIO *a, a, ASN1_STRING *b, b, return 0, return)
#endif
DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return 0, return)
DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return 0, return)
DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return)

View File

@ -285,7 +285,7 @@ void q_sk_free(_STACK *a);
void * q_sk_value(STACK *a, int b);
#else
STACK *q_sk_new_null();
void q_sk_push(STACK *st, void *data);
void q_sk_push(STACK *st, char *data);
void q_sk_free(STACK *a);
char * q_sk_value(STACK *a, int b);
#endif
@ -399,7 +399,11 @@ int q_X509_EXTENSION_get_critical(X509_EXTENSION *a);
ASN1_OCTET_STRING *q_X509_EXTENSION_get_data(X509_EXTENSION *a);
void q_BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a);
void q_AUTHORITY_KEYID_free(AUTHORITY_KEYID *a);
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
int q_ASN1_STRING_print(BIO *a, const ASN1_STRING *b);
#else
int q_ASN1_STRING_print(BIO *a, ASN1_STRING *b);
#endif
X509_NAME *q_X509_get_issuer_name(X509 *a);
X509_NAME *q_X509_get_subject_name(X509 *a);
int q_X509_verify_cert(X509_STORE_CTX *ctx);

View File

@ -29,7 +29,6 @@
\module QtOpenGL
\title Qt OpenGL C++ Classes
\ingroup modules
\ingroup technology-apis
\brief The Qt OpenGL module offers classes that make it easy to
use OpenGL in Qt applications.
@ -70,5 +69,3 @@
OpenGL module can take advantage of the whole Qt API for
non-OpenGL-specific GUI functionality.
*/

View File

@ -1217,7 +1217,7 @@ void QGL2PaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
if (qpen_style(pen) == Qt::NoPen || qbrush_style(penBrush) == Qt::NoBrush)
return;
QOpenGL2PaintEngineState *s = state();
QGL2PaintEngineState *s = state();
if (qt_pen_is_cosmetic(pen, s->renderHints) && !qt_scaleForTransform(s->transform(), 0)) {
// QTriangulatingStroker class is not meant to support cosmetically sheared strokes.
QPaintEngineEx::stroke(path, pen);
@ -1231,7 +1231,7 @@ void QGL2PaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
void QGL2PaintEngineExPrivate::stroke(const QVectorPath &path, const QPen &pen)
{
const QOpenGL2PaintEngineState *s = q->state();
const QGL2PaintEngineState *s = q->state();
if (snapToPixelGrid) {
snapToPixelGrid = false;
matrixDirty = true;
@ -1504,7 +1504,7 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem
Q_D(QGL2PaintEngineEx);
ensureActive();
QOpenGL2PaintEngineState *s = state();
QGL2PaintEngineState *s = state();
const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
@ -1579,7 +1579,7 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp
{
Q_Q(QGL2PaintEngineEx);
QOpenGL2PaintEngineState *s = q->state();
QGL2PaintEngineState *s = q->state();
void *cacheKey = const_cast<QGLContext *>(QGLContextPrivate::contextGroup(ctx)->context());
bool recreateVertexArrays = false;
@ -2360,8 +2360,8 @@ void QGL2PaintEngineEx::setState(QPainterState *new_state)
Q_D(QGL2PaintEngineEx);
QOpenGL2PaintEngineState *s = static_cast<QOpenGL2PaintEngineState *>(new_state);
QOpenGL2PaintEngineState *old_state = state();
QGL2PaintEngineState *s = static_cast<QGL2PaintEngineState *>(new_state);
QGL2PaintEngineState *old_state = state();
QPaintEngineEx::setState(s);
@ -2402,11 +2402,11 @@ QPainterState *QGL2PaintEngineEx::createState(QPainterState *orig) const
if (orig)
const_cast<QGL2PaintEngineEx *>(this)->ensureActive();
QOpenGL2PaintEngineState *s;
QGL2PaintEngineState *s;
if (!orig)
s = new QOpenGL2PaintEngineState();
s = new QGL2PaintEngineState();
else
s = new QOpenGL2PaintEngineState(*static_cast<QOpenGL2PaintEngineState *>(orig));
s = new QGL2PaintEngineState(*static_cast<QGL2PaintEngineState *>(orig));
s->matrixChanged = false;
s->compositionModeChanged = false;
@ -2417,7 +2417,7 @@ QPainterState *QGL2PaintEngineEx::createState(QPainterState *orig) const
return s;
}
QOpenGL2PaintEngineState::QOpenGL2PaintEngineState(QOpenGL2PaintEngineState &other)
QGL2PaintEngineState::QGL2PaintEngineState(QGL2PaintEngineState &other)
: QPainterState(other)
{
isNew = true;
@ -2428,7 +2428,7 @@ QOpenGL2PaintEngineState::QOpenGL2PaintEngineState(QOpenGL2PaintEngineState &oth
rectangleClip = other.rectangleClip;
}
QOpenGL2PaintEngineState::QOpenGL2PaintEngineState()
QGL2PaintEngineState::QGL2PaintEngineState()
{
isNew = true;
needsClipBufferClear = true;
@ -2436,7 +2436,7 @@ QOpenGL2PaintEngineState::QOpenGL2PaintEngineState()
canRestoreClip = true;
}
QOpenGL2PaintEngineState::~QOpenGL2PaintEngineState()
QGL2PaintEngineState::~QGL2PaintEngineState()
{
}

View File

@ -82,12 +82,12 @@ QT_BEGIN_NAMESPACE
class QGL2PaintEngineExPrivate;
class QOpenGL2PaintEngineState : public QPainterState
class QGL2PaintEngineState : public QPainterState
{
public:
QOpenGL2PaintEngineState(QOpenGL2PaintEngineState &other);
QOpenGL2PaintEngineState();
~QOpenGL2PaintEngineState();
QGL2PaintEngineState(QGL2PaintEngineState &other);
QGL2PaintEngineState();
~QGL2PaintEngineState();
uint isNew : 1;
uint needsClipBufferClear : 1;
@ -141,11 +141,11 @@ public:
virtual void setState(QPainterState *s);
virtual QPainterState *createState(QPainterState *orig) const;
inline QOpenGL2PaintEngineState *state() {
return static_cast<QOpenGL2PaintEngineState *>(QPaintEngineEx::state());
inline QGL2PaintEngineState *state() {
return static_cast<QGL2PaintEngineState *>(QPaintEngineEx::state());
}
inline const QOpenGL2PaintEngineState *state() const {
return static_cast<const QOpenGL2PaintEngineState *>(QPaintEngineEx::state());
inline const QGL2PaintEngineState *state() const {
return static_cast<const QGL2PaintEngineState *>(QPaintEngineEx::state());
}
void beginNativePainting();

View File

@ -1579,10 +1579,7 @@ QGLContextPrivate::QGLContextPrivate(QGLContext *context)
{
group = new QGLContextGroup(context);
if (qApp) {
texture_destroyer = new QGLTextureDestroyer;
texture_destroyer->moveToThread(qApp->thread());
}
texture_destroyer = new QGLTextureDestroyer;
}
QGLContextPrivate::~QGLContextPrivate()

View File

@ -335,25 +335,16 @@ QT_END_NAMESPACE
Q_DECLARE_METATYPE(GLuint)
QT_BEGIN_NAMESPACE
class Q_OPENGL_EXPORT QGLTextureDestroyer : public QObject
class Q_OPENGL_EXPORT QGLTextureDestroyer
{
Q_OBJECT
public:
QGLTextureDestroyer() : QObject() {
connect(this, SIGNAL(freeTexture(QGLContext *, QPlatformPixmap *, quint32)),
this, SLOT(freeTexture_slot(QGLContext *, QPlatformPixmap *, quint32)));
}
void emitFreeTexture(QGLContext *context, QPlatformPixmap *boundPixmap, GLuint id) {
emit freeTexture(context, boundPixmap, id);
void emitFreeTexture(QGLContext *context, QPlatformPixmap *, GLuint id) {
if (context->contextHandle())
(new QOpenGLSharedResourceGuard(context->contextHandle(), id, freeTextureFunc))->free();
}
Q_SIGNALS:
void freeTexture(QGLContext *context, QPlatformPixmap *boundPixmap, quint32 id);
private slots:
void freeTexture_slot(QGLContext *context, QPlatformPixmap *boundPixmap, quint32 id) {
Q_UNUSED(boundPixmap);
QGLShareContextScope scope(context);
private:
static void freeTextureFunc(QOpenGLFunctions *, GLuint id) {
glDeleteTextures(1, &id);
}
};

View File

@ -957,10 +957,12 @@ bool QGLShaderProgram::link()
d->glfuncs->glGetProgramInfoLog(program, value, &len, logbuf);
d->log = QString::fromLatin1(logbuf);
QString name = objectName();
if (name.isEmpty())
qWarning() << "QGLShader::link:" << d->log;
else
qWarning() << "QGLShader::link[" << name << "]:" << d->log;
if (!d->linked) {
if (name.isEmpty())
qWarning() << "QGLShader::link:" << d->log;
else
qWarning() << "QGLShader::link[" << name << "]:" << d->log;
}
delete [] logbuf;
}
return d->linked;

View File

@ -1,6 +0,0 @@
HEADERS += \
$$PWD/qsimpledrag_p.h \
$$PWD/qshapedpixmapdndwindow_p.h
SOURCES += \
$$PWD/qsimpledrag.cpp \
$$PWD/qshapedpixmapdndwindow.cpp

View File

@ -9,7 +9,6 @@ PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
include(cfsocketnotifier/cfsocketnotifier.pri)
include(cglconvenience/cglconvenience.pri)
include(dnd/dnd.pri)
include(eglconvenience/eglconvenience.pri)
include(eventdispatchers/eventdispatchers.pri)
include(fbconvenience/fbconvenience.pri)

View File

@ -81,6 +81,8 @@ QConnmanManagerInterface::QConnmanManagerInterface( QObject *parent)
CONNMAN_MANAGER_INTERFACE,
QDBusConnection::systemBus(), parent)
{
qDBusRegisterMetaType<ConnmanMap>();
qDBusRegisterMetaType<ConnmanMapList>();
}
QConnmanManagerInterface::~QConnmanManagerInterface()

View File

@ -45,7 +45,7 @@
#include <Cocoa/Cocoa.h>
#include <QtGui>
#include <qpa/qplatformdrag.h>
#include <QtPlatformSupport/private/qsimpledrag_p.h>
#include <private/qsimpledrag_p.h>
#include <QtGui/private/qdnd_p.h>

View File

@ -179,7 +179,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaMenuDelegate);
}
QKeyEvent accel_ev(QEvent::ShortcutOverride, (keyCode & (~Qt::KeyboardModifierMask)),
Qt::KeyboardModifiers(keyCode & Qt::KeyboardModifierMask));
Qt::KeyboardModifiers(modifiers & Qt::KeyboardModifierMask));
accel_ev.ignore();
QCoreApplication::sendEvent(object, &accel_ev);
if (accel_ev.isAccepted()) {

View File

@ -136,6 +136,17 @@ void QCocoaMenuBar::syncMenu(QPlatformMenu *menu)
QCocoaMenu *cocoaMenu = static_cast<QCocoaMenu *>(menu);
Q_FOREACH (QCocoaMenuItem *item, cocoaMenu->items())
cocoaMenu->syncMenuItem(item);
// If the NSMenu has no visble items, or only separators, we should hide it
// on the menubar. This can happen after syncing the menu items since they
// can be moved to other menus.
BOOL shouldHide = YES;
for (NSMenuItem *item in [cocoaMenu->nsMenu() itemArray])
if (![item isSeparatorItem] && ![item isHidden]) {
shouldHide = NO;
break;
}
[cocoaMenu->nsMenuItem() setHidden:shouldHide];
}
void QCocoaMenuBar::handleReparent(QWindow *newParentWindow)

View File

@ -241,7 +241,8 @@ NSMenuItem *QCocoaMenuItem::sync()
mergeItem = [loader quitMenuItem];
break;
default:
m_textSynced = true;
if (!m_text.isEmpty())
m_textSynced = true;
break;
}
break;
@ -264,7 +265,7 @@ NSMenuItem *QCocoaMenuItem::sync()
m_native = nil; // create item below
m_merged = false;
}
} else {
} else if (!m_text.isEmpty()) {
m_textSynced = true; // NoRole, and that was set explicitly. So, nothing to do anymore.
}

View File

@ -118,6 +118,7 @@ public:
bool setKeyboardGrabEnabled(bool grab);
bool setMouseGrabEnabled(bool grab);
QMargins frameMargins() const;
QSurfaceFormat format() const;
void requestActivateWindow();

View File

@ -256,6 +256,11 @@ QCocoaWindow::~QCocoaWindow()
[m_nsWindowDelegate release];
}
QSurfaceFormat QCocoaWindow::format() const
{
return window()->requestedFormat();
}
void QCocoaWindow::setGeometry(const QRect &rect)
{
if (geometry() == rect)
@ -821,6 +826,9 @@ NSWindow * QCocoaWindow::createNSWindow()
if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) {
// Make popup winows show on the same desktop as the parent full-screen window.
[window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenAuxiliary];
if ((type & Qt::Popup) == Qt::Popup)
[window setAnimationBehavior:NSWindowAnimationBehaviorUtilityWindow];
}
#endif
window->m_cocoaPlatformWindow = this;
@ -1013,15 +1021,11 @@ void QCocoaWindow::obscureWindow()
QWindow *QCocoaWindow::childWindowAt(QPoint windowPoint)
{
QWindow *targetWindow = window();
foreach (QObject *child, targetWindow->children()) {
if (QWindow *childWindow = qobject_cast<QWindow *>(child)) {
if (childWindow->geometry().contains(windowPoint)) {
QCocoaWindow* platformWindow = static_cast<QCocoaWindow*>(childWindow->handle());
if (platformWindow->isExposed())
targetWindow = platformWindow->childWindowAt(windowPoint - childWindow->position());
}
}
}
foreach (QObject *child, targetWindow->children())
if (QWindow *childWindow = qobject_cast<QWindow *>(child))
if (QPlatformWindow *handle = childWindow->handle())
if (handle->isExposed() && childWindow->geometry().contains(windowPoint))
targetWindow = static_cast<QCocoaWindow*>(handle)->childWindowAt(windowPoint - childWindow->position());
return targetWindow;
}

View File

@ -113,6 +113,7 @@ QT_END_NAMESPACE
- (void)handleKeyEvent:(NSEvent *)theEvent eventType:(int)eventType;
- (void)keyDown:(NSEvent *)theEvent;
- (void)keyUp:(NSEvent *)theEvent;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (void)registerDragTypes;
- (NSDragOperation)handleDrag:(id <NSDraggingInfo>)sender;

View File

@ -113,6 +113,8 @@ static QTouchDevice *touchDevice = 0;
name:NSViewGlobalFrameDidChangeNotification
object:self];
}
delete currentCustomDragTypes;
[super dealloc];
}
@ -340,15 +342,20 @@ static QTouchDevice *touchDevice = 0;
}
const QRect &rect = region->boundingRect();
QImage maskImage(rect.size(), QImage::Format_RGB888);
maskImage.fill(Qt::white);
QPainter p(&maskImage);
p.setRenderHint(QPainter::Antialiasing);
QImage tmp(rect.size(), QImage::Format_RGB32);
tmp.fill(Qt::white);
QPainter p(&tmp);
p.setClipRegion(*region);
p.fillRect(rect, QBrush(Qt::black));
p.fillRect(rect, Qt::black);
p.end();
maskImage = maskImage.convertToFormat(QImage::Format_Indexed8);
QImage maskImage = QImage(rect.size(), QImage::Format_Indexed8);
for (int y=0; y<rect.height(); ++y) {
const uint *src = (const uint *) tmp.constScanLine(y);
uchar *dst = maskImage.scanLine(y);
for (int x=0; x<rect.width(); ++x) {
dst[x] = src[x] & 0xff;
}
}
m_maskImage = qt_mac_toCGImage(maskImage, true, &m_maskData);
}
@ -955,6 +962,23 @@ static QTouchDevice *touchDevice = 0;
[self handleKeyEvent:nsevent eventType:int(QEvent::KeyRelease)];
}
- (BOOL)performKeyEquivalent:(NSEvent *)nsevent
{
NSString *chars = [nsevent charactersIgnoringModifiers];
if ([nsevent type] == NSKeyDown && [chars length] > 0) {
QChar ch = [chars characterAtIndex:0];
Qt::Key qtKey = qt_mac_cocoaKey2QtKey(ch);
// check for Command + Key_Period
if ([nsevent modifierFlags] & NSCommandKeyMask
&& qtKey == Qt::Key_Period) {
[self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)];
return YES;
}
}
return [super performKeyEquivalent:nsevent];
}
- (void)flagsChanged:(NSEvent *)nsevent
{
ulong timestamp = [nsevent timestamp] * 1000;

View File

@ -111,21 +111,6 @@ public:
}
};
// Class for chaining to gether a bunch of fades. It pretty much is only used for qmenu fading.
class QMacWindowFader
{
QWidgetList m_windowsToFade;
float m_duration;
Q_DISABLE_COPY(QMacWindowFader)
public:
QMacWindowFader(); // PLEASE DON'T CALL THIS.
static QMacWindowFader *currentFader();
void registerWindowToFade(QWidget *window);
void setFadeDuration(float durationInSecs) { m_duration = durationInSecs; }
float fadeDuration() const { return m_duration; }
void performFade();
};
class Q_WIDGETS_EXPORT QMacCocoaAutoReleasePool
{
private:

View File

@ -142,7 +142,7 @@ QRect fromPortraitToPrimary(const QRect &rect, QPlatformScreen *screen)
// aligned with UIScreen into whatever is the current orientation of QScreen.
QRect geometry = screen->geometry();
return geometry.width() < geometry.height() ? rect
: QRect(rect.y(), geometry.width() - rect.width() - rect.x(), rect.height(), rect.width());
: QRect(rect.y(), geometry.height() - rect.width() - rect.x(), rect.height(), rect.width());
}
QT_END_NAMESPACE

View File

@ -136,7 +136,7 @@ QIOSScreen::QIOSScreen(unsigned int screenIndex)
int unscaledDpi = 163; // Regular iPhone DPI
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad
&& deviceIdentifier != QStringLiteral("iPad2,5") /* iPad Mini */) {
&& !deviceIdentifier.contains(QRegularExpression("^iPad2,[567]$")) /* excluding iPad Mini */) {
unscaledDpi = 132;
};

View File

@ -150,7 +150,8 @@
- (void)updateTouchList:(NSSet *)touches withState:(Qt::TouchPointState)state
{
QRect applicationRect = fromCGRect(self.window.screen.applicationFrame);
QPlatformScreen *screen = QGuiApplication::primaryScreen()->handle();
QRect applicationRect = fromPortraitToPrimary(fromCGRect(self.window.screen.applicationFrame), screen);
foreach (UITouch *uiTouch, m_activeTouches.keys()) {
QWindowSystemInterface::TouchPoint &touchPoint = m_activeTouches[uiTouch];
@ -163,8 +164,10 @@
// Find the touch position relative to the window. Then calculate the screen
// position by subtracting the position of the applicationRect (since UIWindow
// does not take that into account when reporting its own frame):
QPoint touchPos = fromCGPoint([uiTouch locationInView:nil]);
touchPoint.area = QRectF(touchPos - applicationRect.topLeft(), QSize(0, 0));
QRect touchInWindow = QRect(fromCGPoint([uiTouch locationInView:nil]), QSize(0, 0));
QRect touchInScreen = fromPortraitToPrimary(touchInWindow, screen);
QPoint touchPos = touchInScreen.topLeft() - applicationRect.topLeft();
touchPoint.area = QRectF(touchPos, QSize(0, 0));
touchPoint.normalPosition = QPointF(touchPos.x() / applicationRect.width(), touchPos.y() / applicationRect.height());
}
}
@ -407,7 +410,7 @@ void QIOSWindow::requestActivateWindow()
// Note that several windows can be active at the same time if they exist in the same
// hierarchy (transient children). But only one window can be QGuiApplication::focusWindow().
// Dispite the name, 'requestActivateWindow' means raise and transfer focus to the window:
if (blockedByModal())
if (!window()->isTopLevel() || blockedByModal())
return;
raise();

View File

@ -93,7 +93,7 @@
#include <QtGui/QOpenGLContext>
#endif
#include <QtPlatformSupport/private/qsimpledrag_p.h>
#include <private/qsimpledrag_p.h>
#include <QtCore/QDebug>
#include <QtCore/QHash>

View File

@ -60,7 +60,8 @@ static const int MAGIC_ZORDER_FOR_NO_NAV = 10;
QQnxRootWindow::QQnxRootWindow(const QQnxScreen *screen)
: m_screen(screen),
m_window(0),
m_windowGroupName()
m_windowGroupName(),
m_translucent(false)
{
qRootWindowDebug() << Q_FUNC_INFO;
// Create one top-level QNX window to act as a container for child windows
@ -122,7 +123,10 @@ QQnxRootWindow::QQnxRootWindow(const QQnxScreen *screen)
if (result != 0)
qFatal("QQnxRootWindow: failed to set window size, errno=%d", errno);
// Fill the window with solid black
// Fill the window with solid black. Note that the LSB of the pixel value
// 0x00000000 just happens to be 0x00, so if and when this root window's
// alpha blending mode is changed from None to Source-Over, it will then
// be interpreted as transparent.
errno = 0;
val[0] = 0;
result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_COLOR, val);
@ -152,13 +156,62 @@ QQnxRootWindow::QQnxRootWindow(const QQnxScreen *screen)
qFatal("QQnxRootWindow: failed to set window source size, errno=%d", errno);
errno = 0;
val[0] = 1;
val[0] = 0;
val[1] = 0;
result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_SOURCE_POSITION, val);
if (result != 0)
qFatal("QQnxRootWindow: failed to set window source position, errno=%d", errno);
createWindowGroup();
// Don't post yet. This will be lazily done from QQnxScreen upon first posting of
// a child window. Doing it now pre-emptively would create a flicker if one of
// the QWindow's about to be created sets its Qt::WA_TranslucentBackground flag
// and immediately triggers the buffer re-creation in makeTranslucent().
}
void QQnxRootWindow::makeTranslucent()
{
if (m_translucent)
return;
int result;
errno = 0;
result = screen_destroy_window_buffers(m_window);
if (result != 0) {
qFatal("QQnxRootWindow: failed to destroy window buffer, errno=%d", errno);
}
QRect geometry = m_screen->geometry();
errno = 0;
int val[2];
val[0] = geometry.width();
val[1] = geometry.height();
result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_BUFFER_SIZE, val);
if (result != 0) {
qFatal("QQnxRootWindow: failed to set window buffer size, errno=%d", errno);
}
errno = 0;
result = screen_create_window_buffers(m_window, 1);
if (result != 0) {
qFatal("QQNX: failed to create window buffer, errno=%d", errno);
}
// Install an alpha channel on the root window.
//
// This is necessary in order to avoid interfering with any particular
// toplevel widget's QQnxWindow window instance from showing transparent
// if it desires.
errno = 0;
val[0] = SCREEN_TRANSPARENCY_SOURCE_OVER;
result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_TRANSPARENCY, val);
if (result != 0) {
qFatal("QQnxRootWindow: failed to set window transparency, errno=%d", errno);
}
m_translucent = true;
post();
}

View File

@ -66,6 +66,8 @@ public:
void resize(const QSize &size);
void makeTranslucent();
QByteArray groupName() const { return m_windowGroupName; }
private:
@ -74,6 +76,8 @@ private:
const QQnxScreen *m_screen;
screen_window_t m_window;
QByteArray m_windowGroupName;
bool m_translucent;
};
QT_END_NAMESPACE

View File

@ -62,6 +62,14 @@
#error Please define QQNX_PHYSICAL_SCREEN_WIDTH and QQNX_PHYSICAL_SCREEN_HEIGHT to values greater than zero
#endif
// The default z-order of a window (intended to be overlain) created by
// mmrender.
static const int MMRENDER_DEFAULT_ZORDER = -1;
// The maximum z-order at which a foreign window will be considered
// an underlay.
static const int MAX_UNDERLAY_ZORDER = MMRENDER_DEFAULT_ZORDER - 1;
QT_BEGIN_NAMESPACE
static QSize determineScreenSize(screen_display_t display, bool primaryScreen) {
@ -463,16 +471,32 @@ void QQnxScreen::updateHierarchy()
qScreenDebug() << Q_FUNC_INFO;
QList<QQnxWindow*>::const_iterator it;
int topZorder = 1; // root window is z-order 0, all "top" level windows are "above" it
int result;
int topZorder;
errno = 0;
result = screen_get_window_property_iv(rootWindow()->nativeHandle(), SCREEN_PROPERTY_ZORDER, &topZorder);
if (result != 0)
qFatal("QQnxScreen: failed to query root window z-order, errno=%d", errno);
topZorder++; // root window has the lowest z-order in the windowgroup
// Underlays sit immediately above the root window in the z-ordering
Q_FOREACH (screen_window_t underlay, m_underlays) {
// Do nothing when this fails. This can happen if we have stale windows in m_underlays,
// which in turn can happen because a window was removed but we didn't get a notification
// yet.
screen_set_window_property_iv(underlay, SCREEN_PROPERTY_ZORDER, &topZorder);
topZorder++;
}
// Normal Qt windows come next above underlays in the z-ordering
for (it = m_childWindows.constBegin(); it != m_childWindows.constEnd(); ++it)
(*it)->updateZorder(topZorder);
topZorder++;
// Finally overlays sit above all else in the z-ordering
Q_FOREACH (screen_window_t overlay, m_overlays) {
// Do nothing when this fails. This can happen if we have stale windows in mOverlays,
// which in turn can happen because a window was removed but we didn't get a notification
// yet.
// No error handling, see underlay logic above
screen_set_window_property_iv(overlay, SCREEN_PROPERTY_ZORDER, &topZorder);
topZorder++;
}
@ -529,10 +553,16 @@ void QQnxScreen::addOverlayWindow(screen_window_t window)
updateHierarchy();
}
void QQnxScreen::removeOverlayWindow(screen_window_t window)
void QQnxScreen::addUnderlayWindow(screen_window_t window)
{
const int numOverlaysRemoved = m_overlays.removeAll(window);
if (numOverlaysRemoved > 0)
m_underlays.append(window);
updateHierarchy();
}
void QQnxScreen::removeOverlayOrUnderlayWindow(screen_window_t window)
{
const int numRemoved = m_overlays.removeAll(window) + m_underlays.removeAll(window);
if (numRemoved > 0)
updateHierarchy();
}
@ -546,13 +576,28 @@ void QQnxScreen::newWindowCreated(void *window)
return;
}
int zorder;
if (screen_get_window_property_iv(windowHandle, SCREEN_PROPERTY_ZORDER, &zorder) != 0) {
qWarning("QQnx: Failed to get z-order for window, errno=%d", errno);
zorder = 0;
}
if (display == nativeDisplay()) {
// A window was created on this screen. If we don't know about this window yet, it means
// it was not created by Qt, but by some foreign library like the multimedia renderer, which
// creates an overlay window when playing a video.
// Treat all foreign windows as overlays here.
if (!findWindow(windowHandle))
addOverlayWindow(windowHandle);
//
// Treat all foreign windows as overlays or underlays here.
//
// Assume that if a foreign window already has a Z-Order both negative and
// less than the default Z-Order installed by mmrender on windows it creates,
// the windows should be treated as an underlay. Otherwise, we treat it as an overlay.
if (!findWindow(windowHandle)) {
if (zorder <= MAX_UNDERLAY_ZORDER)
addUnderlayWindow(windowHandle);
else
addOverlayWindow(windowHandle);
}
}
}
@ -560,7 +605,7 @@ void QQnxScreen::windowClosed(void *window)
{
Q_ASSERT(thread() == QThread::currentThread());
const screen_window_t windowHandle = reinterpret_cast<screen_window_t>(window);
removeOverlayWindow(windowHandle);
removeOverlayOrUnderlayWindow(windowHandle);
}
void QQnxScreen::windowGroupStateChanged(const QByteArray &id, Qt::WindowState state)

View File

@ -114,7 +114,8 @@ private:
void resizeTopLevelWindow(QQnxWindow *w, const QRect &previousScreenGeometry) const;
void resizeWindows(const QRect &previousScreenGeometry);
void addOverlayWindow(screen_window_t window);
void removeOverlayWindow(screen_window_t window);
void addUnderlayWindow(screen_window_t window);
void removeOverlayOrUnderlayWindow(screen_window_t window);
QWindow *topMostChildWindow() const;
@ -136,6 +137,7 @@ private:
QList<QQnxWindow *> m_childWindows;
QList<screen_window_t> m_overlays;
QList<screen_window_t> m_underlays;
QPlatformCursor *m_cursor;
};

View File

@ -117,9 +117,13 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context)
if (result != 0)
qFatal("QQnxWindow: failed to set window alpha mode, errno=%d", errno);
// Make the window opaque
// Blend the window with Source Over Porter-Duff behavior onto whatever's
// behind it.
//
// If the desired use-case is opaque, the Widget painting framework will
// already fill in the alpha channel with full opacity.
errno = 0;
val = SCREEN_TRANSPARENCY_NONE;
val = SCREEN_TRANSPARENCY_SOURCE_OVER;
result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_TRANSPARENCY, &val);
if (result != 0)
qFatal("QQnxWindow: failed to set window transparency, errno=%d", errno);
@ -369,9 +373,16 @@ void QQnxWindow::setBufferSize(const QSize &size)
errno = 0;
result = screen_create_window_buffers(m_window, MAX_BUFFER_COUNT);
if (result != 0)
if (result != 0) {
qWarning() << "QQnxWindow: Buffer size was" << size;
qFatal("QQnxWindow: failed to create window buffers, errno=%d", errno);
}
// If the child window has been configured for transparency, lazily create
// a full-screen buffer to back the root window.
if (window()->requestedFormat().hasAlpha()) {
m_screen->rootWindow()->makeTranslucent();
}
// check if there are any buffers available
int bufferCount = 0;

View File

@ -552,11 +552,15 @@ QVariant QWindowsIntegration::styleHint(QPlatformIntegration::StyleHint hint) co
break;
case QPlatformIntegration::UseRtlExtensions:
return QVariant(d->m_context.useRTLExtensions());
#ifdef Q_OS_WINCE
case QPlatformIntegration::SynthesizeMouseFromTouchEvents:
// We do not want Qt to synthesize mouse events as Windows also does that.
// Alternatively, Windows-generated touch mouse events can be identified and
// ignored by checking GetMessageExtraInfo() for MI_WP_SIGNATURE (0xFF515700).
return false;
#endif // Q_OS_WINCE
default:
break;
}
return QPlatformIntegration::styleHint(hint);
}

View File

@ -793,7 +793,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms
// A multi-character key or a Input method character
// not found by our look-ahead
if (msgType == WM_CHAR || msgType == WM_IME_CHAR) {
sendExtendedPressRelease(receiver, 0, Qt::KeyboardModifier(state), scancode, vk_key, nModifiers, messageKeyText(msg), false, 0);
sendExtendedPressRelease(receiver, 0, Qt::KeyboardModifier(state), scancode, vk_key, nModifiers, messageKeyText(msg), false);
return true;
}
@ -822,13 +822,13 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms
if (dirStatus == VK_LSHIFT
&& ((msg.wParam == VK_SHIFT && GetKeyState(VK_LCONTROL))
|| (msg.wParam == VK_CONTROL && GetKeyState(VK_LSHIFT)))) {
sendExtendedPressRelease(receiver, Qt::Key_Direction_L, 0, scancode, msg.wParam, nModifiers, QString(), false, 0);
sendExtendedPressRelease(receiver, Qt::Key_Direction_L, 0, scancode, msg.wParam, nModifiers, QString(), false);
result = true;
dirStatus = 0;
} else if (dirStatus == VK_RSHIFT
&& ( (msg.wParam == VK_SHIFT && GetKeyState(VK_RCONTROL))
|| (msg.wParam == VK_CONTROL && GetKeyState(VK_RSHIFT)))) {
sendExtendedPressRelease(receiver, Qt::Key_Direction_R, 0, scancode, msg.wParam, nModifiers, QString(), false, 0);
sendExtendedPressRelease(receiver, Qt::Key_Direction_R, 0, scancode, msg.wParam, nModifiers, QString(), false);
result = true;
dirStatus = 0;
} else {
@ -1020,9 +1020,9 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms
if (rec) {
if (code < Qt::Key_Shift || code > Qt::Key_ScrollLock) {
QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyRelease, code,
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true, 0);
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true);
QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyPress, code,
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true, 0);
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true);
result = true;
}
}
@ -1033,7 +1033,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms
const char a = uch.row() ? 0 : uch.cell();
key_recorder.storeKey(msg.wParam, a, state, text);
QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyPress, code,
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, text, false, 0);
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, text, false);
result =true;
bool store = true;
#ifndef Q_OS_WINCE
@ -1077,7 +1077,7 @@ bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &ms
code = Qt::Key_Backtab;
QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyRelease, code,
Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers,
(rec ? rec->text : QString()), false, 0);
(rec ? rec->text : QString()), false);
result = true;
#ifndef Q_OS_WINCE
// don't pass Alt to Windows unless we are embedded in a non-Qt window

View File

@ -157,9 +157,19 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
QtWindows::WindowsEventType et,
MSG msg, LRESULT *result)
{
enum { signatureMask = 0xffffff00, miWpSignature = 0xff515700 };
if (et == QtWindows::MouseWheelEvent)
return translateMouseWheelEvent(window, hwnd, msg, result);
#ifndef Q_OS_WINCE
// Check for events synthesized from touch. Lower byte is touch index, 0 means pen.
const LPARAM extraInfo = GetMessageExtraInfo();
const bool fromTouch = (extraInfo & signatureMask) == miWpSignature && (extraInfo & 0xff);
if (fromTouch)
return false;
#endif // !Q_OS_WINCE
const QPoint winEventPosition(GET_X_LPARAM(msg.lParam), GET_Y_LPARAM(msg.lParam));
if (et & QtWindows::NonClientEventFlag) {
const QPoint globalPosition = winEventPosition;

View File

@ -503,11 +503,6 @@ QWindowsWindow::WindowData
const QWindowCreationContextPtr context(new QWindowCreationContext(w, rect, data.customMargins, style, exStyle));
QWindowsContext::instance()->setWindowCreationContext(context);
if (context->frameX < 0)
context->frameX = 0;
if (context->frameY < 0)
context->frameY = 0;
if (QWindowsContext::verboseWindows)
qDebug().nospace()
<< "CreateWindowEx: " << w << *this

View File

@ -57,8 +57,8 @@
#include <qpa/qwindowsysteminterface.h>
#include <QtPlatformSupport/private/qshapedpixmapdndwindow_p.h>
#include <QtPlatformSupport/private/qsimpledrag_p.h>
#include <private/qshapedpixmapdndwindow_p.h>
#include <private/qsimpledrag_p.h>
QT_BEGIN_NAMESPACE

View File

@ -43,7 +43,7 @@
#define QXCBDRAG_H
#include <qpa/qplatformdrag.h>
#include <QtPlatformSupport/private/qsimpledrag_p.h>
#include <private/qsimpledrag_p.h>
#include <qxcbobject.h>
#include <xcb/xcb.h>
#include <qlist.h>

View File

@ -30,7 +30,6 @@
\title Qt Print Support
\brief A guide to producing printed output with Qt's paint system and widgets.
\ingroup qt-graphics
\ingroup technology-apis
Qt provides extensive cross-platform support for printing. Using the printing

View File

@ -31,7 +31,6 @@
\brief The Qt PrintSupport module provides classes to make printing easier and portable.
\ingroup modules
\ingroup technology-apis
To include the definitions of the module's classes, use the
following directive:

View File

@ -78,7 +78,7 @@ set LIB=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SD
//! [10]
********* Start testing of TestQString *********
Config: Using QTest library %VERSION%, Qt %VERSION%
Config: Using QtTest library %VERSION%, Qt %VERSION%
PASS : TestQString::initTestCase()
PASS : TestQString::toUpper()
PASS : TestQString::cleanupTestCase()

View File

@ -319,7 +319,7 @@ void QPlainTestLogger::startLogging()
} else {
qsnprintf(buf, sizeof(buf),
"********* Start testing of %s *********\n"
"Config: Using QTest library " QTEST_VERSION_STR
"Config: Using QtTest library " QTEST_VERSION_STR
", Qt %s\n", QTestResult::currentTestObjectName(), qVersion());
}
outputMessage(buf);

View File

@ -397,8 +397,11 @@ void CodeMarker::insert(FastSection &fastSection,
bool irrelevant = false;
bool inheritedMember = false;
if (!node->relates()) {
if (node->parent() != fastSection.parent_) { // && !node->parent()->isAbstract()) {
if ((node->parent()->subType() != Node::QmlClass) || !node->parent()->isAbstract()) {
InnerNode* p = node->parent();
if (p->subType() == Node::QmlPropertyGroup)
p = p->parent();
if (p != fastSection.parent_) { // && !node->parent()->isAbstract()) {
if (p->subType() != Node::QmlClass || !p->isAbstract()) {
//if (node->type() != Node::QmlProperty) {
inheritedMember = true;
}

View File

@ -3138,7 +3138,7 @@ void DitaXmlGenerator::generateOverviewList(const Node* relative)
// If we encounter a group definition page, we add all
// the pages in that group to the list for that group.
foreach (Node* member, docNode->members()) {
if (member->type() != Node::Document)
if (member->isInternal() || member->type() != Node::Document)
continue;
DocNode* page = static_cast<DocNode*>(member);
if (page) {
@ -3155,7 +3155,7 @@ void DitaXmlGenerator::generateOverviewList(const Node* relative)
// If we encounter a page that belongs to a group then
// we add that page to the list for that group.
const DocNode* gn = qdb_->getGroup(group);
if (gn)
if (gn && !docNode->isInternal())
docNodeMap[gn].insert(sortKey, docNode);
}
}

View File

@ -2644,7 +2644,7 @@ void HtmlGenerator::generateOverviewList(const Node *relative)
// If we encounter a group definition page, we add all
// the pages in that group to the list for that group.
foreach (Node *member, docNode->members()) {
if (member->type() != Node::Document)
if (member->isInternal() || member->type() != Node::Document)
continue;
DocNode *page = static_cast<DocNode *>(member);
if (page) {
@ -2661,7 +2661,7 @@ void HtmlGenerator::generateOverviewList(const Node *relative)
// If we encounter a page that belongs to a group then
// we add that page to the list for that group.
const DocNode* gn = qdb_->getGroup(group);
if (gn)
if (gn && !docNode->isInternal())
docNodeMap[gn].insert(sortKey, docNode);
}
}

View File

@ -862,9 +862,12 @@ Node* InnerNode::findChildNodeByNameAndType(const QString& name, Type type)
if (type == Function)
return primaryFunctionMap.value(name);
else {
Node *node = childMap.value(name);
if (node && node->type() == type)
return node;
QList<Node*> nodes = childMap.values(name);
for (int i=0; i<nodes.size(); ++i) {
Node* node = nodes.at(i);
if (node->type() == type)
return node;
}
}
return 0;
}

View File

@ -1183,8 +1183,13 @@ void QDocIndexFiles::generateIndexSections(QXmlStreamWriter& writer,
It is just a place holder for a collection of QML property
nodes. Recurse to its children, which are the QML property
nodes.
Do the same thing for collision nodes - we want children
of collision nodes in the index, but leaving out the
parent collision page will make searching for nodes easier.
*/
if (child->subType() == Node::QmlPropertyGroup) {
if (child->subType() == Node::QmlPropertyGroup ||
child->subType() == Node::Collision) {
const InnerNode* pgn = static_cast<const InnerNode*>(child);
foreach (Node* c, pgn->childNodes()) {
generateIndexSections(writer, c, generateInternalNodes);

View File

@ -29,7 +29,6 @@
\page gestures-overview.html
\title Gestures in Widgets and Graphics View
\startpage index.html Qt Reference Documentation
\ingroup technology-apis
\ingroup qt-gui-concepts
\brief An overview of Qt support for Gesture programming

View File

@ -291,7 +291,7 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz
int stretch = stretches[start + i];
if (sumStretches == 0) {
if (hasIgnoreFlag) {
if (hasIgnoreFlag || sizes[i] == 0.0) {
factors[i] = (stretch < 0) ? 1.0 : 0.0;
} else {
factors[i] = (stretch < 0) ? sizes[i] : 0.0;

View File

@ -1677,8 +1677,8 @@ void QTreeWidgetItemPrivate::propagateDisabled(QTreeWidgetItem *item)
the item can be checked, edited, and selected.
The default value for flags is
Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled.
If the item was constructed with a parent, flags will in addition contain Qt::ItemIsDropEnabled.
Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled |
Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled.
\sa setFlags()
*/

View File

@ -3366,7 +3366,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (const QStyleOptionToolButton *tb = qstyleoption_cast<const QStyleOptionToolButton *>(opt)) {
QStyleOptionToolButton myTb = *tb;
myTb.state &= ~State_AutoRaise;
if (w && qobject_cast<QToolBar *>(w->parentWidget())) {
if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) {
QRect cr = tb->rect;
int shiftX = 0;
int shiftY = 0;
@ -3405,7 +3405,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (tb->toolButtonStyle != Qt::ToolButtonIconOnly) {
needText = true;
if (tb->toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
QMainWindow *mw = qobject_cast<QMainWindow *>(w->window());
QMainWindow *mw = w ? qobject_cast<QMainWindow *>(w->window()) : 0;
if (mw && mw->unifiedTitleAndToolBarOnMac()) {
pr.setHeight(pixmap.size().height() / pixmap.devicePixelRatio());
cr.adjust(0, pr.bottom() + 1, 0, 1);

View File

@ -132,7 +132,8 @@ void QLineEdit::initStyleOption(QStyleOptionFrame *option) const
A line edit allows the user to enter and edit a single line of
plain text with a useful collection of editing functions,
including undo and redo, cut and paste, and drag and drop.
including undo and redo, cut and paste, and drag and drop (see
\l setDragEnabled()).
By changing the echoMode() of a line edit, it can also be used as
a "write-only" field, for inputs such as passwords.

View File

@ -420,25 +420,17 @@ void QMenuPrivate::hideUpToMenuBar()
if (QMenu *m = qobject_cast<QMenu*>(caused)) {
caused = m->d_func()->causedPopup.widget;
if (!m->d_func()->tornoff)
hideMenu(m, fadeMenus);
hideMenu(m);
if (!fadeMenus) // Mac doesn't clear the action until after hidden.
m->d_func()->setCurrentAction(0);
} else { caused = 0;
}
}
#if defined(Q_WS_MAC)
if (fadeMenus) {
QEventLoop eventLoop;
QTimer::singleShot(int(MenuFadeTimeInSec * 1000), &eventLoop, SLOT(quit()));
QMacWindowFader::currentFader()->performFade();
eventLoop.exec();
}
#endif
}
setCurrentAction(0);
}
void QMenuPrivate::hideMenu(QMenu *menu, bool justRegister)
void QMenuPrivate::hideMenu(QMenu *menu)
{
if (!menu)
return;
@ -462,27 +454,10 @@ void QMenuPrivate::hideMenu(QMenu *menu, bool justRegister)
eventLoop.exec();
}
// Fade out.
if (menu->style()->styleHint(QStyle::SH_Menu_FadeOutOnHide)) {
// ### Qt 4.4:
// Should be something like: q->transitionWindow(Qt::FadeOutTransition, MenuFadeTimeInSec);
// Hopefully we'll integrate qt/research/windowtransitions into main before 4.4.
// Talk to Richard, Trenton or Bjoern.
#if defined(Q_WS_MAC)
if (justRegister) {
QMacWindowFader::currentFader()->setFadeDuration(MenuFadeTimeInSec);
QMacWindowFader::currentFader()->registerWindowToFade(menu);
} else {
macWindowFade(qt_mac_window_for(menu), MenuFadeTimeInSec);
}
#endif // Q_WS_MAC
}
aboutToHide = false;
menu->blockSignals(false);
#endif // QT_NO_EFFECTS
if (!justRegister)
menu->close();
menu->close();
}
void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst)

View File

@ -189,7 +189,7 @@ public:
virtual QList<QPointer<QWidget> > calcCausedStack() const;
QMenuCaused causedPopup;
void hideUpToMenuBar();
void hideMenu(QMenu *menu, bool justRegister = false);
void hideMenu(QMenu *menu);
//index mappings
inline QAction *actionAt(int i) const { return q_func()->actions().at(i); }

View File

@ -29,7 +29,6 @@
\module QtXml
\title Qt XML C++ Classes
\ingroup modules
\ingroup technology-apis
\brief The Qt XML module provides C++ implementations of the SAX and DOM standards for XML.

View File

@ -39,7 +39,6 @@
/*!
\page xml-processing.html
\title XML Processing
\ingroup technology-apis
\brief An Overview of the XML processing facilities in Qt.

View File

@ -131,6 +131,8 @@ private Q_SLOTS:
void bom();
void nesting();
void longStrings();
private:
QString testDataDir;
};
@ -2204,5 +2206,48 @@ void tst_QtJson::nesting()
}
void tst_QtJson::longStrings()
{
// test around 15 and 16 bit boundaries, as these are limits
// in the data structures (for Latin1String in qjson_p.h)
QString s(0x7ff0, 'a');
for (int i = 0x7ff0; i < 0x8010; i++) {
s.append("c");
QMap <QString, QVariant> map;
map["key"] = s;
/* Create a QJsonDocument from the QMap ... */
QJsonDocument d1 = QJsonDocument::fromVariant(QVariant(map));
/* ... and a QByteArray from the QJsonDocument */
QByteArray a1 = d1.toJson();
/* Create a QJsonDocument from the QByteArray ... */
QJsonDocument d2 = QJsonDocument::fromJson(a1);
/* ... and a QByteArray from the QJsonDocument */
QByteArray a2 = d2.toJson();
QVERIFY(a1 == a2);
}
s = QString(0xfff0, 'a');
for (int i = 0xfff0; i < 0x10010; i++) {
s.append("c");
QMap <QString, QVariant> map;
map["key"] = s;
/* Create a QJsonDocument from the QMap ... */
QJsonDocument d1 = QJsonDocument::fromVariant(QVariant(map));
/* ... and a QByteArray from the QJsonDocument */
QByteArray a1 = d1.toJson();
/* Create a QJsonDocument from the QByteArray ... */
QJsonDocument d2 = QJsonDocument::fromJson(a1);
/* ... and a QByteArray from the QJsonDocument */
QByteArray a2 = d2.toJson();
QVERIFY(a1 == a2);
}
}
QTEST_MAIN(tst_QtJson)
#include "tst_qtjson.moc"

View File

@ -1005,6 +1005,7 @@ void tst_QPixmap::fromWinHICON_data()
void tst_QPixmap::fromWinHICON()
{
#ifndef Q_OS_WINCE
QFETCH(int, width);
QFETCH(int, height);
QFETCH(QString, image);
@ -1020,6 +1021,7 @@ void tst_QPixmap::fromWinHICON()
// between QImage::Format_ARGB32 and QImage::Format_ARGB32_Premultiplied, or elsewhere
QVERIFY(compareImages(imageFromHICON, imageFromFile));
#endif // Q_OS_WINCE
}
#endif // Q_OS_WIN

View File

@ -61,6 +61,7 @@ class tst_QDnsLookup: public QObject
QString domainName(const QString &input);
QString domainNameList(const QString &input);
QStringList domainNameListAlternatives(const QString &input);
public slots:
void initTestCase();
@ -105,6 +106,14 @@ QString tst_QDnsLookup::domainNameList(const QString &input)
return result;
}
QStringList tst_QDnsLookup::domainNameListAlternatives(const QString &input)
{
QStringList alternatives = input.split('|');
for (int i = 0; i < alternatives.length(); ++i)
alternatives[i] = domainNameList(alternatives[i]);
return alternatives;
}
void tst_QDnsLookup::lookup_data()
{
QTest::addColumn<int>("type");
@ -116,46 +125,57 @@ void tst_QDnsLookup::lookup_data()
QTest::addColumn<QString>("ns");
QTest::addColumn<QString>("ptr");
QTest::addColumn<QString>("srv");
QTest::addColumn<QByteArray>("txt");
QTest::addColumn<QString>("txt");
QTest::newRow("a-empty") << int(QDnsLookup::A) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << ""<< "" << QByteArray();
QTest::newRow("a-notfound") << int(QDnsLookup::A) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("a-single") << int(QDnsLookup::A) << "a-single" << int(QDnsLookup::NoError) << "" << "192.0.2.1" << "" << "" << "" << "" << QByteArray();
QTest::newRow("a-multi") << int(QDnsLookup::A) << "a-multi" << int(QDnsLookup::NoError) << "" << "192.0.2.1;192.0.2.2;192.0.2.3" << "" << "" << "" << "" << QByteArray();
QTest::newRow("aaaa-empty") << int(QDnsLookup::AAAA) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("aaaa-notfound") << int(QDnsLookup::AAAA) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("aaaa-single") << int(QDnsLookup::AAAA) << "aaaa-single" << int(QDnsLookup::NoError) << "" << "2001:db8::1" << "" << "" << "" << "" << QByteArray();
QTest::newRow("aaaa-multi") << int(QDnsLookup::AAAA) << "aaaa-multi" << int(QDnsLookup::NoError) << "" << "2001:db8::1;2001:db8::2;2001:db8::3" << "" << "" << "" << "" << QByteArray();
QTest::newRow("a-empty") << int(QDnsLookup::A) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << ""<< "" << "";
QTest::newRow("a-notfound") << int(QDnsLookup::A) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("a-single") << int(QDnsLookup::A) << "a-single" << int(QDnsLookup::NoError) << "" << "192.0.2.1" << "" << "" << "" << "" << "";
QTest::newRow("a-multi") << int(QDnsLookup::A) << "a-multi" << int(QDnsLookup::NoError) << "" << "192.0.2.1;192.0.2.2;192.0.2.3" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-empty") << int(QDnsLookup::AAAA) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-notfound") << int(QDnsLookup::AAAA) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-single") << int(QDnsLookup::AAAA) << "aaaa-single" << int(QDnsLookup::NoError) << "" << "2001:db8::1" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-multi") << int(QDnsLookup::AAAA) << "aaaa-multi" << int(QDnsLookup::NoError) << "" << "2001:db8::1;2001:db8::2;2001:db8::3" << "" << "" << "" << "" << "";
QTest::newRow("any-empty") << int(QDnsLookup::ANY) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("any-notfound") << int(QDnsLookup::ANY) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("any-a-single") << int(QDnsLookup::ANY) << "a-single" << int(QDnsLookup::NoError) << "" << "192.0.2.1" << "" << "" << "" << "" << QByteArray();
QTest::newRow("any-a-plus-aaaa") << int(QDnsLookup::ANY) << "a-plus-aaaa" << int(QDnsLookup::NoError) << "" << "198.51.100.1;2001:db8::1:1" << "" << "" << "" << "" << QByteArray();
QTest::newRow("any-multi") << int(QDnsLookup::ANY) << "multi" << int(QDnsLookup::NoError) << "" << "198.51.100.1;198.51.100.2;198.51.100.3;2001:db8::1:1;2001:db8::1:2" << "" << "" << "" << "" << QByteArray();
QTest::newRow("any-empty") << int(QDnsLookup::ANY) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("any-notfound") << int(QDnsLookup::ANY) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("any-a-single") << int(QDnsLookup::ANY) << "a-single" << int(QDnsLookup::NoError) << "" << "192.0.2.1" << "" << "" << "" << "" << "";
QTest::newRow("any-a-plus-aaaa") << int(QDnsLookup::ANY) << "a-plus-aaaa" << int(QDnsLookup::NoError) << "" << "198.51.100.1;2001:db8::1:1" << "" << "" << "" << "" << "";
QTest::newRow("any-multi") << int(QDnsLookup::ANY) << "multi" << int(QDnsLookup::NoError) << "" << "198.51.100.1;198.51.100.2;198.51.100.3;2001:db8::1:1;2001:db8::1:2" << "" << "" << "" << "" << "";
QTest::newRow("mx-empty") << int(QDnsLookup::MX) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("mx-notfound") << int(QDnsLookup::MX) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("mx-single") << int(QDnsLookup::MX) << "mx-single" << int(QDnsLookup::NoError) << "" << "" << "10 multi" << "" << "" << "" << QByteArray();
QTest::newRow("mx-single-cname") << int(QDnsLookup::MX) << "mx-single-cname" << int(QDnsLookup::NoError) << "" << "" << "10 cname" << "" << "" << "" << QByteArray();
QTest::newRow("mx-multi") << int(QDnsLookup::MX) << "mx-multi" << int(QDnsLookup::NoError) << "" << "" << "10 multi;20 a-single" << "" << "" << "" << QByteArray();
QTest::newRow("mx-empty") << int(QDnsLookup::MX) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("mx-notfound") << int(QDnsLookup::MX) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("mx-single") << int(QDnsLookup::MX) << "mx-single" << int(QDnsLookup::NoError) << "" << "" << "10 multi" << "" << "" << "" << "";
QTest::newRow("mx-single-cname") << int(QDnsLookup::MX) << "mx-single-cname" << int(QDnsLookup::NoError) << "" << "" << "10 cname" << "" << "" << "" << "";
QTest::newRow("mx-multi") << int(QDnsLookup::MX) << "mx-multi" << int(QDnsLookup::NoError) << "" << "" << "10 multi;20 a-single" << "" << "" << "" << "";
QTest::newRow("mx-multi-sameprio") << int(QDnsLookup::MX) << "mx-multi-sameprio" << int(QDnsLookup::NoError) << "" << ""
<< "10 multi;10 a-single|"
"10 a-single;10 multi" << "" << "" << "" << "";
QTest::newRow("ns-empty") << int(QDnsLookup::NS) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("ns-notfound") << int(QDnsLookup::NS) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("ns-single") << int(QDnsLookup::NS) << "ns-single" << int(QDnsLookup::NoError) << "" << "" << "" << "ns3.macieira.info." << "" << "" << QByteArray();
QTest::newRow("ns-multi") << int(QDnsLookup::NS) << "ns-multi" << int(QDnsLookup::NoError) << "" << "" << "" << "gondolin.macieira.info.;ns3.macieira.info." << "" << "" << QByteArray();
QTest::newRow("ns-empty") << int(QDnsLookup::NS) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ns-notfound") << int(QDnsLookup::NS) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ns-single") << int(QDnsLookup::NS) << "ns-single" << int(QDnsLookup::NoError) << "" << "" << "" << "ns3.macieira.info." << "" << "" << "";
QTest::newRow("ns-multi") << int(QDnsLookup::NS) << "ns-multi" << int(QDnsLookup::NoError) << "" << "" << "" << "gondolin.macieira.info.;ns3.macieira.info." << "" << "" << "";
QTest::newRow("ptr-empty") << int(QDnsLookup::PTR) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("ptr-notfound") << int(QDnsLookup::PTR) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("ptr-single") << int(QDnsLookup::PTR) << "ptr-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "a-single" << "" << QByteArray();
QTest::newRow("ptr-empty") << int(QDnsLookup::PTR) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ptr-notfound") << int(QDnsLookup::PTR) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ptr-single") << int(QDnsLookup::PTR) << "ptr-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "a-single" << "" << "";
QTest::newRow("srv-empty") << int(QDnsLookup::SRV) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("srv-notfound") << int(QDnsLookup::SRV) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("srv-single") << int(QDnsLookup::SRV) << "_echo._tcp.srv-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "5 0 7 multi" << QByteArray();
QTest::newRow("srv-prio") << int(QDnsLookup::SRV) << "_echo._tcp.srv-prio" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "1 0 7 multi;2 0 7 a-plus-aaaa" << QByteArray();
QTest::newRow("srv-empty") << int(QDnsLookup::SRV) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("srv-notfound") << int(QDnsLookup::SRV) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("srv-single") << int(QDnsLookup::SRV) << "_echo._tcp.srv-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "5 0 7 multi" << "";
QTest::newRow("srv-prio") << int(QDnsLookup::SRV) << "_echo._tcp.srv-prio" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "1 0 7 multi;2 0 7 a-plus-aaaa" << "";
QTest::newRow("srv-weighted") << int(QDnsLookup::SRV) << "_echo._tcp.srv-weighted" << int(QDnsLookup::NoError) << "" << "" << "" << "" << ""
<< "5 75 7 multi;5 25 7 a-plus-aaaa|"
"5 25 7 a-plus-aaaa;5 75 7 multi" << "";
QTest::newRow("srv-multi") << int(QDnsLookup::SRV) << "_echo._tcp.srv-multi" << int(QDnsLookup::NoError) << "" << "" << "" << "" << ""
<< "1 50 7 multi;2 50 7 a-single;2 50 7 aaaa-single;3 50 7 a-multi|"
"1 50 7 multi;2 50 7 aaaa-single;2 50 7 a-single;3 50 7 a-multi" << "";
QTest::newRow("txt-empty") << int(QDnsLookup::TXT) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("txt-notfound") << int(QDnsLookup::TXT) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << QByteArray();
QTest::newRow("txt-single") << int(QDnsLookup::TXT) << "txt-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << QByteArray("Hello");
QTest::newRow("txt-empty") << int(QDnsLookup::TXT) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("txt-notfound") << int(QDnsLookup::TXT) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("txt-single") << int(QDnsLookup::TXT) << "txt-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << "Hello";
QTest::newRow("txt-multi-onerr") << int(QDnsLookup::TXT) << "txt-multi-onerr" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << "Hello World";
QTest::newRow("txt-multi-multirr") << int(QDnsLookup::TXT) << "txt-multi-multirr" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << "Hello;World";
}
void tst_QDnsLookup::lookup()
@ -169,15 +189,18 @@ void tst_QDnsLookup::lookup()
QFETCH(QString, ns);
QFETCH(QString, ptr);
QFETCH(QString, srv);
QFETCH(QByteArray, txt);
QFETCH(QString, txt);
// transform the inputs
domain = domainName(domain);
cname = domainName(cname);
mx = domainNameList(mx);
ns = domainNameList(ns);
ptr = domainNameList(ptr);
srv = domainNameList(srv);
// SRV and MX have reply entries that can change order
// and we can't sort
QStringList mx_alternatives = domainNameListAlternatives(mx);
QStringList srv_alternatives = domainNameListAlternatives(srv);
QDnsLookup lookup;
lookup.setType(static_cast<QDnsLookup::Type>(type));
@ -218,7 +241,8 @@ void tst_QDnsLookup::lookup()
QCOMPARE(record.name(), domain);
mailExchanges << QString("%1 %2").arg(QString::number(record.preference()), record.exchange());
}
QCOMPARE(mailExchanges.join(';'), mx);
QVERIFY2(mx_alternatives.contains(mailExchanges.join(';')),
qPrintable("Actual: " + mailExchanges.join(';') + "\nExpected one of:\n" + mx_alternatives.join('\n')));
// name servers
QStringList nameServers;
@ -250,18 +274,23 @@ void tst_QDnsLookup::lookup()
QString::number(record.port()),
record.target());
}
QCOMPARE(services.join(';'), srv);
QVERIFY2(srv_alternatives.contains(services.join(';')),
qPrintable("Actual: " + services.join(';') + "\nExpected one of:\n" + srv_alternatives.join('\n')));
// text
if (!txt.isEmpty()) {
QVERIFY(!lookup.textRecords().isEmpty());
const QDnsTextRecord firstRecord = lookup.textRecords().first();
QCOMPARE(firstRecord.name(), domain);
QCOMPARE(firstRecord.values().size(), 1);
QCOMPARE(firstRecord.values().first(), txt);
} else {
QVERIFY(lookup.textRecords().isEmpty());
QStringList texts;
foreach (const QDnsTextRecord &record, lookup.textRecords()) {
QCOMPARE(record.name(), domain);
QString text;
foreach (const QByteArray &ba, record.values()) {
if (!text.isEmpty())
text += ' ';
text += QString::fromLatin1(ba);
}
texts << text;
}
texts.sort();
QCOMPARE(texts.join(';'), txt);
}
void tst_QDnsLookup::lookupReuse()

View File

@ -1,5 +1,5 @@
********* Start testing of tst_Alive *********
Config: Using QTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
PASS : tst_Alive::initTestCase()
QWARN : tst_Alive::alive() TEST LAGS 3 PINGS behind!
QWARN : tst_Alive::alive() TEST LAGS 4 PINGS behind!

View File

@ -1,5 +1,5 @@
********* Start testing of tst_Assert *********
Config: Using QTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
PASS : tst_Assert::initTestCase()
PASS : tst_Assert::testNumber1()
QFATAL : tst_Assert::testNumber2() ASSERT: "false" in file tst_assert.cpp, line 66

Some files were not shown because too many files have changed in this diff Show More