Merge remote branch 'staging/master' into refactor
Conflicts: src/opengl/qgl_qpa.cpp src/plugins/platforms/glxconvenience/qglxconvenience.cpp src/plugins/platforms/platforms.pro src/plugins/platforms/wayland/qwaylandwindow.cpp src/plugins/platforms/xcb/qxcbwindow.cpp src/plugins/platforms/xcb/qxcbwindow.h src/plugins/platforms/xcb/qxcbwindowsurface.cpp src/widgets/kernel/qwidget_qpa.cpp tests/auto/qvariant/tst_qvariant.cpp
This commit is contained in:
commit
d671acd5b2
27
configure
vendored
27
configure
vendored
@ -751,6 +751,7 @@ CFG_DECORATION_PLUGIN_AVAILABLE=
|
||||
CFG_DECORATION_PLUGIN=
|
||||
CFG_XINPUT=runtime
|
||||
CFG_XKB=auto
|
||||
CFG_XCB=no
|
||||
CFG_NIS=auto
|
||||
CFG_CUPS=auto
|
||||
CFG_ICONV=auto
|
||||
@ -1043,7 +1044,7 @@ while [ "$#" -gt 0 ]; do
|
||||
VAL=no
|
||||
;;
|
||||
#Qt style yes options
|
||||
-incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-harfbuzz|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-declarative-debug|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu)
|
||||
-incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-xcb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-harfbuzz|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-declarative-debug|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu)
|
||||
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
|
||||
VAL=yes
|
||||
;;
|
||||
@ -1971,6 +1972,13 @@ while [ "$#" -gt 0 ]; do
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
xcb)
|
||||
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
|
||||
CFG_XCB="$VAL"
|
||||
else
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
cups)
|
||||
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
|
||||
CFG_CUPS="$VAL"
|
||||
@ -3711,6 +3719,14 @@ if [ "$OPT_HELP" = "yes" ]; then
|
||||
PHN=" "
|
||||
fi
|
||||
|
||||
if [ "$CFG_XCB" = "no" ]; then
|
||||
XCY=" "
|
||||
XCN="*"
|
||||
else
|
||||
XCY="*"
|
||||
XCN=" "
|
||||
fi
|
||||
|
||||
cat <<EOF
|
||||
Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir <dir>]
|
||||
[-docdir <dir>] [-headerdir <dir>] [-plugindir <dir> ] [-importdir <dir>] [-datadir <dir>]
|
||||
@ -4061,6 +4077,9 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "ye
|
||||
$SBN -no-separate-debug-info . Do not store debug information in a separate file.
|
||||
$SBY -separate-debug-info .... Strip debug information into a separate .debug file.
|
||||
|
||||
$XKN -no-xcb ............ Do not compile Xcb (X protocol C-language Binding) support.
|
||||
$XKY -xcb ............... Compile Xcb support.
|
||||
|
||||
EOF
|
||||
|
||||
fi # X11/QWS
|
||||
@ -7270,6 +7289,7 @@ fi
|
||||
[ "$CFG_OPENSSL" = "yes" ] && QT_CONFIG="$QT_CONFIG openssl"
|
||||
[ "$CFG_OPENSSL" = "linked" ] && QT_CONFIG="$QT_CONFIG openssl-linked"
|
||||
[ "$CFG_MAC_HARFBUZZ" = "yes" ] && QT_CONFIG="$QT_CONFIG harfbuzz"
|
||||
[ "$CFG_XCB" = "yes" ] && QT_CONFIG="$QT_CONFIG xcb"
|
||||
|
||||
if [ "$PLATFORM_X11" = "yes" ]; then
|
||||
[ "$CFG_SM" = "yes" ] && QT_CONFIG="$QT_CONFIG x11sm"
|
||||
@ -7524,10 +7544,8 @@ EOF
|
||||
canBuildQtConcurrent="no"
|
||||
;;
|
||||
symbian-gcce)
|
||||
canBuildQtConcurrent="no"
|
||||
;;
|
||||
symbian-armcc)
|
||||
canBuildQtConcurrent="no"
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -8256,7 +8274,7 @@ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
|
||||
# We cannot use Linux's default export rules since they export everything.
|
||||
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_DLL"
|
||||
# Disable non-working features.
|
||||
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_CONCURRENT QT_NO_QFUTURE QT_NO_CRASHHANDLER QT_NO_PRINTER QT_NO_SYSTEMTRAYICON"
|
||||
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_CRASHHANDLER QT_NO_PRINTER QT_NO_SYSTEMTRAYICON"
|
||||
fi
|
||||
|
||||
if [ -n "$QCONFIG_FLAGS" ]; then
|
||||
@ -8834,6 +8852,7 @@ if [ "$PLATFORM_MAC" = "yes" ]; then
|
||||
fi
|
||||
echo "ICD support ............ $CFG_ICD"
|
||||
echo "libICU support ......... $CFG_ICU"
|
||||
echo "Xcb support ............ $CFG_XCB"
|
||||
echo
|
||||
|
||||
[ "$CFG_PTMALLOC" != "no" ] && echo "Use ptmalloc ........... $CFG_PTMALLOC"
|
||||
|
BIN
configure.exe
BIN
configure.exe
Binary file not shown.
@ -49,14 +49,9 @@
|
||||
//! [0]
|
||||
|
||||
//! [3]
|
||||
#define QT_USE_FAST_CONCATENATION
|
||||
DEFINES *= QT_USE_QSTRINGBUILDER
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
#define QT_USE_FAST_CONCATENATION
|
||||
#define QT_USE_FAST_OPERATOR_PLUS
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
#include <QStringBuilder>
|
||||
|
||||
|
@ -38,6 +38,10 @@ embedded: check.commands += -qws
|
||||
|
||||
# Allow for custom arguments to tests
|
||||
check.commands += $(TESTARGS)
|
||||
|
||||
# If the test is marked as insignificant, discard the exit code
|
||||
insignificant_test:check.commands = -$${check.commands}
|
||||
|
||||
QMAKE_EXTRA_TARGETS *= check
|
||||
|
||||
!debug_and_release|build_pass {
|
||||
|
@ -57,9 +57,10 @@
|
||||
# ifdef QT_USE_FAST_OPERATOR_PLUS
|
||||
# undef QT_USE_FAST_OPERATOR_PLUS
|
||||
# endif
|
||||
# ifdef QT_USE_FAST_CONCATENATION
|
||||
# undef QT_USE_FAST_CONCATENATION
|
||||
# ifdef QT_USE_QSTRINGBUILDER
|
||||
# undef QT_USE_QSTRINGBUILDER
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -559,8 +560,7 @@ inline bool operator>=(const QByteArray &a1, const char *a2)
|
||||
{ return qstrcmp(a1, a2) >= 0; }
|
||||
inline bool operator>=(const char *a1, const QByteArray &a2)
|
||||
{ return qstrcmp(a1, a2) >= 0; }
|
||||
#ifndef QT_USE_FAST_OPERATOR_PLUS
|
||||
# ifndef QT_USE_FAST_CONCATENATION
|
||||
#if !defined(QT_USE_QSTRINGBUILDER)
|
||||
inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
|
||||
{ return QByteArray(a1) += a2; }
|
||||
inline const QByteArray operator+(const QByteArray &a1, const char *a2)
|
||||
@ -571,8 +571,7 @@ inline const QByteArray operator+(const char *a1, const QByteArray &a2)
|
||||
{ return QByteArray(a1) += a2; }
|
||||
inline const QByteArray operator+(char a1, const QByteArray &a2)
|
||||
{ return QByteArray(&a1, 1) += a2; }
|
||||
# endif // QT_USE_FAST_CONCATENATION
|
||||
#endif // QT_USE_FAST_OPERATOR_PLUS
|
||||
#endif // QT_USE_QSTRINGBUILDER
|
||||
inline QBool QByteArray::contains(const char *c) const
|
||||
{ return QBool(indexOf(c) != -1); }
|
||||
inline QByteArray &QByteArray::replace(char before, const char *c)
|
||||
@ -615,7 +614,7 @@ QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#ifdef QT_USE_FAST_CONCATENATION
|
||||
#ifdef QT_USE_QSTRINGBUILDER
|
||||
#include <QtCore/qstring.h>
|
||||
#endif
|
||||
|
||||
|
@ -777,16 +777,12 @@ const QString::Null QString::null = { };
|
||||
|
||||
\snippet doc/src/snippets/qstring/stringbuilder.cpp 5
|
||||
|
||||
A more global approach is to include this define:
|
||||
A more global approach which is the most convenient but
|
||||
not entirely source compatible, is to this define in your
|
||||
.pro file:
|
||||
|
||||
\snippet doc/src/snippets/qstring/stringbuilder.cpp 3
|
||||
|
||||
and use \c{'%'} instead of \c{'+'} for string concatenation
|
||||
everywhere. The third approach, which is the most convenient but
|
||||
not entirely source compatible, is to include two defines:
|
||||
|
||||
\snippet doc/src/snippets/qstring/stringbuilder.cpp 4
|
||||
|
||||
and the \c{'+'} will automatically be performed as the
|
||||
\c{QStringBuilder} \c{'%'} everywhere.
|
||||
|
||||
|
@ -1016,8 +1016,7 @@ inline int QByteArray::findRev(const QString &s, int from) const
|
||||
# endif // QT3_SUPPORT
|
||||
#endif // QT_NO_CAST_TO_ASCII
|
||||
|
||||
#ifndef QT_USE_FAST_OPERATOR_PLUS
|
||||
# ifndef QT_USE_FAST_CONCATENATION
|
||||
#if !defined(QT_USE_FAST_OPERATOR_PLUS) && !defined(QT_USE_QSTRINGBUILDER)
|
||||
inline const QString operator+(const QString &s1, const QString &s2)
|
||||
{ QString t(s1); t += s2; return t; }
|
||||
inline const QString operator+(const QString &s1, QChar s2)
|
||||
@ -1038,8 +1037,7 @@ inline QT_ASCII_CAST_WARN const QString operator+(const QByteArray &ba, const QS
|
||||
inline QT_ASCII_CAST_WARN const QString operator+(const QString &s, const QByteArray &ba)
|
||||
{ QString t(s); t += QString::fromAscii(ba.constData(), qstrnlen(ba.constData(), ba.size())); return t; }
|
||||
# endif // QT_NO_CAST_FROM_ASCII
|
||||
# endif // QT_USE_FAST_CONCATENATION
|
||||
#endif // QT_USE_FAST_OPERATOR_PLUS
|
||||
#endif // QT_USE_QSTRINGBUILDER
|
||||
|
||||
#ifndef QT_NO_STL
|
||||
inline std::string QString::toStdString() const
|
||||
@ -1288,7 +1286,7 @@ QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#ifdef QT_USE_FAST_CONCATENATION
|
||||
#if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
|
||||
#include <QtCore/qstringbuilder.h>
|
||||
#endif
|
||||
|
||||
|
@ -410,7 +410,9 @@ operator%(const A &a, const B &b)
|
||||
return QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>(a, b);
|
||||
}
|
||||
|
||||
#ifdef QT_USE_FAST_OPERATOR_PLUS
|
||||
// QT_USE_FAST_OPERATOR_PLUS was introduced in 4.7, QT_USE_QSTRINGBUILDER is to be used from 4.8 onwards
|
||||
// QT_USE_FAST_OPERATOR_PLUS does not remove the normal operator+ for QByteArray
|
||||
#if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
|
||||
template <typename A, typename B>
|
||||
QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>
|
||||
operator+(const A &a, const B &b)
|
||||
|
@ -532,8 +532,7 @@ QString QColor::name() const
|
||||
|
||||
void QColor::setNamedColor(const QString &name)
|
||||
{
|
||||
if (!setColorFromString(name))
|
||||
qWarning("QColor::setNamedColor: Unknown color name '%s'", name.toLatin1().constData());
|
||||
setColorFromString(name);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -986,7 +986,7 @@ public:
|
||||
|
||||
static inline Int32x4 v_toInt(Float32x4 x) { return vcvtq_s32_f32(x); }
|
||||
|
||||
static inline Int32x4 v_greaterOrEqual(Float32x4 a, Float32x4 b) { return vcge_f32(a, b); }
|
||||
static inline Int32x4 v_greaterOrEqual(Float32x4 a, Float32x4 b) { return vreinterpretq_s32_u32(vcgeq_f32(a, b)); }
|
||||
};
|
||||
|
||||
const uint * QT_FASTCALL qt_fetch_radial_gradient_neon(uint *buffer, const Operator *op, const QSpanData *data,
|
||||
|
@ -3008,8 +3008,16 @@ void QRasterPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
|
||||
ensurePen();
|
||||
ensureState();
|
||||
|
||||
drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->glyphPositions,
|
||||
textItem->fontEngine());
|
||||
QRasterPaintEngineState *s = state();
|
||||
|
||||
QFontEngine *fontEngine = textItem->fontEngine();
|
||||
const qreal pixelSize = fontEngine->fontDef.pixelSize;
|
||||
if (pixelSize * pixelSize * qAbs(s->matrix.determinant()) < 64 * 64) {
|
||||
drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->glyphPositions,
|
||||
fontEngine);
|
||||
} else {
|
||||
QPaintEngineEx::drawStaticTextItem(textItem);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -44,6 +44,8 @@
|
||||
#include "qstroker_p.h"
|
||||
#include "qbezier_p.h"
|
||||
#include <private/qpainterpath_p.h>
|
||||
#include <private/qfontengine_p.h>
|
||||
#include <private/qstatictext_p.h>
|
||||
|
||||
#include <qvarlengtharray.h>
|
||||
#include <qdebug.h>
|
||||
@ -1057,5 +1059,38 @@ Q_GUI_EXPORT QPainterPath qt_painterPathFromVectorPath(const QVectorPath &path)
|
||||
return p;
|
||||
}
|
||||
|
||||
void QPaintEngineEx::drawStaticTextItem(QStaticTextItem *staticTextItem)
|
||||
{
|
||||
QPainterPath path;
|
||||
#ifndef Q_WS_MAC
|
||||
path.setFillRule(Qt::WindingFill);
|
||||
#endif
|
||||
|
||||
if (staticTextItem->numGlyphs == 0)
|
||||
return;
|
||||
|
||||
QFontEngine *fontEngine = staticTextItem->fontEngine();
|
||||
fontEngine->addGlyphsToPath(staticTextItem->glyphs, staticTextItem->glyphPositions,
|
||||
staticTextItem->numGlyphs, &path, 0);
|
||||
if (!path.isEmpty()) {
|
||||
QPainterState *s = state();
|
||||
QPainter::RenderHints oldHints = s->renderHints;
|
||||
bool changedHints = false;
|
||||
if (bool(oldHints & QPainter::TextAntialiasing)
|
||||
&& !bool(fontEngine->fontDef.styleStrategy & QFont::NoAntialias)
|
||||
&& !bool(oldHints & QPainter::Antialiasing)) {
|
||||
s->renderHints |= QPainter::Antialiasing;
|
||||
renderHintsChanged();
|
||||
changedHints = true;
|
||||
}
|
||||
|
||||
fill(qtVectorPathForPath(path), staticTextItem->color);
|
||||
|
||||
if (changedHints) {
|
||||
s->renderHints = oldHints;
|
||||
renderHintsChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -201,7 +201,7 @@ public:
|
||||
|
||||
virtual void updateState(const QPaintEngineState &state);
|
||||
|
||||
virtual void drawStaticTextItem(QStaticTextItem *) = 0;
|
||||
virtual void drawStaticTextItem(QStaticTextItem *);
|
||||
|
||||
virtual void setState(QPainterState *s);
|
||||
inline QPainterState *state() { return static_cast<QPainterState *>(QPaintEngine::state); }
|
||||
|
@ -795,7 +795,7 @@ int QFontEngineFT::loadFlags(QGlyphSet *set, GlyphFormat format, int flags,
|
||||
if (set && set->outline_drawing)
|
||||
load_flags = FT_LOAD_NO_BITMAP;
|
||||
|
||||
if (default_hint_style == HintNone || (flags & HB_ShaperFlag_UseDesignMetrics))
|
||||
if (default_hint_style == HintNone || (flags & HB_ShaperFlag_UseDesignMetrics) || set->outline_drawing)
|
||||
load_flags |= FT_LOAD_NO_HINTING;
|
||||
else
|
||||
load_flags |= load_target;
|
||||
|
@ -720,7 +720,8 @@ Q_IPV6ADDR QHostAddress::toIPv6Address() const
|
||||
Returns the address as a string.
|
||||
|
||||
For example, if the address is the IPv4 address 127.0.0.1, the
|
||||
returned string is "127.0.0.1".
|
||||
returned string is "127.0.0.1". For IPv6 the string format will
|
||||
follow the RFC5952 recommendation.
|
||||
|
||||
\sa toIPv4Address()
|
||||
*/
|
||||
@ -741,8 +742,32 @@ QString QHostAddress::toString() const
|
||||
ugle[i] = (quint16(d->a6[2*i]) << 8) | quint16(d->a6[2*i+1]);
|
||||
}
|
||||
QString s;
|
||||
s.sprintf("%X:%X:%X:%X:%X:%X:%X:%X",
|
||||
ugle[0], ugle[1], ugle[2], ugle[3], ugle[4], ugle[5], ugle[6], ugle[7]);
|
||||
QString temp;
|
||||
bool zeroDetected = false;
|
||||
bool zeroShortened = false;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if ((ugle[i] != 0) || zeroShortened) {
|
||||
temp.sprintf("%X", ugle[i]);
|
||||
s.append(temp);
|
||||
if (zeroDetected)
|
||||
zeroShortened = true;
|
||||
} else {
|
||||
if (!zeroDetected) {
|
||||
if (i<7 && (ugle[i+1] == 0)) {
|
||||
s.append(QLatin1Char(':'));
|
||||
zeroDetected = true;
|
||||
} else {
|
||||
temp.sprintf("%X", ugle[i]);
|
||||
s.append(temp);
|
||||
if (i<7)
|
||||
s.append(QLatin1Char(':'));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i<7 && ((ugle[i] != 0) || zeroShortened || (i==0 && zeroDetected)))
|
||||
s.append(QLatin1Char(':'));
|
||||
}
|
||||
|
||||
if (!d->scopeId.isEmpty())
|
||||
s.append(QLatin1Char('%') + d->scopeId);
|
||||
return s;
|
||||
|
@ -219,7 +219,7 @@ static QNetworkInterfacePrivate *findInterface(int socket, QList<QNetworkInterfa
|
||||
#ifdef SIOCGIFHWADDR
|
||||
// Get the HW address
|
||||
if (qt_safe_ioctl(socket, SIOCGIFHWADDR, &req) >= 0) {
|
||||
uchar *addr = (uchar *)&req.ifr_addr;
|
||||
uchar *addr = (uchar *)req.ifr_addr.sa_data;
|
||||
iface->hardwareAddress = iface->makeHwAddress(6, addr);
|
||||
}
|
||||
#endif
|
||||
|
@ -1436,19 +1436,30 @@ void QGL2PaintEngineEx::drawStaticTextItem(QStaticTextItem *textItem)
|
||||
|
||||
ensureActive();
|
||||
|
||||
QFontEngineGlyphCache::Type glyphType = textItem->fontEngine()->glyphFormat >= 0
|
||||
? QFontEngineGlyphCache::Type(textItem->fontEngine()->glyphFormat)
|
||||
: d->glyphCacheType;
|
||||
if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) {
|
||||
if (d->device->alphaRequested() || state()->matrix.type() > QTransform::TxTranslate
|
||||
|| (state()->composition_mode != QPainter::CompositionMode_Source
|
||||
&& state()->composition_mode != QPainter::CompositionMode_SourceOver))
|
||||
{
|
||||
glyphType = QFontEngineGlyphCache::Raster_A8;
|
||||
}
|
||||
}
|
||||
QPainterState *s = state();
|
||||
float det = s->matrix.determinant();
|
||||
|
||||
d->drawCachedGlyphs(glyphType, textItem);
|
||||
// don't try to cache huge fonts or vastly transformed fonts
|
||||
QFontEngine *fontEngine = textItem->fontEngine();
|
||||
const qreal pixelSize = fontEngine->fontDef.pixelSize;
|
||||
if (pixelSize * pixelSize * qAbs(det) < QT_MAX_CACHED_GLYPH_SIZE * QT_MAX_CACHED_GLYPH_SIZE ||
|
||||
det < 0.25f || det > 4.f) {
|
||||
QFontEngineGlyphCache::Type glyphType = fontEngine->glyphFormat >= 0
|
||||
? QFontEngineGlyphCache::Type(textItem->fontEngine()->glyphFormat)
|
||||
: d->glyphCacheType;
|
||||
if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) {
|
||||
if (d->device->alphaRequested() || s->matrix.type() > QTransform::TxTranslate
|
||||
|| (s->composition_mode != QPainter::CompositionMode_Source
|
||||
&& s->composition_mode != QPainter::CompositionMode_SourceOver))
|
||||
{
|
||||
glyphType = QFontEngineGlyphCache::Raster_A8;
|
||||
}
|
||||
}
|
||||
|
||||
d->drawCachedGlyphs(glyphType, textItem);
|
||||
} else {
|
||||
QPaintEngineEx::drawStaticTextItem(textItem);
|
||||
}
|
||||
}
|
||||
|
||||
bool QGL2PaintEngineEx::drawTexture(const QRectF &dest, GLuint textureId, const QSize &size, const QRectF &src)
|
||||
|
@ -83,21 +83,21 @@ QGLFormat QGLFormat::fromWindowFormat(const QWindowFormat &format)
|
||||
QWindowFormat QGLFormat::toWindowFormat(const QGLFormat &format)
|
||||
{
|
||||
QWindowFormat retFormat;
|
||||
if (format.alphaBufferSize() >= 0)
|
||||
retFormat.setAlphaBufferSize(format.alphaBufferSize());
|
||||
if (format.alpha())
|
||||
retFormat.setAlphaBufferSize(format.alphaBufferSize() == -1 ? 1 : format.alphaBufferSize());
|
||||
if (format.blueBufferSize() >= 0)
|
||||
retFormat.setBlueBufferSize(format.blueBufferSize());
|
||||
if (format.greenBufferSize() >= 0)
|
||||
retFormat.setGreenBufferSize(format.greenBufferSize());
|
||||
if (format.redBufferSize() >= 0)
|
||||
retFormat.setRedBufferSize(format.redBufferSize());
|
||||
if (format.depthBufferSize() >= 0)
|
||||
retFormat.setDepthBufferSize(format.depthBufferSize());
|
||||
if (format.depth())
|
||||
retFormat.setDepthBufferSize(format.depthBufferSize() == -1 ? 1 : format.depthBufferSize());
|
||||
retFormat.setSwapBehavior(format.doubleBuffer() ? QWindowFormat::DoubleBuffer : QWindowFormat::DefaultSwapBehavior);
|
||||
if (format.sampleBuffers() && format.samples() > 1)
|
||||
retFormat.setSamples(format.samples());
|
||||
if (format.stencil() && format.stencilBufferSize() > 0)
|
||||
retFormat.setStencilBufferSize(format.stencilBufferSize());
|
||||
if (format.sampleBuffers())
|
||||
retFormat.setSamples(format.samples() == -1 ? 4 : format.samples());
|
||||
if (format.stencil())
|
||||
retFormat.setStencilBufferSize(format.stencilBufferSize() == -1 ? 1 : format.stencilBufferSize());
|
||||
retFormat.setStereo(format.stereo());
|
||||
return retFormat;
|
||||
}
|
||||
@ -138,6 +138,8 @@ bool QGLContext::chooseContext(const QGLContext* shareContext)
|
||||
winFormat.setSharedContext(shareContext->d_func()->windowContext);
|
||||
}
|
||||
widget->windowHandle()->setSurfaceType(QWindow::OpenGLSurface);
|
||||
if (widget->testAttribute(Qt::WA_TranslucentBackground))
|
||||
winFormat.setAlphaBufferSize(qMax(winFormat.alphaBufferSize(), 8));
|
||||
winFormat.setWindowSurface(false);
|
||||
widget->windowHandle()->setWindowFormat(winFormat);
|
||||
widget->winId();//make window
|
||||
|
@ -362,17 +362,17 @@ QGLShader::ShaderType QGLShader::shaderType() const
|
||||
// The precision qualifiers are useful on OpenGL/ES systems,
|
||||
// but usually not present on desktop systems. Define the
|
||||
// keywords to empty strings on desktop systems.
|
||||
#ifndef QT_OPENGL_ES
|
||||
#if !defined(QT_OPENGL_ES) || defined(QT_OPENGL_FORCE_SHADER_DEFINES)
|
||||
#define QGL_DEFINE_QUALIFIERS 1
|
||||
static const char qualifierDefines[] =
|
||||
"#define lowp\n"
|
||||
"#define mediump\n"
|
||||
"#define highp\n";
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
// The "highp" qualifier doesn't exist in fragment shaders
|
||||
// on all ES platforms. When it doesn't exist, use "mediump".
|
||||
#ifdef QT_OPENGL_ES
|
||||
#define QGL_REDEFINE_HIGHP 1
|
||||
static const char redefineHighp[] =
|
||||
"#ifndef GL_FRAGMENT_PRECISION_HIGH\n"
|
||||
|
@ -485,19 +485,30 @@ void QGLWindowSurface::beginPaint(const QRegion &)
|
||||
d_ptr->did_paint = true;
|
||||
updateGeometry();
|
||||
|
||||
if (!context())
|
||||
return;
|
||||
|
||||
int clearFlags = 0;
|
||||
|
||||
if (context()->d_func()->workaround_needsFullClearOnEveryFrame)
|
||||
#if 0
|
||||
QGLContext *ctx = reinterpret_cast<QGLContext *>(window()->d_func()->extraData()->glContext);
|
||||
#endif
|
||||
const QGLContext *ctx = QGLContext::currentContext();
|
||||
|
||||
if (!ctx)
|
||||
return;
|
||||
|
||||
if (ctx->d_func()->workaround_needsFullClearOnEveryFrame)
|
||||
clearFlags = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT;
|
||||
else if (context()->format().alpha())
|
||||
else if (ctx->format().alpha())
|
||||
clearFlags = GL_COLOR_BUFFER_BIT;
|
||||
|
||||
if (clearFlags) {
|
||||
if (d_ptr->fbo)
|
||||
d_ptr->fbo->bind();
|
||||
|
||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||
glClear(clearFlags);
|
||||
|
||||
if (d_ptr->fbo)
|
||||
d_ptr->fbo->release();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,9 @@ QString QSjisCodec::convertToUnicode(const char* chars, int len, ConverterState
|
||||
uchar ch = chars[i];
|
||||
switch (nbuf) {
|
||||
case 0:
|
||||
if (ch < 0x80 || IsKana(ch)) {
|
||||
if (ch < 0x80) {
|
||||
result += QValidChar(ch);
|
||||
} else if (IsKana(ch)) {
|
||||
// JIS X 0201 Latin or JIS X 0201 Kana
|
||||
u = conv->jisx0201ToUnicode(ch);
|
||||
result += QValidChar(u);
|
||||
|
@ -5,3 +5,11 @@ HEADERS += \
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/qglxconvenience.cpp
|
||||
|
||||
CONFIG += xrender
|
||||
|
||||
xrender {
|
||||
LIBS += -lXrender
|
||||
} else {
|
||||
DEFINES += QT_NO_XRENDER
|
||||
}
|
||||
|
@ -43,6 +43,10 @@
|
||||
|
||||
#include <QtCore/QVector>
|
||||
|
||||
#ifndef QT_NO_XRENDER
|
||||
#include <X11/extensions/Xrender.h>
|
||||
#endif
|
||||
|
||||
enum {
|
||||
XFocusOut = FocusOut,
|
||||
XFocusIn = FocusIn,
|
||||
@ -76,19 +80,25 @@ QVector<int> qglx_buildSpec(const QWindowFormat &format, int drawableBit)
|
||||
spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = drawableBit;
|
||||
|
||||
spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT;
|
||||
|
||||
spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize();
|
||||
spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize();
|
||||
spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize();
|
||||
if (format.hasAlpha()) {
|
||||
spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize();
|
||||
spec[i++] = GLX_ALPHA_SIZE; spec[i++] = format.alphaBufferSize();
|
||||
}
|
||||
|
||||
spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.swapBehavior() != QWindowFormat::SingleBuffer ? True : False;
|
||||
|
||||
spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False;
|
||||
|
||||
spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize();
|
||||
if (format.depthBufferSize() > 0) {
|
||||
spec[i++] = GLX_DEPTH_SIZE; spec[i++] = format.depthBufferSize();
|
||||
}
|
||||
|
||||
spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize();
|
||||
if (format.stencilBufferSize() > 0) {
|
||||
spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize();
|
||||
}
|
||||
|
||||
if (format.samples() > 1) {
|
||||
spec[i++] = GLX_SAMPLE_BUFFERS_ARB;
|
||||
@ -119,8 +129,17 @@ GLXFBConfig qglx_findConfig(Display *display, int screen , const QWindowFormat &
|
||||
if (reducedFormat.hasAlpha()) {
|
||||
int alphaSize;
|
||||
glXGetFBConfigAttrib(display,configs[i],GLX_ALPHA_SIZE,&alphaSize);
|
||||
if (alphaSize > 0)
|
||||
break;
|
||||
if (alphaSize > 0) {
|
||||
XVisualInfo *visual = glXGetVisualFromFBConfig(display, chosenConfig);
|
||||
#if !defined(QT_NO_XRENDER)
|
||||
XRenderPictFormat *pictFormat = XRenderFindVisualFormat(display, visual->visual);
|
||||
if (pictFormat->direct.alphaMask > 0)
|
||||
break;
|
||||
#else
|
||||
if (visual->depth == 32)
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
break; // Just choose the first in the list if there's no alpha requested
|
||||
}
|
||||
|
@ -50,8 +50,8 @@ QMinimalIntegration::QMinimalIntegration()
|
||||
QMinimalScreen *mPrimaryScreen = new QMinimalScreen();
|
||||
|
||||
mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320);
|
||||
mPrimaryScreen->mDepth = 16;
|
||||
mPrimaryScreen->mFormat = QImage::Format_RGB16;
|
||||
mPrimaryScreen->mDepth = 32;
|
||||
mPrimaryScreen->mFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
|
||||
mScreens.append(mPrimaryScreen);
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ class QMinimalScreen : public QPlatformScreen
|
||||
{
|
||||
public:
|
||||
QMinimalScreen()
|
||||
: mDepth(16), mFormat(QImage::Format_RGB16) {}
|
||||
: mDepth(32), mFormat(QImage::Format_ARGB32_Premultiplied) {}
|
||||
|
||||
QRect geometry() const { return mGeometry; }
|
||||
int depth() const { return mDepth; }
|
||||
|
@ -6,7 +6,10 @@ contains(QT_CONFIG, wayland) {
|
||||
SUBDIRS += wayland
|
||||
}
|
||||
|
||||
contains(QT_CONFIG, xcb) {
|
||||
SUBDIRS += xcb
|
||||
}
|
||||
|
||||
mac {
|
||||
SUBDIRS += cocoa
|
||||
}
|
||||
|
||||
|
@ -132,10 +132,12 @@ void QWaylandXCompositeGLXContext::geometryChanged()
|
||||
Colormap cmap = XCreateColormap(mGlxIntegration->xDisplay(),mGlxIntegration->rootWindow(),visualInfo->visual,AllocNone);
|
||||
|
||||
XSetWindowAttributes a;
|
||||
a.background_pixel = WhitePixel(mGlxIntegration->xDisplay(), mGlxIntegration->screen());
|
||||
a.border_pixel = BlackPixel(mGlxIntegration->xDisplay(), mGlxIntegration->screen());
|
||||
a.colormap = cmap;
|
||||
mXWindow = XCreateWindow(mGlxIntegration->xDisplay(), mGlxIntegration->rootWindow(),0, 0, size.width(), size.height(),
|
||||
0, visualInfo->depth, InputOutput, visualInfo->visual,
|
||||
CWColormap, &a);
|
||||
CWBackPixel|CWBorderPixel|CWColormap, &a);
|
||||
|
||||
XCompositeRedirectWindow(mGlxIntegration->xDisplay(), mXWindow, CompositeRedirectManual);
|
||||
XMapWindow(mGlxIntegration->xDisplay(), mXWindow);
|
||||
|
@ -48,7 +48,7 @@
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QFile>
|
||||
#include <QtCore/QtDebug>
|
||||
#include <QtWidgets/private/qdnd_p.h>
|
||||
#include <QtGui/private/qdnd_p.h>
|
||||
|
||||
static QWaylandClipboard *clipboard;
|
||||
|
||||
|
@ -51,6 +51,10 @@
|
||||
#include "gl_integration/qwaylandglintegration.h"
|
||||
#endif
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
#include "windowmanager_integration/qwaylandwindowmanagerintegration.h"
|
||||
#endif
|
||||
|
||||
#include <QtCore/QAbstractEventDispatcher>
|
||||
#include <QtGui/private/qguiapplication_p.h>
|
||||
|
||||
@ -96,6 +100,13 @@ QWaylandGLIntegration * QWaylandDisplay::eglIntegration()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
QWaylandWindowManagerIntegration *QWaylandDisplay::windowManagerIntegration()
|
||||
{
|
||||
return mWindowManagerIntegration;
|
||||
}
|
||||
#endif
|
||||
|
||||
void QWaylandDisplay::shellHandleConfigure(void *data, struct wl_shell *shell,
|
||||
uint32_t time, uint32_t edges,
|
||||
struct wl_surface *surface,
|
||||
@ -135,6 +146,10 @@ QWaylandDisplay::QWaylandDisplay(void)
|
||||
mEglIntegration->initialize();
|
||||
#endif
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this);
|
||||
#endif
|
||||
|
||||
connect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), this, SLOT(flushRequests()));
|
||||
|
||||
mFd = wl_display_get_fd(mDisplay, sourceUpdate, this);
|
||||
|
@ -55,6 +55,8 @@ class QWaylandBuffer;
|
||||
class QPlatformScreen;
|
||||
class QWaylandScreen;
|
||||
class QWaylandGLIntegration;
|
||||
class QWaylandWindowManagerIntegration;
|
||||
|
||||
class QWaylandDisplay : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
@ -74,6 +76,11 @@ public:
|
||||
#ifdef QT_WAYLAND_GL_SUPPORT
|
||||
QWaylandGLIntegration *eglIntegration();
|
||||
#endif
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
QWaylandWindowManagerIntegration *windowManagerIntegration();
|
||||
#endif
|
||||
|
||||
void setCursor(QWaylandBuffer *buffer, int32_t x, int32_t y);
|
||||
|
||||
void syncCallback(wl_display_sync_func_t func, void *data);
|
||||
@ -124,6 +131,10 @@ private:
|
||||
QWaylandGLIntegration *mEglIntegration;
|
||||
#endif
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
QWaylandWindowManagerIntegration *mWindowManagerIntegration;
|
||||
#endif
|
||||
|
||||
static void shellHandleConfigure(void *data, struct wl_shell *shell,
|
||||
uint32_t time, uint32_t edges,
|
||||
struct wl_surface *surface,
|
||||
|
@ -47,6 +47,12 @@
|
||||
#include "qwaylandscreen.h"
|
||||
|
||||
#include <QtGui/QWindow>
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
#include "windowmanager_integration/qwaylandwindowmanagerintegration.h"
|
||||
#endif
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QtGui/QWindowSystemInterface>
|
||||
|
||||
#include <QDebug>
|
||||
@ -60,6 +66,10 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
|
||||
static WId id = 1;
|
||||
mWindowId = id++;
|
||||
|
||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
mDisplay->windowManagerIntegration()->mapClientToProcess(qApp->applicationPid());
|
||||
#endif
|
||||
|
||||
mSurface = mDisplay->createSurface(this);
|
||||
}
|
||||
|
||||
@ -120,7 +130,6 @@ void QWaylandWindow::attach(QWaylandBuffer *buffer)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void QWaylandWindow::damage(const QRegion ®ion)
|
||||
{
|
||||
//We have to do sync stuff before calling damage, or we might
|
||||
|
@ -45,8 +45,10 @@ QT += core-private
|
||||
QT += widgets-private
|
||||
|
||||
include ($$PWD/gl_integration/gl_integration.pri)
|
||||
include ($$PWD/windowmanager_integration/windowmanager_integration.pri)
|
||||
|
||||
include (../fontdatabases/genericunix/genericunix.pri)
|
||||
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/platforms
|
||||
INSTALLS += target
|
||||
|
||||
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright © 2010 Kristian Høgsberg
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that copyright
|
||||
* notice and this permission notice appear in supporting documentation, and
|
||||
* that the name of the copyright holders not be used in advertising or
|
||||
* publicity pertaining to distribution of the software without specific,
|
||||
* written prior permission. The copyright holders make no representations
|
||||
* about the suitability of this software for any purpose. It is provided "as
|
||||
* is" without express or implied warranty.
|
||||
*
|
||||
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef WAYLAND_WINDOWMANAGER_CLIENT_PROTOCOL_H
|
||||
#define WAYLAND_WINDOWMANAGER_CLIENT_PROTOCOL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "wayland-util.h"
|
||||
|
||||
struct wl_client;
|
||||
|
||||
struct wl_windowmanager;
|
||||
|
||||
extern const struct wl_interface wl_windowmanager_interface;
|
||||
|
||||
#define WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0
|
||||
|
||||
static inline struct wl_windowmanager *
|
||||
wl_windowmanager_create(struct wl_display *display, uint32_t id, uint32_t /*version*/)
|
||||
{
|
||||
// ### does not run without latest wayland. must be enabled later
|
||||
//wl_display_bind(display, id, "wl_windowmanager", version);
|
||||
|
||||
return (struct wl_windowmanager *)
|
||||
wl_proxy_create_for_id(display, &wl_windowmanager_interface, id);
|
||||
}
|
||||
|
||||
static inline void
|
||||
wl_windowmanager_set_user_data(struct wl_windowmanager *wl_windowmanager, void *user_data)
|
||||
{
|
||||
wl_proxy_set_user_data((struct wl_proxy *) wl_windowmanager, user_data);
|
||||
}
|
||||
|
||||
static inline void *
|
||||
wl_windowmanager_get_user_data(struct wl_windowmanager *wl_windowmanager)
|
||||
{
|
||||
return wl_proxy_get_user_data((struct wl_proxy *) wl_windowmanager);
|
||||
}
|
||||
|
||||
static inline void
|
||||
wl_windowmanager_destroy(struct wl_windowmanager *wl_windowmanager)
|
||||
{
|
||||
wl_proxy_destroy((struct wl_proxy *) wl_windowmanager);
|
||||
}
|
||||
|
||||
static inline void
|
||||
wl_windowmanager_map_client_to_process(struct wl_windowmanager *wl_windowmanager, uint32_t processid)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) wl_windowmanager,
|
||||
WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -0,0 +1,85 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qwaylandwindowmanagerintegration.h"
|
||||
#include "qwaylandwindowmanager-client-protocol.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
QWaylandWindowManagerIntegration *QWaylandWindowManagerIntegration::createIntegration(QWaylandDisplay *waylandDisplay)
|
||||
{
|
||||
return new QWaylandWindowManagerIntegration(waylandDisplay);
|
||||
}
|
||||
|
||||
QWaylandWindowManagerIntegration::QWaylandWindowManagerIntegration(QWaylandDisplay *waylandDisplay)
|
||||
: mWaylandDisplay(waylandDisplay)
|
||||
, mWaylandWindowManager(0)
|
||||
{
|
||||
wl_display_add_global_listener(mWaylandDisplay->wl_display(),
|
||||
QWaylandWindowManagerIntegration::wlHandleListenerGlobal,
|
||||
this);
|
||||
}
|
||||
|
||||
QWaylandWindowManagerIntegration::~QWaylandWindowManagerIntegration()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
struct wl_windowmanager *QWaylandWindowManagerIntegration::windowManager() const
|
||||
{
|
||||
return mWaylandWindowManager;
|
||||
}
|
||||
|
||||
void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface,
|
||||
uint32_t version, void *data)
|
||||
{
|
||||
if (strcmp(interface, "wl_windowmanager") == 0) {
|
||||
QWaylandWindowManagerIntegration *integration = static_cast<QWaylandWindowManagerIntegration *>(data);
|
||||
integration->mWaylandWindowManager = wl_windowmanager_create(display,id, version);
|
||||
}
|
||||
}
|
||||
|
||||
void QWaylandWindowManagerIntegration::mapClientToProcess(long long processId)
|
||||
{
|
||||
if (mWaylandWindowManager)
|
||||
wl_windowmanager_map_client_to_process(mWaylandWindowManager, (uint32_t) processId);
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QWAYLANDWINDOWMANAGERINTEGRATION_H
|
||||
#define QWAYLANDWINDOWMANAGERINTEGRATION_H
|
||||
|
||||
#include <QObject>
|
||||
#include "wayland-client.h"
|
||||
#include "qwaylanddisplay.h"
|
||||
|
||||
class QWaylandWindowManagerIntegration
|
||||
{
|
||||
public:
|
||||
explicit QWaylandWindowManagerIntegration(QWaylandDisplay *waylandDisplay);
|
||||
virtual ~QWaylandWindowManagerIntegration();
|
||||
static QWaylandWindowManagerIntegration *createIntegration(QWaylandDisplay *waylandDisplay);
|
||||
struct wl_windowmanager *windowManager() const;
|
||||
|
||||
void mapSurfaceToProcess(struct wl_surface *surface, long long processId);
|
||||
void mapClientToProcess(long long processId);
|
||||
|
||||
private:
|
||||
static void wlHandleListenerGlobal(wl_display *display, uint32_t id,
|
||||
const char *interface, uint32_t version, void *data);
|
||||
|
||||
private:
|
||||
QWaylandDisplay *mWaylandDisplay;
|
||||
struct wl_windowmanager *mWaylandWindowManager;
|
||||
};
|
||||
|
||||
#endif // QWAYLANDWINDOWMANAGERINTEGRATION_H
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright © 2010 Kristian Høgsberg
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that copyright
|
||||
* notice and this permission notice appear in supporting documentation, and
|
||||
* that the name of the copyright holders not be used in advertising or
|
||||
* publicity pertaining to distribution of the software without specific,
|
||||
* written prior permission. The copyright holders make no representations
|
||||
* about the suitability of this software for any purpose. It is provided "as
|
||||
* is" without express or implied warranty.
|
||||
*
|
||||
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "wayland-util.h"
|
||||
|
||||
static const struct wl_message wl_windowmanager_requests[] = {
|
||||
{ "map_client_to_process", "u", NULL },
|
||||
};
|
||||
|
||||
WL_EXPORT const struct wl_interface wl_windowmanager_interface = {
|
||||
"wl_windowmanager", 1,
|
||||
ARRAY_LENGTH(wl_windowmanager_requests), wl_windowmanager_requests,
|
||||
0, NULL,
|
||||
};
|
@ -0,0 +1,16 @@
|
||||
DEFINES += QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||
|
||||
contains(DEFINES, QT_WAYLAND_WINDOWMANAGER_SUPPORT) {
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/qwaylandwindowmanager-client-protocol.h \
|
||||
$$PWD/qwaylandwindowmanagerintegration.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/qwaylandwindowmanagerintegration.cpp \
|
||||
$$PWD/wayland-windowmanager-protocol.c
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -140,8 +140,9 @@ void QXcbWindow::create()
|
||||
xcb_parent_id = static_cast<QXcbWindow *>(parent())->xcb_window();
|
||||
|
||||
#if defined(XCB_USE_GLX) || defined(XCB_USE_EGL)
|
||||
if (window()->surfaceType() == QWindow::OpenGLSurface
|
||||
if ((window()->surfaceType() == QWindow::OpenGLSurface
|
||||
&& QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL))
|
||||
|| window()->requestedWindowFormat().hasAlpha())
|
||||
{
|
||||
#if defined(XCB_USE_GLX)
|
||||
XVisualInfo *visualInfo = qglx_findVisualInfo(DISPLAY_FROM_XCB(m_screen),m_screen->screenNumber(), window()->requestedWindowFormat());
|
||||
@ -159,13 +160,17 @@ void QXcbWindow::create()
|
||||
visualInfo = XGetVisualInfo(DISPLAY_FROM_XCB(this), VisualIDMask, &visualInfoTemplate, &matchingCount);
|
||||
#endif //XCB_USE_GLX
|
||||
if (visualInfo) {
|
||||
m_depth = visualInfo->depth;
|
||||
m_format = (m_depth == 32) ? QImage::Format_ARGB32_Premultiplied : QImage::Format_RGB32;
|
||||
Colormap cmap = XCreateColormap(DISPLAY_FROM_XCB(this), xcb_parent_id, visualInfo->visual, AllocNone);
|
||||
|
||||
XSetWindowAttributes a;
|
||||
a.background_pixel = WhitePixel(DISPLAY_FROM_XCB(this), m_screen->screenNumber());
|
||||
a.border_pixel = BlackPixel(DISPLAY_FROM_XCB(this), m_screen->screenNumber());
|
||||
a.colormap = cmap;
|
||||
m_window = XCreateWindow(DISPLAY_FROM_XCB(this), xcb_parent_id, rect.x(), rect.y(), rect.width(), rect.height(),
|
||||
0, visualInfo->depth, InputOutput, visualInfo->visual,
|
||||
CWColormap, &a);
|
||||
CWBackPixel|CWBorderPixel|CWColormap, &a);
|
||||
|
||||
printf("created GL window: %x\n", m_window);
|
||||
} else {
|
||||
@ -175,6 +180,8 @@ void QXcbWindow::create()
|
||||
#endif //defined(XCB_USE_GLX) || defined(XCB_USE_EGL)
|
||||
{
|
||||
m_window = xcb_generate_id(xcb_connection());
|
||||
m_depth = m_screen->screen()->root_depth;
|
||||
m_format = (m_depth == 32) ? QImage::Format_ARGB32_Premultiplied : QImage::Format_RGB32;
|
||||
|
||||
Q_XCB_CALL(xcb_create_window(xcb_connection(),
|
||||
XCB_COPY_FROM_PARENT, // depth -- same as root
|
||||
|
@ -44,6 +44,7 @@
|
||||
|
||||
#include <QtGui/QPlatformWindow>
|
||||
#include <QtGui/QWindowFormat>
|
||||
#include <QtGui/QImage>
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/sync.h>
|
||||
@ -76,6 +77,8 @@ public:
|
||||
QPlatformGLContext *glContext() const;
|
||||
|
||||
xcb_window_t xcb_window() const { return m_window; }
|
||||
uint depth() const { return m_depth; }
|
||||
QImage::Format format() const { return m_format; }
|
||||
|
||||
void handleExposeEvent(const xcb_expose_event_t *event);
|
||||
void handleClientMessageEvent(const xcb_client_message_event_t *event);
|
||||
@ -116,6 +119,9 @@ private:
|
||||
xcb_window_t m_window;
|
||||
QPlatformGLContext *m_context;
|
||||
|
||||
uint m_depth;
|
||||
QImage::Format m_format;
|
||||
|
||||
xcb_sync_int64_t m_syncValue;
|
||||
xcb_sync_counter_t m_syncCounter;
|
||||
|
||||
|
@ -54,11 +54,12 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include <qdebug.h>
|
||||
#include <qpainter.h>
|
||||
|
||||
class QXcbShmImage : public QXcbObject
|
||||
{
|
||||
public:
|
||||
QXcbShmImage(QXcbScreen *connection, const QSize &size);
|
||||
QXcbShmImage(QXcbScreen *connection, const QSize &size, uint depth, QImage::Format format);
|
||||
~QXcbShmImage() { destroy(); }
|
||||
|
||||
QImage *image() { return &m_qimage; }
|
||||
@ -81,7 +82,7 @@ private:
|
||||
QRegion m_dirty;
|
||||
};
|
||||
|
||||
QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size)
|
||||
QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QImage::Format format)
|
||||
: QXcbObject(screen->connection())
|
||||
, m_gc(0)
|
||||
, m_gc_window(0)
|
||||
@ -91,7 +92,7 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size)
|
||||
size.width(),
|
||||
size.height(),
|
||||
XCB_IMAGE_FORMAT_Z_PIXMAP,
|
||||
screen->depth(),
|
||||
depth,
|
||||
0,
|
||||
~0,
|
||||
0);
|
||||
@ -111,7 +112,7 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size)
|
||||
if (shmctl(m_shm_info.shmid, IPC_RMID, 0) == -1)
|
||||
qWarning() << "QXcbWindowSurface: Error while marking the shared memory segment to be destroyed";
|
||||
|
||||
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, screen->format());
|
||||
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, format);
|
||||
}
|
||||
|
||||
void QXcbShmImage::destroy()
|
||||
@ -189,6 +190,16 @@ QPaintDevice *QXcbWindowSurface::paintDevice()
|
||||
void QXcbWindowSurface::beginPaint(const QRegion ®ion)
|
||||
{
|
||||
m_image->preparePaint(region);
|
||||
|
||||
if (m_image->image()->hasAlphaChannel()) {
|
||||
QPainter p(m_image->image());
|
||||
p.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
const QVector<QRect> rects = region.rects();
|
||||
const QColor blank = Qt::transparent;
|
||||
for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
|
||||
p.fillRect(*it, blank);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void QXcbWindowSurface::endPaint(const QRegion &)
|
||||
@ -229,9 +240,10 @@ void QXcbWindowSurface::resize(const QSize &size)
|
||||
QWindowSurface::resize(size);
|
||||
|
||||
QXcbScreen *screen = static_cast<QXcbScreen *>(QPlatformScreen::platformScreenForWindow(window()));
|
||||
QXcbWindow* win = static_cast<QXcbWindow *>(window()->handle());
|
||||
|
||||
delete m_image;
|
||||
m_image = new QXcbShmImage(screen, size);
|
||||
m_image = new QXcbShmImage(screen, size, win->depth(), win->format());
|
||||
Q_XCB_NOOP(connection());
|
||||
|
||||
m_syncingResize = true;
|
||||
|
@ -150,7 +150,7 @@ bool QXlibIntegration::hasOpenGL() const
|
||||
{
|
||||
#if !defined(QT_NO_OPENGL)
|
||||
#if !defined(QT_OPENGL_ES_2)
|
||||
QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0));
|
||||
QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens.at(0));
|
||||
return glXQueryExtension(screen->display()->nativeDisplay(), 0, 0) != 0;
|
||||
#else
|
||||
static bool eglHasbeenInitialized = false;
|
||||
|
@ -41,6 +41,8 @@
|
||||
|
||||
#include "qxlibscreen.h"
|
||||
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
|
||||
#include "qxlibcursor.h"
|
||||
#include "qxlibwindow.h"
|
||||
#include "qxlibkeyboard.h"
|
||||
@ -54,8 +56,6 @@
|
||||
|
||||
#include <private/qapplication_p.h>
|
||||
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
static int (*original_x_errhandler)(Display *dpy, XErrorEvent *);
|
||||
@ -201,7 +201,7 @@ QXlibScreen::QXlibScreen()
|
||||
|
||||
|
||||
#ifndef DONT_USE_MIT_SHM
|
||||
Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay->nativeDisplay());
|
||||
int MIT_SHM_extension_supported = XShmQueryExtension (mDisplay->nativeDisplay());
|
||||
Q_ASSERT(MIT_SHM_extension_supported == True);
|
||||
#endif
|
||||
original_x_errhandler = XSetErrorHandler(qt_x_errhandler);
|
||||
|
@ -51,10 +51,6 @@
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#ifndef QT_NO_XFIXES
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#endif // QT_NO_XFIXES
|
||||
|
||||
static const char * x11_atomnames = {
|
||||
// window-manager <-> client protocols
|
||||
"WM_PROTOCOLS\0"
|
||||
|
@ -135,6 +135,7 @@ typedef char *XPointer;
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_XFIXES
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
typedef Bool (*PtrXFixesQueryExtension)(Display *, int *, int *);
|
||||
typedef Status (*PtrXFixesQueryVersion)(Display *, int *, int *);
|
||||
typedef void (*PtrXFixesSetCursorName)(Display *dpy, Cursor cursor, const char *name);
|
||||
|
@ -47,14 +47,6 @@
|
||||
#include "qxlibstatic.h"
|
||||
#include "qxlibdisplay.h"
|
||||
|
||||
#include <QtGui/QWindowSystemInterface>
|
||||
#include <QSocketNotifier>
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
|
||||
#include <QtGui/private/qwindowsurface_p.h>
|
||||
#include <QtGui/private/qapplication_p.h>
|
||||
|
||||
#if !defined(QT_NO_OPENGL)
|
||||
#if !defined(QT_OPENGL_ES_2)
|
||||
#include "qglxintegration.h"
|
||||
@ -66,6 +58,15 @@
|
||||
#endif //QT_OPENGL_ES_2
|
||||
#endif //QT_NO_OPENGL
|
||||
|
||||
|
||||
#include <QtGui/QWindowSystemInterface>
|
||||
#include <QSocketNotifier>
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
|
||||
#include <QtGui/private/qwindowsurface_p.h>
|
||||
#include <QtGui/private/qapplication_p.h>
|
||||
|
||||
//#define MYX11_DEBUG
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -80,9 +81,10 @@ QXlibWindow::QXlibWindow(QWidget *window)
|
||||
int w = window->width();
|
||||
int h = window->height();
|
||||
|
||||
if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL
|
||||
&& QApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL) ) {
|
||||
#if !defined(QT_NO_OPENGL)
|
||||
if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL
|
||||
&& QApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL)
|
||||
|| window->platformWindowFormat().alpha()) {
|
||||
#if !defined(QT_OPENGL_ES_2)
|
||||
XVisualInfo *visualInfo = qglx_findVisualInfo(mScreen->display()->nativeDisplay(),mScreen->xScreenNumber(),window->platformWindowFormat());
|
||||
#else
|
||||
@ -101,18 +103,28 @@ QXlibWindow::QXlibWindow(QWidget *window)
|
||||
visualInfo = XGetVisualInfo(mScreen->display()->nativeDisplay(), VisualIDMask, &visualInfoTemplate, &matchingCount);
|
||||
#endif //!defined(QT_OPENGL_ES_2)
|
||||
if (visualInfo) {
|
||||
Colormap cmap = XCreateColormap(mScreen->display()->nativeDisplay(),mScreen->rootWindow(),visualInfo->visual,AllocNone);
|
||||
mDepth = visualInfo->depth;
|
||||
mFormat = (mDepth == 32) ? QImage::Format_ARGB32_Premultiplied : QImage::Format_RGB32;
|
||||
mVisual = visualInfo->visual;
|
||||
Colormap cmap = XCreateColormap(mScreen->display()->nativeDisplay(), mScreen->rootWindow(), visualInfo->visual, AllocNone);
|
||||
|
||||
XSetWindowAttributes a;
|
||||
a.background_pixel = WhitePixel(mScreen->display()->nativeDisplay(), mScreen->xScreenNumber());
|
||||
a.border_pixel = BlackPixel(mScreen->display()->nativeDisplay(), mScreen->xScreenNumber());
|
||||
a.colormap = cmap;
|
||||
x_window = XCreateWindow(mScreen->display()->nativeDisplay(), mScreen->rootWindow(),x, y, w, h,
|
||||
0, visualInfo->depth, InputOutput, visualInfo->visual,
|
||||
CWColormap, &a);
|
||||
CWBackPixel|CWBorderPixel|CWColormap, &a);
|
||||
} else {
|
||||
qFatal("no window!");
|
||||
}
|
||||
} else
|
||||
#endif //!defined(QT_NO_OPENGL)
|
||||
} else {
|
||||
{
|
||||
mDepth = mScreen->depth();
|
||||
mFormat = (mDepth == 32) ? QImage::Format_ARGB32_Premultiplied : QImage::Format_RGB32;
|
||||
mVisual = mScreen->defaultVisual();
|
||||
|
||||
x_window = XCreateSimpleWindow(mScreen->display()->nativeDisplay(), mScreen->rootWindow(),
|
||||
x, y, w, h, 0 /*border_width*/,
|
||||
mScreen->blackPixel(), mScreen->whitePixel());
|
||||
|
@ -122,6 +122,10 @@ public:
|
||||
Window xWindow() const;
|
||||
GC graphicsContext() const;
|
||||
|
||||
inline uint depth() const { return mDepth; }
|
||||
QImage::Format format() const { return mFormat; }
|
||||
Visual* visual() const { return mVisual; }
|
||||
|
||||
protected:
|
||||
QVector<Atom> getNetWmState() const;
|
||||
void setMWMHints(const QXlibMWMHints &mwmhints);
|
||||
@ -135,6 +139,10 @@ private:
|
||||
Window x_window;
|
||||
GC gc;
|
||||
|
||||
uint mDepth;
|
||||
QImage::Format mFormat;
|
||||
Visual* mVisual;
|
||||
|
||||
GC createGC();
|
||||
|
||||
QPlatformGLContext *mGLContext;
|
||||
|
@ -49,6 +49,8 @@
|
||||
#include "qxlibscreen.h"
|
||||
#include "qxlibdisplay.h"
|
||||
|
||||
#include "qpainter.h"
|
||||
|
||||
# include <sys/ipc.h>
|
||||
# include <sys/shm.h>
|
||||
# include <X11/extensions/XShm.h>
|
||||
@ -80,20 +82,19 @@ void QXlibShmImageInfo::destroy()
|
||||
|
||||
void QXlibWindowSurface::resizeShmImage(int width, int height)
|
||||
{
|
||||
QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window());
|
||||
QXlibWindow *win = static_cast<QXlibWindow*>(window()->platformWindow());
|
||||
|
||||
#ifdef DONT_USE_MIT_SHM
|
||||
shm_img = QImage(width, height, QImage::Format_RGB32);
|
||||
shm_img = QImage(width, height, win->format());
|
||||
#else
|
||||
|
||||
QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window());
|
||||
if (image_info)
|
||||
image_info->destroy();
|
||||
else
|
||||
image_info = new QXlibShmImageInfo(screen->display()->nativeDisplay());
|
||||
|
||||
Visual *visual = screen->defaultVisual();
|
||||
|
||||
XImage *image = XShmCreateImage (screen->display()->nativeDisplay(), visual, 24, ZPixmap, 0,
|
||||
XImage *image = XShmCreateImage (screen->display()->nativeDisplay(), win->visual(), win->depth(), ZPixmap, 0,
|
||||
&image_info->shminfo, width, height);
|
||||
|
||||
|
||||
@ -109,7 +110,7 @@ void QXlibWindowSurface::resizeShmImage(int width, int height)
|
||||
|
||||
Q_ASSERT(shm_attach_status == True);
|
||||
|
||||
shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 );
|
||||
shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, win->format() );
|
||||
#endif
|
||||
painted = false;
|
||||
}
|
||||
@ -160,11 +161,11 @@ void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPo
|
||||
#ifdef DONT_USE_MIT_SHM
|
||||
// just convert the image every time...
|
||||
if (!shm_img.isNull()) {
|
||||
Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber());
|
||||
QXlibWindow *win = static_cast<QXlibWindow*>(window()->platformWindow());
|
||||
|
||||
QImage image = shm_img;
|
||||
//img.convertToFormat(
|
||||
XImage *xi = XCreateImage(screen->display(), visual, 24, ZPixmap,
|
||||
XImage *xi = XCreateImage(screen->display(), win->visual(), win->depth(), ZPixmap,
|
||||
0, (char *) image.scanLine(0), image.width(), image.height(),
|
||||
32, image.bytesPerLine());
|
||||
|
||||
@ -214,6 +215,16 @@ void QXlibWindowSurface::beginPaint(const QRegion ®ion)
|
||||
{
|
||||
Q_UNUSED(region);
|
||||
resizeBuffer(size());
|
||||
|
||||
if (shm_img.hasAlphaChannel()) {
|
||||
QPainter p(&shm_img);
|
||||
p.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
const QVector<QRect> rects = region.rects();
|
||||
const QColor blank = Qt::transparent;
|
||||
for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
|
||||
p.fillRect(*it, blank);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void QXlibWindowSurface::endPaint(const QRegion ®ion)
|
||||
|
@ -174,7 +174,7 @@ contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE
|
||||
DEFINES *= QT_NO_CAST_TO_ASCII QT_ASCII_CAST_WARNINGS
|
||||
contains(QT_CONFIG, gui-qt3support):DEFINES *= QT3_SUPPORT
|
||||
DEFINES *= QT_MOC_COMPAT #we don't need warnings from calling moc code in our generated code
|
||||
DEFINES *= QT_USE_FAST_OPERATOR_PLUS QT_USE_FAST_CONCATENATION
|
||||
DEFINES *= QT_USE_QSTRINGBUILDER
|
||||
|
||||
TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end
|
||||
|
||||
|
@ -653,7 +653,7 @@ QUiLoader::~QUiLoader()
|
||||
Loads a form from the given \a device and creates a new widget with the
|
||||
given \a parentWidget to hold its contents.
|
||||
|
||||
\sa createWidget()
|
||||
\sa createWidget(), errorString()
|
||||
*/
|
||||
QWidget *QUiLoader::load(QIODevice *device, QWidget *parentWidget)
|
||||
{
|
||||
@ -936,6 +936,19 @@ bool QUiLoader::isTranslationEnabled() const
|
||||
return d->builder.trEnabled;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns a human-readable description of the last error occurred in load().
|
||||
|
||||
\since 5.0
|
||||
\sa load()
|
||||
*/
|
||||
|
||||
QString QUiLoader::errorString() const
|
||||
{
|
||||
Q_D(const QUiLoader);
|
||||
return d->builder.errorString();
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#include "quiloader.moc"
|
||||
|
@ -90,6 +90,8 @@ public:
|
||||
void setTranslationEnabled(bool enabled);
|
||||
bool isTranslationEnabled() const;
|
||||
|
||||
QString errorString() const;
|
||||
|
||||
private:
|
||||
QScopedPointer<QUiLoaderPrivate> d_ptr;
|
||||
Q_DECLARE_PRIVATE(QUiLoader)
|
||||
|
@ -96,6 +96,12 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
|
||||
win->setWindowFlags(data.window_flags);
|
||||
win->setGeometry(q->geometry());
|
||||
|
||||
if (q->testAttribute(Qt::WA_TranslucentBackground)) {
|
||||
QWindowFormat format = win->requestedWindowFormat();
|
||||
format.setAlphaBufferSize(8);
|
||||
win->setWindowFormat(format);
|
||||
}
|
||||
|
||||
if (QWidget *nativeParent = q->nativeParentWidget()) {
|
||||
if (nativeParent->windowHandle())
|
||||
win->setParent(nativeParent->windowHandle());
|
||||
@ -396,6 +402,7 @@ void QWidgetPrivate::show_sys()
|
||||
surface->resize(geomRect.size());
|
||||
}
|
||||
}
|
||||
|
||||
if (window)
|
||||
window->setVisible(true);
|
||||
}
|
||||
|
@ -1740,8 +1740,8 @@ void qt_init(QApplicationPrivate *priv, int,
|
||||
} else {
|
||||
// Qt controls everything (default)
|
||||
|
||||
if (QApplication::testAttribute(Qt::AA_X11InitThreads))
|
||||
XInitThreads();
|
||||
// With the threaded QML renderer, we always need this.
|
||||
XInitThreads();
|
||||
|
||||
// Set application name and class
|
||||
char *app_class = 0;
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include(../arthurtester.pri)
|
||||
#TEMPLATE = lib
|
||||
#CONFIG += static
|
||||
#QT += xml opengl svg qt3support
|
||||
#QT += xml opengl svg
|
||||
|
||||
#build_all:!build_pass {
|
||||
# CONFIG -= build_all
|
||||
|
@ -49,10 +49,6 @@
|
||||
#include <qtextlayout.h>
|
||||
#include <qdebug.h>
|
||||
|
||||
#ifdef QT3_SUPPORT
|
||||
#include <q3painter.h>
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_OPENGL
|
||||
#include <qglpixelbuffer.h>
|
||||
#endif
|
||||
@ -364,33 +360,6 @@ void PaintCommands::staticInit()
|
||||
"^gradient_setCoordinateMode\\s+(\\w*)$",
|
||||
"gradient_setCoordinateMode <coordinate method enum>",
|
||||
"gradient_setCoordinateMode ObjectBoundingMode");
|
||||
#ifdef QT3_SUPPORT
|
||||
DECL_PAINTCOMMANDSECTION("qt3 drawing ops");
|
||||
DECL_PAINTCOMMAND("qt3_drawArc", command_qt3_drawArc,
|
||||
"^qt3_drawArc\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)$",
|
||||
"qt3_drawArc <x> <y> <w> <h> <angleStart> <angleArc>\n - angles are expressed in 1/16th of degree",
|
||||
"qt3_drawArc 10 10 20 20 0 5760");
|
||||
DECL_PAINTCOMMAND("qt3_drawChord", command_qt3_drawChord,
|
||||
"^qt3_drawChord\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)$",
|
||||
"qt3_drawChord <x> <y> <w> <h> <angleStart> <angleArc>\n - angles are expressed in 1/16th of degree",
|
||||
"qt3_drawChord 10 10 20 20 0 5760");
|
||||
DECL_PAINTCOMMAND("qt3_drawEllipse", command_qt3_drawEllipse,
|
||||
"^qt3_drawEllipse\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)$",
|
||||
"qt3_drawEllipse <x> <y> <w> <h>",
|
||||
"qt3_drawEllipse 10 10 20 20");
|
||||
DECL_PAINTCOMMAND("qt3_drawPie", command_qt3_drawPie,
|
||||
"^qt3_drawPie\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)$",
|
||||
"qt3_drawPie <x> <y> <w> <h> <angleStart> <angleArc>\n - angles are expressed in 1/16th of degree",
|
||||
"qt3_drawPie 10 10 20 20 0 5760");
|
||||
DECL_PAINTCOMMAND("qt3_drawRect", command_qt3_drawRect,
|
||||
"^qt3_drawRect\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)$",
|
||||
"qt3_drawRect <x> <y> <w> <h>",
|
||||
"qt3_drawRect 10 10 20 20");
|
||||
DECL_PAINTCOMMAND("qt3_drawRoundRect", command_qt3_drawRoundRect,
|
||||
"^qt3_drawRoundRect\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s*(-?\\w)?\\s*(-?\\w)?$",
|
||||
"qt3_drawRoundRect <x> <y> <w> <h> [rx] [ry]",
|
||||
"qt3_drawRoundRect 10 10 20 20 3 3");
|
||||
#endif
|
||||
DECL_PAINTCOMMANDSECTION("drawing ops");
|
||||
DECL_PAINTCOMMAND("drawPoint", command_drawPoint,
|
||||
"^drawPoint\\s+(-?[\\w.]*)\\s+(-?[\\w.]*)$",
|
||||
@ -1271,123 +1240,6 @@ void PaintCommands::command_drawArc(QRegExp re)
|
||||
m_painter->drawArc(x, y, w, h, angle, sweep);
|
||||
}
|
||||
|
||||
#ifdef QT3_SUPPORT
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_qt3_drawRect(QRegExp re)
|
||||
{
|
||||
Q_UNUSED(re);
|
||||
#ifdef QT3_SUPPORT
|
||||
QStringList caps = re.capturedTexts();
|
||||
int x = convertToInt(caps.at(1));
|
||||
int y = convertToInt(caps.at(2));
|
||||
int w = convertToInt(caps.at(3));
|
||||
int h = convertToInt(caps.at(4));
|
||||
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) qt3_drawRect(%d, %d, %d, %d)\n", x, y, w, h);
|
||||
|
||||
static_cast<Q3Painter*>(m_painter)->drawRect(x, y, w, h);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_qt3_drawRoundRect(QRegExp re)
|
||||
{
|
||||
Q_UNUSED(re);
|
||||
#ifdef QT3_SUPPORT
|
||||
QStringList caps = re.capturedTexts();
|
||||
int x = convertToInt(caps.at(1));
|
||||
int y = convertToInt(caps.at(2));
|
||||
int w = convertToInt(caps.at(3));
|
||||
int h = convertToInt(caps.at(4));
|
||||
int xrnd = caps.at(5).isEmpty() ? 25 : convertToInt(caps.at(5));
|
||||
int yrnd = caps.at(6).isEmpty() ? 25 : convertToInt(caps.at(6));
|
||||
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) qt3_drawRoundRect(%d, %d, %d, %d), %d, %d\n", x, y, w, h, xrnd, yrnd);
|
||||
|
||||
static_cast<Q3Painter*>(m_painter)->drawRoundRect(x, y, w, h, xrnd, yrnd);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_qt3_drawEllipse(QRegExp re)
|
||||
{
|
||||
Q_UNUSED(re);
|
||||
#ifdef QT3_SUPPORT
|
||||
QStringList caps = re.capturedTexts();
|
||||
int x = convertToInt(caps.at(1));
|
||||
int y = convertToInt(caps.at(2));
|
||||
int w = convertToInt(caps.at(3));
|
||||
int h = convertToInt(caps.at(4));
|
||||
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) qt3_drawEllipse(%d, %d, %d, %d)\n", x, y, w, h);
|
||||
|
||||
static_cast<Q3Painter*>(m_painter)->drawEllipse(x, y, w, h);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_qt3_drawPie(QRegExp re)
|
||||
{
|
||||
Q_UNUSED(re);
|
||||
#ifdef QT3_SUPPORT
|
||||
QStringList caps = re.capturedTexts();
|
||||
int x = convertToInt(caps.at(1));
|
||||
int y = convertToInt(caps.at(2));
|
||||
int w = convertToInt(caps.at(3));
|
||||
int h = convertToInt(caps.at(4));
|
||||
int angle = convertToInt(caps.at(5));
|
||||
int sweep = convertToInt(caps.at(6));
|
||||
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) qt3_drawPie(%d, %d, %d, %d, %d, %d)\n", x, y, w, h, angle, sweep);
|
||||
|
||||
static_cast<Q3Painter*>(m_painter)->drawPie(x, y, w, h, angle, sweep);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_qt3_drawChord(QRegExp re)
|
||||
{
|
||||
Q_UNUSED(re);
|
||||
#ifdef QT3_SUPPORT
|
||||
QStringList caps = re.capturedTexts();
|
||||
int x = convertToInt(caps.at(1));
|
||||
int y = convertToInt(caps.at(2));
|
||||
int w = convertToInt(caps.at(3));
|
||||
int h = convertToInt(caps.at(4));
|
||||
int angle = convertToInt(caps.at(5));
|
||||
int sweep = convertToInt(caps.at(6));
|
||||
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) qt3_drawChord(%d, %d, %d, %d, %d, %d)\n", x, y, w, h, angle, sweep);
|
||||
|
||||
static_cast<Q3Painter*>(m_painter)->drawChord(x, y, w, h, angle, sweep);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_qt3_drawArc(QRegExp re)
|
||||
{
|
||||
Q_UNUSED(re);
|
||||
#ifdef QT3_SUPPORT
|
||||
QStringList caps = re.capturedTexts();
|
||||
int x = convertToInt(caps.at(1));
|
||||
int y = convertToInt(caps.at(2));
|
||||
int w = convertToInt(caps.at(3));
|
||||
int h = convertToInt(caps.at(4));
|
||||
int angle = convertToInt(caps.at(5));
|
||||
int sweep = convertToInt(caps.at(6));
|
||||
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) qt3_drawArc(%d, %d, %d, %d, %d, %d)\n", x, y, w, h, angle, sweep);
|
||||
|
||||
static_cast<Q3Painter*>(m_painter)->drawArc(x, y, w, h, angle, sweep);
|
||||
#endif
|
||||
}
|
||||
#endif //QT3_SUPPORT
|
||||
/***************************************************************************************************/
|
||||
void PaintCommands::command_drawText(QRegExp re)
|
||||
{
|
||||
|
@ -185,14 +185,6 @@ private:
|
||||
void command_gradient_setCoordinateMode(QRegExp re);
|
||||
|
||||
// commands: drawing ops
|
||||
#ifdef QT3_SUPPORT
|
||||
void command_qt3_drawArc(QRegExp re);
|
||||
void command_qt3_drawChord(QRegExp re);
|
||||
void command_qt3_drawEllipse(QRegExp re);
|
||||
void command_qt3_drawPie(QRegExp re);
|
||||
void command_qt3_drawRect(QRegExp re);
|
||||
void command_qt3_drawRoundRect(QRegExp re);
|
||||
#endif
|
||||
void command_drawArc(QRegExp re);
|
||||
void command_drawChord(QRegExp re);
|
||||
void command_drawConvexPolygon(QRegExp re);
|
||||
|
@ -14,16 +14,6 @@ drawRect 120 0 16 16
|
||||
drawRect 140 0 17 17
|
||||
drawRect 160 0 18 18
|
||||
drawRect 180 0 19 19
|
||||
qt3_drawRect 200 0 10 10
|
||||
qt3_drawRect 220 0 11 11
|
||||
qt3_drawRect 240 0 12 12
|
||||
qt3_drawRect 260 0 13 13
|
||||
qt3_drawRect 280 0 14 14
|
||||
qt3_drawRect 300 0 15 15
|
||||
qt3_drawRect 320 0 16 16
|
||||
qt3_drawRect 340 0 17 17
|
||||
qt3_drawRect 360 0 18 18
|
||||
qt3_drawRect 380 0 19 19
|
||||
|
||||
drawEllipse 0 20 10 10
|
||||
drawEllipse 20 20 11 11
|
||||
@ -35,16 +25,6 @@ drawEllipse 120 20 16 16
|
||||
drawEllipse 140 20 17 17
|
||||
drawEllipse 160 20 18 18
|
||||
drawEllipse 180 20 19 19
|
||||
qt3_drawEllipse 200 20 10 10
|
||||
qt3_drawEllipse 220 20 11 11
|
||||
qt3_drawEllipse 240 20 12 12
|
||||
qt3_drawEllipse 260 20 13 13
|
||||
qt3_drawEllipse 280 20 14 14
|
||||
qt3_drawEllipse 300 20 15 15
|
||||
qt3_drawEllipse 320 20 16 16
|
||||
qt3_drawEllipse 340 20 17 17
|
||||
qt3_drawEllipse 360 20 18 18
|
||||
qt3_drawEllipse 380 20 19 19
|
||||
|
||||
drawRoundRect 0 40 10 10
|
||||
drawRoundRect 20 40 11 11
|
||||
@ -56,16 +36,6 @@ drawRoundRect 120 40 16 16
|
||||
drawRoundRect 140 40 17 17
|
||||
drawRoundRect 160 40 18 18
|
||||
drawRoundRect 180 40 19 19
|
||||
qt3_drawRoundRect 200 40 10 10
|
||||
qt3_drawRoundRect 220 40 11 11
|
||||
qt3_drawRoundRect 240 40 12 12
|
||||
qt3_drawRoundRect 260 40 13 13
|
||||
qt3_drawRoundRect 280 40 14 14
|
||||
qt3_drawRoundRect 300 40 15 15
|
||||
qt3_drawRoundRect 320 40 16 16
|
||||
qt3_drawRoundRect 340 40 17 17
|
||||
qt3_drawRoundRect 360 40 18 18
|
||||
qt3_drawRoundRect 380 40 19 19
|
||||
|
||||
drawPie 0 60 10 10 0 4320
|
||||
drawPie 20 60 11 11 0 4320
|
||||
@ -77,16 +47,6 @@ drawPie 120 60 16 16 0 4320
|
||||
drawPie 140 60 17 17 0 4320
|
||||
drawPie 160 60 18 18 0 4320
|
||||
drawPie 180 60 19 19 0 4320
|
||||
qt3_drawPie 200 60 10 10 0 4320
|
||||
qt3_drawPie 220 60 11 11 0 4320
|
||||
qt3_drawPie 240 60 12 12 0 4320
|
||||
qt3_drawPie 260 60 13 13 0 4320
|
||||
qt3_drawPie 280 60 14 14 0 4320
|
||||
qt3_drawPie 300 60 15 15 0 4320
|
||||
qt3_drawPie 320 60 16 16 0 4320
|
||||
qt3_drawPie 340 60 17 17 0 4320
|
||||
qt3_drawPie 360 60 18 18 0 4320
|
||||
qt3_drawPie 380 60 19 19 0 4320
|
||||
|
||||
drawArc 0 80 10 10 0 4320
|
||||
drawArc 20 80 11 11 0 4320
|
||||
@ -98,16 +58,6 @@ drawArc 120 80 16 16 0 4320
|
||||
drawArc 140 80 17 17 0 4320
|
||||
drawArc 160 80 18 18 0 4320
|
||||
drawArc 180 80 19 19 0 4320
|
||||
qt3_drawArc 200 80 10 10 0 4320
|
||||
qt3_drawArc 220 80 11 11 0 4320
|
||||
qt3_drawArc 240 80 12 12 0 4320
|
||||
qt3_drawArc 260 80 13 13 0 4320
|
||||
qt3_drawArc 280 80 14 14 0 4320
|
||||
qt3_drawArc 300 80 15 15 0 4320
|
||||
qt3_drawArc 320 80 16 16 0 4320
|
||||
qt3_drawArc 340 80 17 17 0 4320
|
||||
qt3_drawArc 360 80 18 18 0 4320
|
||||
qt3_drawArc 380 80 19 19 0 4320
|
||||
|
||||
drawChord 0 100 10 10 0 4320
|
||||
drawChord 20 100 11 11 0 4320
|
||||
@ -119,16 +69,6 @@ drawChord 120 100 16 16 0 4320
|
||||
drawChord 140 100 17 17 0 4320
|
||||
drawChord 160 100 18 18 0 4320
|
||||
drawChord 180 100 19 19 0 4320
|
||||
qt3_drawChord 200 100 10 10 0 4320
|
||||
qt3_drawChord 220 100 11 11 0 4320
|
||||
qt3_drawChord 240 100 12 12 0 4320
|
||||
qt3_drawChord 260 100 13 13 0 4320
|
||||
qt3_drawChord 280 100 14 14 0 4320
|
||||
qt3_drawChord 300 100 15 15 0 4320
|
||||
qt3_drawChord 320 100 16 16 0 4320
|
||||
qt3_drawChord 340 100 17 17 0 4320
|
||||
qt3_drawChord 360 100 18 18 0 4320
|
||||
qt3_drawChord 380 100 19 19 0 4320
|
||||
|
||||
end_block
|
||||
|
||||
|
@ -8,9 +8,8 @@ DEPENDPATH += .
|
||||
INCLUDEPATH += .
|
||||
DESTDIR = ../bin
|
||||
|
||||
QT += svg xml
|
||||
QT += svg xml core-private gui-private
|
||||
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl
|
||||
contains(QT_CONFIG, qt3support):QT += qt3support
|
||||
|
||||
# Input
|
||||
HEADERS += datagenerator.h \
|
||||
|
@ -9,9 +9,8 @@ DESTDIR = ../bin
|
||||
|
||||
CONFIG += console
|
||||
|
||||
QT += svg xml
|
||||
QT += svg xml core-private gui-private
|
||||
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl
|
||||
contains(QT_CONFIG, qt3support):QT += qt3support
|
||||
|
||||
# Input
|
||||
HEADERS += htmlgenerator.h
|
||||
|
@ -10,7 +10,6 @@ SOURCES += interactivewidget.cpp main.cpp
|
||||
RESOURCES += icons.qrc
|
||||
|
||||
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl
|
||||
contains(QT_CONFIG, qt3support):QT += qt3support
|
||||
|
||||
symbian*: {
|
||||
testData.files = $$QT_BUILD_TREE/tests/arthur/data/qps
|
||||
@ -18,6 +17,6 @@ symbian*: {
|
||||
DEPLOYMENT += testData
|
||||
}
|
||||
|
||||
QT += xml svg
|
||||
QT += xml svg core-private gui-private
|
||||
|
||||
|
||||
|
@ -137,14 +137,6 @@ static void displayCommands()
|
||||
" drawText x y \"text\"\n"
|
||||
" drawTiledPixmap pixmapfile x y width height sx sy\n"
|
||||
"\n"
|
||||
"Compat functions for Qt 3:\n"
|
||||
" qt3_drawArc x y width height angle sweep\n"
|
||||
" qt3_drawChord x y width height angle sweep\n"
|
||||
" qt3_drawEllipse x y width height\n"
|
||||
" qt3_drawPie x y width height angle sweep\n"
|
||||
" qt3_drawRect x y width height\n"
|
||||
" qt3_drawRoundRect x y width height xfactor yfactor\n"
|
||||
"\n"
|
||||
"Path commands:\n"
|
||||
" path_addEllipse pathname x y width height\n"
|
||||
" path_addPolygon pathname [ x1 y1 x2 y2 ... ] winding?\n"
|
||||
|
@ -9,9 +9,8 @@ DESTDIR = ../bin
|
||||
|
||||
CONFIG += console
|
||||
|
||||
QT += xml svg
|
||||
QT += xml svg core-private gui-private
|
||||
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl
|
||||
contains(QT_CONFIG, qt3support):QT += qt3support
|
||||
|
||||
# Input
|
||||
HEADERS += performancediff.h
|
||||
|
@ -7,9 +7,8 @@ DEPENDPATH += .
|
||||
INCLUDEPATH += .
|
||||
DESTDIR = ../bin
|
||||
|
||||
QT += xml svg
|
||||
QT += xml svg core-private gui-private
|
||||
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl
|
||||
contains(QT_CONFIG, qt3support):QT += qt3support
|
||||
|
||||
# Input
|
||||
HEADERS += shower.h
|
||||
|
@ -100,10 +100,6 @@ void foo()
|
||||
#include "qvector.h"
|
||||
#include "qqueue.h"
|
||||
|
||||
#ifdef QT3_SUPPORT
|
||||
#include "q3cleanuphandler.h"
|
||||
#endif
|
||||
|
||||
template class QList<int>;
|
||||
|
||||
//TESTED_FILES=
|
||||
@ -133,7 +129,6 @@ private slots:
|
||||
void cache();
|
||||
void regexp();
|
||||
void pair();
|
||||
void cleanupHandler();
|
||||
void sharableQList();
|
||||
void sharableQLinkedList();
|
||||
void sharableQVector();
|
||||
@ -2191,14 +2186,7 @@ void tst_Collections::qstring()
|
||||
QVERIFY(s.toLatin1() == "first");
|
||||
s = "second";
|
||||
QVERIFY(s.toLatin1() == "second");
|
||||
#ifdef QT3_SUPPORT
|
||||
const char* cache = s.latin1();
|
||||
QVERIFY(cache == s.latin1());
|
||||
#endif
|
||||
s.clear();
|
||||
#ifdef QT3_SUPPORT
|
||||
QVERIFY(*s.latin1() == '\0');
|
||||
#endif
|
||||
QVERIFY(s.isNull());
|
||||
QVERIFY(s.toLatin1().size() == 0);
|
||||
QVERIFY(s.toLatin1().isEmpty());
|
||||
@ -2208,14 +2196,7 @@ void tst_Collections::qstring()
|
||||
QVERIFY(s.toUtf8() == "first-utf8");
|
||||
s = "second-utf8";
|
||||
QVERIFY(s.toUtf8() == "second-utf8");
|
||||
#ifdef QT3_SUPPORT
|
||||
cache = s.utf8();
|
||||
QVERIFY(cache == s.utf8());
|
||||
#endif
|
||||
s.clear();
|
||||
#ifdef QT3_SUPPORT
|
||||
QVERIFY(*s.utf8() == '\0');
|
||||
#endif
|
||||
QVERIFY(s.isNull());
|
||||
QVERIFY(s.toUtf8().size() == 0);
|
||||
QVERIFY(s.toUtf8().isEmpty());
|
||||
@ -2225,14 +2206,7 @@ void tst_Collections::qstring()
|
||||
QVERIFY(s.toUtf8() == "first-utf8");
|
||||
s = "second-utf8";
|
||||
QVERIFY(s.toUtf8() == "second-utf8");
|
||||
#ifdef QT3_SUPPORT
|
||||
cache = s.utf8();
|
||||
QVERIFY(cache == s.utf8());
|
||||
#endif
|
||||
s.clear();
|
||||
#ifdef QT3_SUPPORT
|
||||
QVERIFY(*s.utf8() == '\0');
|
||||
#endif
|
||||
QVERIFY(s.isNull());
|
||||
QVERIFY(s.toUtf8().size() == 0);
|
||||
QVERIFY(s.toUtf8().isEmpty());
|
||||
@ -2242,14 +2216,7 @@ void tst_Collections::qstring()
|
||||
QVERIFY(s.toLocal8Bit() == "first-local8Bit");
|
||||
s = "second-local8Bit";
|
||||
QVERIFY(s.toLocal8Bit() == "second-local8Bit");
|
||||
#ifdef QT3_SUPPORT
|
||||
cache = s.local8Bit();
|
||||
QVERIFY(cache == s.local8Bit());
|
||||
#endif
|
||||
s.clear();
|
||||
#ifdef QT3_SUPPORT
|
||||
QVERIFY(*s.local8Bit() == '\0');
|
||||
#endif
|
||||
QVERIFY(s.isNull());
|
||||
QVERIFY(s.toLocal8Bit().size() == 0);
|
||||
QVERIFY(s.toLocal8Bit().isEmpty());
|
||||
@ -2258,14 +2225,7 @@ void tst_Collections::qstring()
|
||||
QVERIFY(s.toAscii() == "first-ascii");
|
||||
s = "second-ascii";
|
||||
QVERIFY(s.toAscii() == "second-ascii");
|
||||
#ifdef QT3_SUPPORT
|
||||
cache = s.ascii();
|
||||
QVERIFY(cache == s.ascii());
|
||||
#endif
|
||||
s.clear();
|
||||
#ifdef QT3_SUPPORT
|
||||
QVERIFY(*s.ascii() == '\0');
|
||||
#endif
|
||||
QVERIFY(s.isNull());
|
||||
QVERIFY(s.toAscii().size() == 0);
|
||||
QVERIFY(s.toAscii().isEmpty());
|
||||
@ -2508,24 +2468,6 @@ void tst_Collections::pair()
|
||||
QVERIFY(!(a > a || b > b || c > c || d > d || e > e));
|
||||
}
|
||||
|
||||
void tst_Collections::cleanupHandler()
|
||||
{
|
||||
#ifdef QT3_SUPPORT
|
||||
LargeStatic * f1 = 0;
|
||||
LargeStatic * f2 = 0;
|
||||
{
|
||||
Q3CleanupHandler<LargeStatic> cleanup;
|
||||
f1 = new LargeStatic;
|
||||
f2 = new LargeStatic;
|
||||
cleanup.add(&f1);
|
||||
cleanup.add(&f2);
|
||||
}
|
||||
QVERIFY(f1 == 0 && f2 == 0);
|
||||
#else
|
||||
QSKIP("No Qt3 support", SkipAll);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
These test that Java-style mutable iterators don't trash shared
|
||||
copy (the setSharable() mechanism).
|
||||
|
@ -60,7 +60,7 @@ QT_USE_NAMESPACE
|
||||
#include "3rdparty/memcheck.h"
|
||||
#endif
|
||||
|
||||
class tst_ExceptionSafetyObjects: public QObject
|
||||
class tst_ExceptionSafety_Objects: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@ -156,7 +156,7 @@ struct DirCreator : public AbstractTester
|
||||
}
|
||||
};
|
||||
|
||||
void tst_ExceptionSafetyObjects::objects_data()
|
||||
void tst_ExceptionSafety_Objects::objects_data()
|
||||
{
|
||||
QTest::addColumn<AbstractTester *>("objectCreator");
|
||||
|
||||
@ -164,12 +164,12 @@ void tst_ExceptionSafetyObjects::objects_data()
|
||||
NEWROW(QObject);
|
||||
NEWROW(QBuffer);
|
||||
NEWROW(QFile);
|
||||
NEWROW(QFSFileEngine);
|
||||
NEWROW(QProcess);
|
||||
NEWROW(QSettings);
|
||||
NEWROW(QThread);
|
||||
NEWROW(QThreadPool);
|
||||
NEWROW(QTranslator);
|
||||
NEWROW(QFSFileEngine);
|
||||
|
||||
#define NEWROW2(T, CREATOR) QTest::newRow(#T) << static_cast<AbstractTester *>(new CREATOR)
|
||||
NEWROW2(QBitArray, BitArrayCreator);
|
||||
@ -177,7 +177,6 @@ void tst_ExceptionSafetyObjects::objects_data()
|
||||
NEWROW2(QCryptographicHash, CryptographicHashCreator);
|
||||
NEWROW2(QDataStream, DataStreamCreator);
|
||||
NEWROW2(QDir, DirCreator);
|
||||
|
||||
}
|
||||
|
||||
// create and destructs an object, and lets each and every allocation
|
||||
@ -274,9 +273,9 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
QtMsgHandler tst_ExceptionSafetyObjects::testMessageHandler;
|
||||
QtMsgHandler tst_ExceptionSafety_Objects::testMessageHandler;
|
||||
|
||||
void tst_ExceptionSafetyObjects::safeMessageHandler(QtMsgType type, const char *msg)
|
||||
void tst_ExceptionSafety_Objects::safeMessageHandler(QtMsgType type, const char *msg)
|
||||
{
|
||||
// this temporarily suspends OOM testing while handling a message
|
||||
int currentIndex = mallocFailIndex;
|
||||
@ -301,7 +300,7 @@ void debugUnexpected()
|
||||
(*defaultUnexpected)();
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::initTestCase()
|
||||
void tst_ExceptionSafety_Objects::initTestCase()
|
||||
{
|
||||
// set handlers for bad exception cases, you might want to step in and breakpoint the default handlers too
|
||||
defaultTerminate = std::set_terminate(&debugTerminate);
|
||||
@ -345,17 +344,25 @@ void tst_ExceptionSafetyObjects::initTestCase()
|
||||
QCOMPARE(malloc2Failed, 1);
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::cleanupTestCase()
|
||||
void tst_ExceptionSafety_Objects::cleanupTestCase()
|
||||
{
|
||||
qInstallMsgHandler(testMessageHandler);
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::objects()
|
||||
void tst_ExceptionSafety_Objects::objects()
|
||||
{
|
||||
QLatin1String tag = QLatin1String(QTest::currentDataTag());
|
||||
if (tag == QLatin1String("QFile")
|
||||
|| tag == QLatin1String("QProcess")
|
||||
|| tag == QLatin1String("QSettings")
|
||||
|| tag == QLatin1String("QThread")
|
||||
|| tag == QLatin1String("QThreadPool"))
|
||||
QSKIP("This type of object is not currently strongly exception safe", SkipSingle);
|
||||
|
||||
QFETCH(AbstractTester *, objectCreator);
|
||||
|
||||
doOOMTest(*objectCreator, 0);
|
||||
|
||||
|
||||
delete objectCreator;
|
||||
}
|
||||
|
||||
@ -364,7 +371,8 @@ struct WidgetCreator : public AbstractTester
|
||||
{
|
||||
void operator()(QObject *parent)
|
||||
{
|
||||
Q_ASSERT(!parent || parent->isWidgetType());
|
||||
if (parent && !parent->isWidgetType())
|
||||
qFatal("%s: parent must be either null or a widget type", Q_FUNC_INFO);
|
||||
QScopedPointer<T> ptr(parent ? new T(static_cast<QWidget *>(parent)) : new T);
|
||||
}
|
||||
};
|
||||
@ -374,7 +382,8 @@ template <> struct WidgetCreator<QSizeGrip> : public AbstractTester
|
||||
{
|
||||
void operator()(QObject *parent)
|
||||
{
|
||||
Q_ASSERT(!parent || parent->isWidgetType());
|
||||
if (parent && !parent->isWidgetType())
|
||||
qFatal("%s: parent must be either null or a widget type", Q_FUNC_INFO);
|
||||
QScopedPointer<QSizeGrip> ptr(new QSizeGrip(static_cast<QWidget *>(parent)));
|
||||
}
|
||||
};
|
||||
@ -384,17 +393,18 @@ template <> struct WidgetCreator<QDesktopWidget> : public AbstractTester
|
||||
{
|
||||
void operator()(QObject *parent)
|
||||
{
|
||||
Q_ASSERT(!parent || parent->isWidgetType());
|
||||
if (parent && !parent->isWidgetType())
|
||||
qFatal("%s: parent must be either null or a widget type", Q_FUNC_INFO);
|
||||
QScopedPointer<QDesktopWidget> ptr(new QDesktopWidget());
|
||||
}
|
||||
};
|
||||
void tst_ExceptionSafetyObjects::widgets_data()
|
||||
void tst_ExceptionSafety_Objects::widgets_data()
|
||||
{
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
// Initialise the S60 rasteriser, which crashes if started while out of memory
|
||||
QImage image(20, 20, QImage::Format_RGB32);
|
||||
QPainter p(&image);
|
||||
p.drawText(0, 15, "foo");
|
||||
QImage image(20, 20, QImage::Format_RGB32);
|
||||
QPainter p(&image);
|
||||
p.drawText(0, 15, "foo");
|
||||
#endif
|
||||
|
||||
QTest::addColumn<AbstractTester *>("widgetCreator");
|
||||
@ -405,23 +415,27 @@ void tst_ExceptionSafetyObjects::widgets_data()
|
||||
NEWROW(QWidget);
|
||||
|
||||
NEWROW(QButtonGroup);
|
||||
NEWROW(QDesktopWidget);
|
||||
NEWROW(QCheckBox);
|
||||
NEWROW(QColumnView);
|
||||
NEWROW(QComboBox);
|
||||
NEWROW(QCommandLinkButton);
|
||||
NEWROW(QDateEdit);
|
||||
NEWROW(QDateTimeEdit);
|
||||
NEWROW(QDesktopWidget);
|
||||
NEWROW(QDial);
|
||||
NEWROW(QDoubleSpinBox);
|
||||
NEWROW(QFocusFrame);
|
||||
NEWROW(QFontComboBox);
|
||||
NEWROW(QFrame);
|
||||
NEWROW(QGroupBox);
|
||||
NEWROW(QLCDNumber);
|
||||
NEWROW(QLabel);
|
||||
NEWROW(QLCDNumber);
|
||||
NEWROW(QLineEdit);
|
||||
NEWROW(QListView);
|
||||
NEWROW(QListWidget);
|
||||
NEWROW(QMainWindow);
|
||||
NEWROW(QMenu);
|
||||
NEWROW(QMenuBar);
|
||||
NEWROW(QPlainTextEdit);
|
||||
NEWROW(QProgressBar);
|
||||
NEWROW(QPushButton);
|
||||
@ -435,28 +449,58 @@ void tst_ExceptionSafetyObjects::widgets_data()
|
||||
NEWROW(QStackedWidget);
|
||||
NEWROW(QStatusBar);
|
||||
NEWROW(QTabBar);
|
||||
NEWROW(QTableView);
|
||||
NEWROW(QTableWidget);
|
||||
NEWROW(QTabWidget);
|
||||
NEWROW(QTextBrowser);
|
||||
NEWROW(QTextEdit);
|
||||
NEWROW(QTimeEdit);
|
||||
NEWROW(QToolBar);
|
||||
NEWROW(QToolBox);
|
||||
NEWROW(QToolButton);
|
||||
NEWROW(QStatusBar);
|
||||
NEWROW(QToolBar);
|
||||
NEWROW(QMenuBar);
|
||||
NEWROW(QMainWindow);
|
||||
NEWROW(QWorkspace);
|
||||
NEWROW(QColumnView);
|
||||
NEWROW(QListView);
|
||||
NEWROW(QListWidget);
|
||||
NEWROW(QTableView);
|
||||
NEWROW(QTableWidget);
|
||||
NEWROW(QTreeView);
|
||||
NEWROW(QTreeWidget);
|
||||
NEWROW(QWorkspace);
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::widgets()
|
||||
void tst_ExceptionSafety_Objects::widgets()
|
||||
{
|
||||
QLatin1String tag = QLatin1String(QTest::currentDataTag());
|
||||
if (tag == QLatin1String("QColumnView")
|
||||
|| tag == QLatin1String("QComboBox")
|
||||
|| tag == QLatin1String("QCommandLinkButton")
|
||||
|| tag == QLatin1String("QDateEdit")
|
||||
|| tag == QLatin1String("QDateTimeEdit")
|
||||
|| tag == QLatin1String("QDesktopWidget")
|
||||
|| tag == QLatin1String("QDoubleSpinBox")
|
||||
|| tag == QLatin1String("QFontComboBox")
|
||||
|| tag == QLatin1String("QGroupBox")
|
||||
|| tag == QLatin1String("QLineEdit")
|
||||
|| tag == QLatin1String("QListView")
|
||||
|| tag == QLatin1String("QListWidget")
|
||||
|| tag == QLatin1String("QMainWindow")
|
||||
|| tag == QLatin1String("QMenu")
|
||||
|| tag == QLatin1String("QMenuBar")
|
||||
|| tag == QLatin1String("QPlainTextEdit")
|
||||
|| tag == QLatin1String("QProgressBar")
|
||||
|| tag == QLatin1String("QPushButton")
|
||||
|| tag == QLatin1String("QScrollArea")
|
||||
|| tag == QLatin1String("QSpinBox")
|
||||
|| tag == QLatin1String("QStackedWidget")
|
||||
|| tag == QLatin1String("QStatusBar")
|
||||
|| tag == QLatin1String("QTableView")
|
||||
|| tag == QLatin1String("QTableWidget")
|
||||
|| tag == QLatin1String("QTabWidget")
|
||||
|| tag == QLatin1String("QTextBrowser")
|
||||
|| tag == QLatin1String("QTextEdit")
|
||||
|| tag == QLatin1String("QTimeEdit")
|
||||
|| tag == QLatin1String("QToolBar")
|
||||
|| tag == QLatin1String("QToolBox")
|
||||
|| tag == QLatin1String("QTreeView")
|
||||
|| tag == QLatin1String("QTreeWidget")
|
||||
|| tag == QLatin1String("QWorkspace"))
|
||||
QSKIP("This type of widget is not currently strongly exception safe", SkipSingle);
|
||||
|
||||
QFETCH(AbstractTester *, widgetCreator);
|
||||
|
||||
doOOMTest(*widgetCreator, 0, 00000);
|
||||
@ -547,7 +591,9 @@ struct IntegerMoveable
|
||||
};
|
||||
|
||||
int IntegerMoveable::instanceCount = 0;
|
||||
QT_BEGIN_NAMESPACE
|
||||
Q_DECLARE_TYPEINFO(IntegerMoveable, Q_MOVABLE_TYPE);
|
||||
QT_END_NAMESPACE
|
||||
|
||||
template <typename T, template<typename> class Container>
|
||||
void containerInsertTest(QObject*)
|
||||
@ -720,12 +766,12 @@ static void containerData()
|
||||
QTest::newRow("erase moveable") << static_cast<TestFunction>(containerEraseTest<IntegerMoveable, Container>);
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::vector_data()
|
||||
void tst_ExceptionSafety_Objects::vector_data()
|
||||
{
|
||||
containerData<QVector>();
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::vector()
|
||||
void tst_ExceptionSafety_Objects::vector()
|
||||
{
|
||||
QFETCH(TestFunction, testFunction);
|
||||
|
||||
@ -736,30 +782,30 @@ void tst_ExceptionSafetyObjects::vector()
|
||||
doOOMTest(testFunction, 0);
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::list_data()
|
||||
void tst_ExceptionSafety_Objects::list_data()
|
||||
{
|
||||
containerData<QList>();
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::list()
|
||||
void tst_ExceptionSafety_Objects::list()
|
||||
{
|
||||
QFETCH(TestFunction, testFunction);
|
||||
|
||||
doOOMTest(testFunction, 0);
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::linkedList_data()
|
||||
void tst_ExceptionSafety_Objects::linkedList_data()
|
||||
{
|
||||
containerData<QLinkedList>();
|
||||
}
|
||||
|
||||
void tst_ExceptionSafetyObjects::linkedList()
|
||||
void tst_ExceptionSafety_Objects::linkedList()
|
||||
{
|
||||
QFETCH(TestFunction, testFunction);
|
||||
|
||||
doOOMTest(testFunction, 0);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_ExceptionSafetyObjects)
|
||||
QTEST_MAIN(tst_ExceptionSafety_Objects)
|
||||
#include "tst_exceptionsafety_objects.moc"
|
||||
#endif // QT_NO_EXCEPTIONS
|
||||
|
@ -280,7 +280,7 @@ protected:
|
||||
eventsPtr->canceled << g->gestureType();
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
qWarning() << "Unknown GestureState enum value:" << static_cast<int>(g->state());
|
||||
}
|
||||
}
|
||||
} else if (event->type() == CustomEvent::EventType) {
|
||||
@ -823,7 +823,7 @@ public:
|
||||
emit gestureCanceled(e->type(), g);
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
qWarning() << "Unknown GestureState enum value:" << static_cast<int>(g->state());
|
||||
}
|
||||
}
|
||||
} else if (event->type() == CustomEvent::EventType) {
|
||||
@ -1518,17 +1518,20 @@ void tst_Gestures::autoCancelGestures()
|
||||
{
|
||||
class MockWidget : public GestureWidget {
|
||||
public:
|
||||
MockWidget(const char *name) : GestureWidget(name) { }
|
||||
MockWidget(const char *name) : GestureWidget(name), badGestureEvents(0) { }
|
||||
|
||||
bool event(QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::Gesture) {
|
||||
QGestureEvent *ge = static_cast<QGestureEvent*>(event);
|
||||
Q_ASSERT(ge->gestures().count() == 1); // can't use QCOMPARE here...
|
||||
if (ge->gestures().count() != 1)
|
||||
++badGestureEvents; // event should contain exactly one gesture
|
||||
ge->gestures().first()->setGestureCancelPolicy(QGesture::CancelAllInContext);
|
||||
}
|
||||
return GestureWidget::event(event);
|
||||
}
|
||||
|
||||
int badGestureEvents;
|
||||
};
|
||||
|
||||
const Qt::GestureType secondGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
|
||||
@ -1563,22 +1566,26 @@ void tst_Gestures::autoCancelGestures()
|
||||
event.serial = CustomGesture::SerialFinishedThreshold;
|
||||
QApplication::sendEvent(child, &event);
|
||||
QCOMPARE(parent.events.all.count(), 2);
|
||||
QCOMPARE(parent.badGestureEvents, 0);
|
||||
}
|
||||
|
||||
void tst_Gestures::autoCancelGestures2()
|
||||
{
|
||||
class MockItem : public GestureItem {
|
||||
public:
|
||||
MockItem(const char *name) : GestureItem(name) { }
|
||||
MockItem(const char *name) : GestureItem(name), badGestureEvents(0) { }
|
||||
|
||||
bool event(QEvent *event) {
|
||||
if (event->type() == QEvent::Gesture) {
|
||||
QGestureEvent *ge = static_cast<QGestureEvent*>(event);
|
||||
Q_ASSERT(ge->gestures().count() == 1); // can't use QCOMPARE here...
|
||||
if (ge->gestures().count() != 1)
|
||||
++badGestureEvents; // event should contain exactly one gesture
|
||||
ge->gestures().first()->setGestureCancelPolicy(QGesture::CancelAllInContext);
|
||||
}
|
||||
return GestureItem::event(event);
|
||||
}
|
||||
|
||||
int badGestureEvents;
|
||||
};
|
||||
|
||||
const Qt::GestureType secondGesture = QGestureRecognizer ::registerRecognizer(new CustomGestureRecognizer);
|
||||
@ -1614,6 +1621,7 @@ void tst_Gestures::autoCancelGestures2()
|
||||
event.serial = CustomGesture::SerialFinishedThreshold;
|
||||
scene.sendEvent(child, &event);
|
||||
QCOMPARE(parent->events.all.count(), 2);
|
||||
QCOMPARE(parent->badGestureEvents, 0);
|
||||
}
|
||||
|
||||
void tst_Gestures::graphicsViewParentPropagation()
|
||||
|
@ -17,16 +17,6 @@ drawRect 120 0 16 16
|
||||
drawRect 140 0 17 17
|
||||
drawRect 160 0 18 18
|
||||
drawRect 180 0 19 19
|
||||
# qt3_drawRect 200 0 10 10
|
||||
# qt3_drawRect 220 0 11 11
|
||||
# qt3_drawRect 240 0 12 12
|
||||
# qt3_drawRect 260 0 13 13
|
||||
# qt3_drawRect 280 0 14 14
|
||||
# qt3_drawRect 300 0 15 15
|
||||
# qt3_drawRect 320 0 16 16
|
||||
# qt3_drawRect 340 0 17 17
|
||||
# qt3_drawRect 360 0 18 18
|
||||
# qt3_drawRect 380 0 19 19
|
||||
|
||||
drawEllipse 0 20 10 10
|
||||
drawEllipse 20 20 11 11
|
||||
@ -38,16 +28,6 @@ drawEllipse 120 20 16 16
|
||||
drawEllipse 140 20 17 17
|
||||
drawEllipse 160 20 18 18
|
||||
drawEllipse 180 20 19 19
|
||||
# qt3_drawEllipse 200 20 10 10
|
||||
# qt3_drawEllipse 220 20 11 11
|
||||
# qt3_drawEllipse 240 20 12 12
|
||||
# qt3_drawEllipse 260 20 13 13
|
||||
# qt3_drawEllipse 280 20 14 14
|
||||
# qt3_drawEllipse 300 20 15 15
|
||||
# qt3_drawEllipse 320 20 16 16
|
||||
# qt3_drawEllipse 340 20 17 17
|
||||
# qt3_drawEllipse 360 20 18 18
|
||||
# qt3_drawEllipse 380 20 19 19
|
||||
|
||||
drawRoundRect 0 40 10 10
|
||||
drawRoundRect 20 40 11 11
|
||||
@ -59,16 +39,6 @@ drawRoundRect 120 40 16 16
|
||||
drawRoundRect 140 40 17 17
|
||||
drawRoundRect 160 40 18 18
|
||||
drawRoundRect 180 40 19 19
|
||||
# qt3_drawRoundRect 200 40 10 10
|
||||
# qt3_drawRoundRect 220 40 11 11
|
||||
# qt3_drawRoundRect 240 40 12 12
|
||||
# qt3_drawRoundRect 260 40 13 13
|
||||
# qt3_drawRoundRect 280 40 14 14
|
||||
# qt3_drawRoundRect 300 40 15 15
|
||||
# qt3_drawRoundRect 320 40 16 16
|
||||
# qt3_drawRoundRect 340 40 17 17
|
||||
# qt3_drawRoundRect 360 40 18 18
|
||||
# qt3_drawRoundRect 380 40 19 19
|
||||
|
||||
drawPie 0 60 10 10 0 4320
|
||||
drawPie 20 60 11 11 0 4320
|
||||
@ -80,16 +50,6 @@ drawPie 120 60 16 16 0 4320
|
||||
drawPie 140 60 17 17 0 4320
|
||||
drawPie 160 60 18 18 0 4320
|
||||
drawPie 180 60 19 19 0 4320
|
||||
# qt3_drawPie 200 60 10 10 0 4320
|
||||
# qt3_drawPie 220 60 11 11 0 4320
|
||||
# qt3_drawPie 240 60 12 12 0 4320
|
||||
# qt3_drawPie 260 60 13 13 0 4320
|
||||
# qt3_drawPie 280 60 14 14 0 4320
|
||||
# qt3_drawPie 300 60 15 15 0 4320
|
||||
# qt3_drawPie 320 60 16 16 0 4320
|
||||
# qt3_drawPie 340 60 17 17 0 4320
|
||||
# qt3_drawPie 360 60 18 18 0 4320
|
||||
# qt3_drawPie 380 60 19 19 0 4320
|
||||
|
||||
drawArc 0 80 10 10 0 4320
|
||||
drawArc 20 80 11 11 0 4320
|
||||
@ -101,16 +61,6 @@ drawArc 120 80 16 16 0 4320
|
||||
drawArc 140 80 17 17 0 4320
|
||||
drawArc 160 80 18 18 0 4320
|
||||
drawArc 180 80 19 19 0 4320
|
||||
# qt3_drawArc 200 80 10 10 0 4320
|
||||
# qt3_drawArc 220 80 11 11 0 4320
|
||||
# qt3_drawArc 240 80 12 12 0 4320
|
||||
# qt3_drawArc 260 80 13 13 0 4320
|
||||
# qt3_drawArc 280 80 14 14 0 4320
|
||||
# qt3_drawArc 300 80 15 15 0 4320
|
||||
# qt3_drawArc 320 80 16 16 0 4320
|
||||
# qt3_drawArc 340 80 17 17 0 4320
|
||||
# qt3_drawArc 360 80 18 18 0 4320
|
||||
# qt3_drawArc 380 80 19 19 0 4320
|
||||
|
||||
drawChord 0 100 10 10 0 4320
|
||||
drawChord 20 100 11 11 0 4320
|
||||
@ -122,16 +72,6 @@ drawChord 120 100 16 16 0 4320
|
||||
drawChord 140 100 17 17 0 4320
|
||||
drawChord 160 100 18 18 0 4320
|
||||
drawChord 180 100 19 19 0 4320
|
||||
# qt3_drawChord 200 100 10 10 0 4320
|
||||
# qt3_drawChord 220 100 11 11 0 4320
|
||||
# qt3_drawChord 240 100 12 12 0 4320
|
||||
# qt3_drawChord 260 100 13 13 0 4320
|
||||
# qt3_drawChord 280 100 14 14 0 4320
|
||||
# qt3_drawChord 300 100 15 15 0 4320
|
||||
# qt3_drawChord 320 100 16 16 0 4320
|
||||
# qt3_drawChord 340 100 17 17 0 4320
|
||||
# qt3_drawChord 360 100 18 18 0 4320
|
||||
# qt3_drawChord 380 100 19 19 0 4320
|
||||
|
||||
end_block
|
||||
|
||||
|
@ -348,7 +348,6 @@ QStringList tst_MakeTestSelfTest::find_subdirs(QString const& pro_file, FindSubd
|
||||
<< "QT_CONFIG+=phonon"
|
||||
<< "QT_CONFIG+=private_tests"
|
||||
<< "QT_CONFIG+=pulseaudio"
|
||||
<< "QT_CONFIG+=qt3support"
|
||||
<< "QT_CONFIG+=script"
|
||||
<< "QT_CONFIG+=svg"
|
||||
<< "QT_CONFIG+=webkit"
|
||||
|
@ -52,9 +52,6 @@
|
||||
#include <QtNetwork/QtNetwork>
|
||||
#include <QtSql/QtSql>
|
||||
//#include <QtSvg>
|
||||
#if defined(QT3_SUPPORT)
|
||||
#include <Qt3Support>
|
||||
#endif
|
||||
#if defined(WITH_DBUS)
|
||||
#include <QtDBus>
|
||||
#endif
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include <QtCore/QHash>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QTimer>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
|
||||
DynamicTreeModel::DynamicTreeModel(QObject *parent)
|
||||
@ -66,9 +67,11 @@ QModelIndex DynamicTreeModel::index(int row, int column, const QModelIndex &pare
|
||||
const qint64 grandParent = findParentId(parent.internalId());
|
||||
if (grandParent >= 0) {
|
||||
QList<QList<qint64> > parentTable = m_childItems.value(grandParent);
|
||||
Q_ASSERT(parent.column() < parentTable.size());
|
||||
if (parent.column() >= parentTable.size())
|
||||
qFatal("%s: parent.column() must be less than parentTable.size()", Q_FUNC_INFO);
|
||||
QList<qint64> parentSiblings = parentTable.at(parent.column());
|
||||
Q_ASSERT(parent.row() < parentSiblings.size());
|
||||
if (parent.row() >= parentSiblings.size())
|
||||
qFatal("%s: parent.row() must be less than parentSiblings.size()", Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
if (childIdColumns.size() == 0)
|
||||
@ -189,7 +192,8 @@ QModelIndex ModelChangeCommand::findIndex(QList<int> rows)
|
||||
while (i.hasNext())
|
||||
{
|
||||
parent = m_model->index(i.next(), col, parent);
|
||||
Q_ASSERT(parent.isValid());
|
||||
if (!parent.isValid())
|
||||
qFatal("%s: parent must be valid", Q_FUNC_INFO);
|
||||
}
|
||||
return parent;
|
||||
}
|
||||
|
@ -45,8 +45,6 @@
|
||||
#include "modeltest.h"
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
#undef Q_ASSERT
|
||||
#define Q_ASSERT QVERIFY
|
||||
|
||||
Q_DECLARE_METATYPE ( QModelIndex )
|
||||
|
||||
@ -55,7 +53,8 @@ Q_DECLARE_METATYPE ( QModelIndex )
|
||||
*/
|
||||
ModelTest::ModelTest ( QAbstractItemModel *_model, QObject *parent ) : QObject ( parent ), model ( _model ), fetchingMore ( false )
|
||||
{
|
||||
Q_ASSERT ( model );
|
||||
if (!model)
|
||||
qFatal("%s: model must not be null", Q_FUNC_INFO);
|
||||
|
||||
connect ( model, SIGNAL ( columnsAboutToBeInserted ( const QModelIndex &, int, int ) ),
|
||||
this, SLOT ( runAllTests() ) );
|
||||
@ -118,15 +117,15 @@ void ModelTest::runAllTests()
|
||||
*/
|
||||
void ModelTest::nonDestructiveBasicTest()
|
||||
{
|
||||
Q_ASSERT ( model->buddy ( QModelIndex() ) == QModelIndex() );
|
||||
QVERIFY( model->buddy ( QModelIndex() ) == QModelIndex() );
|
||||
model->canFetchMore ( QModelIndex() );
|
||||
Q_ASSERT ( model->columnCount ( QModelIndex() ) >= 0 );
|
||||
Q_ASSERT ( model->data ( QModelIndex() ) == QVariant() );
|
||||
QVERIFY( model->columnCount ( QModelIndex() ) >= 0 );
|
||||
QVERIFY( model->data ( QModelIndex() ) == QVariant() );
|
||||
fetchingMore = true;
|
||||
model->fetchMore ( QModelIndex() );
|
||||
fetchingMore = false;
|
||||
Qt::ItemFlags flags = model->flags ( QModelIndex() );
|
||||
Q_ASSERT ( flags == Qt::ItemIsDropEnabled || flags == 0 );
|
||||
QVERIFY( flags == Qt::ItemIsDropEnabled || flags == 0 );
|
||||
model->hasChildren ( QModelIndex() );
|
||||
model->hasIndex ( 0, 0 );
|
||||
model->headerData ( 0, Qt::Horizontal );
|
||||
@ -135,8 +134,8 @@ void ModelTest::nonDestructiveBasicTest()
|
||||
QVariant cache;
|
||||
model->match ( QModelIndex(), -1, cache );
|
||||
model->mimeTypes();
|
||||
Q_ASSERT ( model->parent ( QModelIndex() ) == QModelIndex() );
|
||||
Q_ASSERT ( model->rowCount() >= 0 );
|
||||
QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() );
|
||||
QVERIFY( model->rowCount() >= 0 );
|
||||
QVariant variant;
|
||||
model->setData ( QModelIndex(), variant, -1 );
|
||||
model->setHeaderData ( -1, Qt::Horizontal, QVariant() );
|
||||
@ -158,17 +157,17 @@ void ModelTest::rowCount()
|
||||
// check top row
|
||||
QModelIndex topIndex = model->index ( 0, 0, QModelIndex() );
|
||||
int rows = model->rowCount ( topIndex );
|
||||
Q_ASSERT ( rows >= 0 );
|
||||
QVERIFY( rows >= 0 );
|
||||
if ( rows > 0 )
|
||||
Q_ASSERT ( model->hasChildren ( topIndex ) == true );
|
||||
QVERIFY( model->hasChildren ( topIndex ) );
|
||||
|
||||
QModelIndex secondLevelIndex = model->index ( 0, 0, topIndex );
|
||||
if ( secondLevelIndex.isValid() ) { // not the top level
|
||||
// check a row count where parent is valid
|
||||
rows = model->rowCount ( secondLevelIndex );
|
||||
Q_ASSERT ( rows >= 0 );
|
||||
QVERIFY( rows >= 0 );
|
||||
if ( rows > 0 )
|
||||
Q_ASSERT ( model->hasChildren ( secondLevelIndex ) == true );
|
||||
QVERIFY( model->hasChildren ( secondLevelIndex ) );
|
||||
}
|
||||
|
||||
// The models rowCount() is tested more extensively in checkChildren(),
|
||||
@ -182,12 +181,12 @@ void ModelTest::columnCount()
|
||||
{
|
||||
// check top row
|
||||
QModelIndex topIndex = model->index ( 0, 0, QModelIndex() );
|
||||
Q_ASSERT ( model->columnCount ( topIndex ) >= 0 );
|
||||
QVERIFY( model->columnCount ( topIndex ) >= 0 );
|
||||
|
||||
// check a column count where parent is valid
|
||||
QModelIndex childIndex = model->index ( 0, 0, topIndex );
|
||||
if ( childIndex.isValid() )
|
||||
Q_ASSERT ( model->columnCount ( childIndex ) >= 0 );
|
||||
QVERIFY( model->columnCount ( childIndex ) >= 0 );
|
||||
|
||||
// columnCount() is tested more extensively in checkChildren(),
|
||||
// but this catches the big mistakes
|
||||
@ -200,19 +199,19 @@ void ModelTest::hasIndex()
|
||||
{
|
||||
// qDebug() << "hi";
|
||||
// Make sure that invalid values returns an invalid index
|
||||
Q_ASSERT ( model->hasIndex ( -2, -2 ) == false );
|
||||
Q_ASSERT ( model->hasIndex ( -2, 0 ) == false );
|
||||
Q_ASSERT ( model->hasIndex ( 0, -2 ) == false );
|
||||
QVERIFY( !model->hasIndex ( -2, -2 ) );
|
||||
QVERIFY( !model->hasIndex ( -2, 0 ) );
|
||||
QVERIFY( !model->hasIndex ( 0, -2 ) );
|
||||
|
||||
int rows = model->rowCount();
|
||||
int columns = model->columnCount();
|
||||
|
||||
// check out of bounds
|
||||
Q_ASSERT ( model->hasIndex ( rows, columns ) == false );
|
||||
Q_ASSERT ( model->hasIndex ( rows + 1, columns + 1 ) == false );
|
||||
QVERIFY( !model->hasIndex ( rows, columns ) );
|
||||
QVERIFY( !model->hasIndex ( rows + 1, columns + 1 ) );
|
||||
|
||||
if ( rows > 0 )
|
||||
Q_ASSERT ( model->hasIndex ( 0, 0 ) == true );
|
||||
QVERIFY( model->hasIndex ( 0, 0 ) );
|
||||
|
||||
// hasIndex() is tested more extensively in checkChildren(),
|
||||
// but this catches the big mistakes
|
||||
@ -225,9 +224,9 @@ void ModelTest::index()
|
||||
{
|
||||
// qDebug() << "i";
|
||||
// Make sure that invalid values returns an invalid index
|
||||
Q_ASSERT ( model->index ( -2, -2 ) == QModelIndex() );
|
||||
Q_ASSERT ( model->index ( -2, 0 ) == QModelIndex() );
|
||||
Q_ASSERT ( model->index ( 0, -2 ) == QModelIndex() );
|
||||
QVERIFY( model->index ( -2, -2 ) == QModelIndex() );
|
||||
QVERIFY( model->index ( -2, 0 ) == QModelIndex() );
|
||||
QVERIFY( model->index ( 0, -2 ) == QModelIndex() );
|
||||
|
||||
int rows = model->rowCount();
|
||||
int columns = model->columnCount();
|
||||
@ -236,13 +235,13 @@ void ModelTest::index()
|
||||
return;
|
||||
|
||||
// Catch off by one errors
|
||||
Q_ASSERT ( model->index ( rows, columns ) == QModelIndex() );
|
||||
Q_ASSERT ( model->index ( 0, 0 ).isValid() == true );
|
||||
QVERIFY( model->index ( rows, columns ) == QModelIndex() );
|
||||
QVERIFY( model->index ( 0, 0 ).isValid() );
|
||||
|
||||
// Make sure that the same index is *always* returned
|
||||
QModelIndex a = model->index ( 0, 0 );
|
||||
QModelIndex b = model->index ( 0, 0 );
|
||||
Q_ASSERT ( a == b );
|
||||
QVERIFY( a == b );
|
||||
|
||||
// index() is tested more extensively in checkChildren(),
|
||||
// but this catches the big mistakes
|
||||
@ -256,7 +255,7 @@ void ModelTest::parent()
|
||||
// qDebug() << "p";
|
||||
// Make sure the model wont crash and will return an invalid QModelIndex
|
||||
// when asked for the parent of an invalid index.
|
||||
Q_ASSERT ( model->parent ( QModelIndex() ) == QModelIndex() );
|
||||
QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() );
|
||||
|
||||
if ( model->rowCount() == 0 )
|
||||
return;
|
||||
@ -269,13 +268,13 @@ void ModelTest::parent()
|
||||
// Common error test #1, make sure that a top level index has a parent
|
||||
// that is a invalid QModelIndex.
|
||||
QModelIndex topIndex = model->index ( 0, 0, QModelIndex() );
|
||||
Q_ASSERT ( model->parent ( topIndex ) == QModelIndex() );
|
||||
QVERIFY( model->parent ( topIndex ) == QModelIndex() );
|
||||
|
||||
// Common error test #2, make sure that a second level index has a parent
|
||||
// that is the first level index.
|
||||
if ( model->rowCount ( topIndex ) > 0 ) {
|
||||
QModelIndex childIndex = model->index ( 0, 0, topIndex );
|
||||
Q_ASSERT ( model->parent ( childIndex ) == topIndex );
|
||||
QVERIFY( model->parent ( childIndex ) == topIndex );
|
||||
}
|
||||
|
||||
// Common error test #3, the second column should NOT have the same children
|
||||
@ -285,7 +284,7 @@ void ModelTest::parent()
|
||||
if ( model->rowCount ( topIndex1 ) > 0 ) {
|
||||
QModelIndex childIndex = model->index ( 0, 0, topIndex );
|
||||
QModelIndex childIndex1 = model->index ( 0, 0, topIndex1 );
|
||||
Q_ASSERT ( childIndex != childIndex1 );
|
||||
QVERIFY( childIndex != childIndex1 );
|
||||
}
|
||||
|
||||
// Full test, walk n levels deep through the model making sure that all
|
||||
@ -325,47 +324,47 @@ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth )
|
||||
int columns = model->columnCount ( parent );
|
||||
|
||||
if ( rows > 0 )
|
||||
Q_ASSERT ( model->hasChildren ( parent ) );
|
||||
QVERIFY( model->hasChildren ( parent ) );
|
||||
|
||||
// Some further testing against rows(), columns(), and hasChildren()
|
||||
Q_ASSERT ( rows >= 0 );
|
||||
Q_ASSERT ( columns >= 0 );
|
||||
QVERIFY( rows >= 0 );
|
||||
QVERIFY( columns >= 0 );
|
||||
if ( rows > 0 )
|
||||
Q_ASSERT ( model->hasChildren ( parent ) == true );
|
||||
QVERIFY( model->hasChildren ( parent ) );
|
||||
|
||||
//qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows
|
||||
// << "columns:" << columns << "parent column:" << parent.column();
|
||||
|
||||
Q_ASSERT ( model->hasIndex ( rows + 1, 0, parent ) == false );
|
||||
QVERIFY( !model->hasIndex ( rows + 1, 0, parent ) );
|
||||
for ( int r = 0; r < rows; ++r ) {
|
||||
if ( model->canFetchMore ( parent ) ) {
|
||||
fetchingMore = true;
|
||||
model->fetchMore ( parent );
|
||||
fetchingMore = false;
|
||||
}
|
||||
Q_ASSERT ( model->hasIndex ( r, columns + 1, parent ) == false );
|
||||
QVERIFY( !model->hasIndex ( r, columns + 1, parent ) );
|
||||
for ( int c = 0; c < columns; ++c ) {
|
||||
Q_ASSERT ( model->hasIndex ( r, c, parent ) == true );
|
||||
QVERIFY( model->hasIndex ( r, c, parent ) );
|
||||
QModelIndex index = model->index ( r, c, parent );
|
||||
// rowCount() and columnCount() said that it existed...
|
||||
Q_ASSERT ( index.isValid() == true );
|
||||
QVERIFY( index.isValid() );
|
||||
|
||||
// index() should always return the same index when called twice in a row
|
||||
QModelIndex modifiedIndex = model->index ( r, c, parent );
|
||||
Q_ASSERT ( index == modifiedIndex );
|
||||
QVERIFY( index == modifiedIndex );
|
||||
|
||||
// Make sure we get the same index if we request it twice in a row
|
||||
QModelIndex a = model->index ( r, c, parent );
|
||||
QModelIndex b = model->index ( r, c, parent );
|
||||
Q_ASSERT ( a == b );
|
||||
QVERIFY( a == b );
|
||||
|
||||
// Some basic checking on the index that is returned
|
||||
Q_ASSERT ( index.model() == model );
|
||||
Q_ASSERT ( index.row() == r );
|
||||
Q_ASSERT ( index.column() == c );
|
||||
QVERIFY( index.model() == model );
|
||||
QCOMPARE( index.row(), r );
|
||||
QCOMPARE( index.column(), c );
|
||||
// While you can technically return a QVariant usually this is a sign
|
||||
// of an bug in data() Disable if this really is ok in your model.
|
||||
// Q_ASSERT ( model->data ( index, Qt::DisplayRole ).isValid() == true );
|
||||
// of a bug in data(). Disable if this really is ok in your model.
|
||||
// QVERIFY( model->data ( index, Qt::DisplayRole ).isValid() );
|
||||
|
||||
// If the next test fails here is some somewhat useful debug you play with.
|
||||
|
||||
@ -380,8 +379,7 @@ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth )
|
||||
}
|
||||
|
||||
// Check that we can get back our real parent.
|
||||
// qDebug() << model->parent ( index ) << parent ;
|
||||
Q_ASSERT ( model->parent ( index ) == parent );
|
||||
QCOMPARE( model->parent ( index ), parent );
|
||||
|
||||
// recursively go down the children
|
||||
if ( model->hasChildren ( index ) && currentDepth < 10 ) {
|
||||
@ -391,7 +389,7 @@ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth )
|
||||
|
||||
// make sure that after testing the children that the index doesn't change.
|
||||
QModelIndex newerIndex = model->index ( r, c, parent );
|
||||
Q_ASSERT ( index == newerIndex );
|
||||
QVERIFY( index == newerIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -402,68 +400,68 @@ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth )
|
||||
void ModelTest::data()
|
||||
{
|
||||
// Invalid index should return an invalid qvariant
|
||||
Q_ASSERT ( !model->data ( QModelIndex() ).isValid() );
|
||||
QVERIFY( !model->data ( QModelIndex() ).isValid() );
|
||||
|
||||
if ( model->rowCount() == 0 )
|
||||
return;
|
||||
|
||||
// A valid index should have a valid QVariant data
|
||||
Q_ASSERT ( model->index ( 0, 0 ).isValid() );
|
||||
QVERIFY( model->index ( 0, 0 ).isValid() );
|
||||
|
||||
// shouldn't be able to set data on an invalid index
|
||||
Q_ASSERT ( model->setData ( QModelIndex(), QLatin1String ( "foo" ), Qt::DisplayRole ) == false );
|
||||
QVERIFY( !model->setData ( QModelIndex(), QLatin1String ( "foo" ), Qt::DisplayRole ) );
|
||||
|
||||
// General Purpose roles that should return a QString
|
||||
QVariant variant = model->data ( model->index ( 0, 0 ), Qt::ToolTipRole );
|
||||
if ( variant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QString> ( variant ) );
|
||||
QVERIFY( qVariantCanConvert<QString> ( variant ) );
|
||||
}
|
||||
variant = model->data ( model->index ( 0, 0 ), Qt::StatusTipRole );
|
||||
if ( variant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QString> ( variant ) );
|
||||
QVERIFY( qVariantCanConvert<QString> ( variant ) );
|
||||
}
|
||||
variant = model->data ( model->index ( 0, 0 ), Qt::WhatsThisRole );
|
||||
if ( variant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QString> ( variant ) );
|
||||
QVERIFY( qVariantCanConvert<QString> ( variant ) );
|
||||
}
|
||||
|
||||
// General Purpose roles that should return a QSize
|
||||
variant = model->data ( model->index ( 0, 0 ), Qt::SizeHintRole );
|
||||
if ( variant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QSize> ( variant ) );
|
||||
QVERIFY( qVariantCanConvert<QSize> ( variant ) );
|
||||
}
|
||||
|
||||
// General Purpose roles that should return a QFont
|
||||
QVariant fontVariant = model->data ( model->index ( 0, 0 ), Qt::FontRole );
|
||||
if ( fontVariant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QFont> ( fontVariant ) );
|
||||
QVERIFY( qVariantCanConvert<QFont> ( fontVariant ) );
|
||||
}
|
||||
|
||||
// Check that the alignment is one we know about
|
||||
QVariant textAlignmentVariant = model->data ( model->index ( 0, 0 ), Qt::TextAlignmentRole );
|
||||
if ( textAlignmentVariant.isValid() ) {
|
||||
int alignment = textAlignmentVariant.toInt();
|
||||
Q_ASSERT ( alignment == ( alignment & ( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) );
|
||||
QCOMPARE( alignment, ( alignment & ( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) );
|
||||
}
|
||||
|
||||
// General Purpose roles that should return a QColor
|
||||
QVariant colorVariant = model->data ( model->index ( 0, 0 ), Qt::BackgroundColorRole );
|
||||
if ( colorVariant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QColor> ( colorVariant ) );
|
||||
QVERIFY( qVariantCanConvert<QColor> ( colorVariant ) );
|
||||
}
|
||||
|
||||
colorVariant = model->data ( model->index ( 0, 0 ), Qt::TextColorRole );
|
||||
if ( colorVariant.isValid() ) {
|
||||
Q_ASSERT ( qVariantCanConvert<QColor> ( colorVariant ) );
|
||||
QVERIFY( qVariantCanConvert<QColor> ( colorVariant ) );
|
||||
}
|
||||
|
||||
// Check that the "check state" is one we know about.
|
||||
QVariant checkStateVariant = model->data ( model->index ( 0, 0 ), Qt::CheckStateRole );
|
||||
if ( checkStateVariant.isValid() ) {
|
||||
int state = checkStateVariant.toInt();
|
||||
Q_ASSERT ( state == Qt::Unchecked ||
|
||||
state == Qt::PartiallyChecked ||
|
||||
state == Qt::Checked );
|
||||
QVERIFY( state == Qt::Unchecked ||
|
||||
state == Qt::PartiallyChecked ||
|
||||
state == Qt::Checked );
|
||||
}
|
||||
}
|
||||
|
||||
@ -472,7 +470,7 @@ void ModelTest::data()
|
||||
|
||||
\sa rowsInserted()
|
||||
*/
|
||||
void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int end )
|
||||
void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int /* end */)
|
||||
{
|
||||
// Q_UNUSED(end);
|
||||
// qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString()
|
||||
@ -494,7 +492,7 @@ void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, in
|
||||
void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end )
|
||||
{
|
||||
Changing c = insert.pop();
|
||||
Q_ASSERT ( c.parent == parent );
|
||||
QVERIFY( c.parent == parent );
|
||||
// qDebug() << "rowsInserted" << "start=" << start << "end=" << end << "oldsize=" << c.oldSize
|
||||
// << "parent=" << model->data ( parent ).toString() << "current rowcount of parent=" << model->rowCount ( parent );
|
||||
|
||||
@ -504,8 +502,8 @@ void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end )
|
||||
// }
|
||||
// qDebug();
|
||||
|
||||
Q_ASSERT ( c.oldSize + ( end - start + 1 ) == model->rowCount ( parent ) );
|
||||
Q_ASSERT ( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) );
|
||||
QVERIFY( c.oldSize + ( end - start + 1 ) == model->rowCount ( parent ) );
|
||||
QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) );
|
||||
|
||||
if (c.next != model->data(model->index(end + 1, 0, c.parent))) {
|
||||
qDebug() << start << end;
|
||||
@ -514,7 +512,7 @@ void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end )
|
||||
qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent));
|
||||
}
|
||||
|
||||
Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );
|
||||
QVERIFY( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );
|
||||
}
|
||||
|
||||
void ModelTest::layoutAboutToBeChanged()
|
||||
@ -527,7 +525,7 @@ void ModelTest::layoutChanged()
|
||||
{
|
||||
for ( int i = 0; i < changing.count(); ++i ) {
|
||||
QPersistentModelIndex p = changing[i];
|
||||
Q_ASSERT ( p == model->index ( p.row(), p.column(), p.parent() ) );
|
||||
QVERIFY( p == model->index ( p.row(), p.column(), p.parent() ) );
|
||||
}
|
||||
changing.clear();
|
||||
}
|
||||
@ -557,10 +555,10 @@ void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end )
|
||||
{
|
||||
qDebug() << "rr" << parent << start << end;
|
||||
Changing c = remove.pop();
|
||||
Q_ASSERT ( c.parent == parent );
|
||||
Q_ASSERT ( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) );
|
||||
Q_ASSERT ( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) );
|
||||
Q_ASSERT ( c.next == model->data ( model->index ( start, 0, c.parent ) ) );
|
||||
QVERIFY( c.parent == parent );
|
||||
QVERIFY( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) );
|
||||
QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) );
|
||||
QVERIFY( c.next == model->data ( model->index ( start, 0, c.parent ) ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -201,8 +201,10 @@ class ObservingObject : public QObject
|
||||
Q_OBJECT
|
||||
public:
|
||||
ObservingObject(AccessibleProxyModel *proxy, QObject *parent = 0)
|
||||
: QObject(parent),
|
||||
m_proxy(proxy)
|
||||
: QObject(parent)
|
||||
, m_proxy(proxy)
|
||||
, storePersistentFailureCount(0)
|
||||
, checkPersistentFailureCount(0)
|
||||
{
|
||||
connect(m_proxy, SIGNAL(layoutAboutToBeChanged()), SLOT(storePersistent()));
|
||||
connect(m_proxy, SIGNAL(layoutChanged()), SLOT(checkPersistent()));
|
||||
@ -215,8 +217,14 @@ public slots:
|
||||
for (int row = 0; row < m_proxy->rowCount(parent); ++row) {
|
||||
QModelIndex proxyIndex = m_proxy->index(row, 0, parent);
|
||||
QModelIndex sourceIndex = m_proxy->mapToSource(proxyIndex);
|
||||
Q_ASSERT(proxyIndex.isValid());
|
||||
Q_ASSERT(sourceIndex.isValid());
|
||||
if (!proxyIndex.isValid()) {
|
||||
qWarning("%s: Invalid proxy index", Q_FUNC_INFO);
|
||||
++storePersistentFailureCount;
|
||||
}
|
||||
if (!sourceIndex.isValid()) {
|
||||
qWarning("%s: invalid source index", Q_FUNC_INFO);
|
||||
++storePersistentFailureCount;
|
||||
}
|
||||
m_persistentSourceIndexes.append(sourceIndex);
|
||||
m_persistentProxyIndexes.append(proxyIndex);
|
||||
if (m_proxy->hasChildren(proxyIndex))
|
||||
@ -226,12 +234,24 @@ public slots:
|
||||
|
||||
void storePersistent()
|
||||
{
|
||||
foreach(const QModelIndex &idx, m_persistentProxyIndexes)
|
||||
Q_ASSERT(idx.isValid()); // This is called from layoutAboutToBeChanged. Persistent indexes should be valid
|
||||
// This method is called from layoutAboutToBeChanged. Persistent indexes should be valid
|
||||
foreach(const QModelIndex &idx, m_persistentProxyIndexes)
|
||||
if (!idx.isValid()) {
|
||||
qWarning("%s: persistentProxyIndexes contains invalid index", Q_FUNC_INFO);
|
||||
++storePersistentFailureCount;
|
||||
}
|
||||
|
||||
Q_ASSERT(m_proxy->persistent().isEmpty());
|
||||
if (!m_proxy->persistent().isEmpty()) {
|
||||
qWarning("%s: proxy should have no persistent indexes when storePersistent called",
|
||||
Q_FUNC_INFO);
|
||||
++storePersistentFailureCount;
|
||||
}
|
||||
storePersistent(QModelIndex());
|
||||
Q_ASSERT(!m_proxy->persistent().isEmpty());
|
||||
if (m_proxy->persistent().isEmpty()) {
|
||||
qWarning("%s: proxy should have persistent index after storePersistent called",
|
||||
Q_FUNC_INFO);
|
||||
++storePersistentFailureCount;
|
||||
}
|
||||
}
|
||||
|
||||
void checkPersistent()
|
||||
@ -243,7 +263,10 @@ public slots:
|
||||
for (int row = 0; row < m_persistentProxyIndexes.size(); ++row) {
|
||||
QModelIndex updatedProxy = m_persistentProxyIndexes.at(row);
|
||||
QModelIndex updatedSource = m_persistentSourceIndexes.at(row);
|
||||
QCOMPARE(m_proxy->mapToSource(updatedProxy), updatedSource);
|
||||
if (m_proxy->mapToSource(updatedProxy) != updatedSource) {
|
||||
qWarning("%s: check failed at row %d", Q_FUNC_INFO, row);
|
||||
++checkPersistentFailureCount;
|
||||
}
|
||||
}
|
||||
m_persistentSourceIndexes.clear();
|
||||
m_persistentProxyIndexes.clear();
|
||||
@ -253,6 +276,9 @@ private:
|
||||
AccessibleProxyModel *m_proxy;
|
||||
QList<QPersistentModelIndex> m_persistentSourceIndexes;
|
||||
QList<QPersistentModelIndex> m_persistentProxyIndexes;
|
||||
public:
|
||||
int storePersistentFailureCount;
|
||||
int checkPersistentFailureCount;
|
||||
};
|
||||
|
||||
void tst_ModelTest::moveSourceItems()
|
||||
@ -280,6 +306,9 @@ void tst_ModelTest::moveSourceItems()
|
||||
moveCommand->setDestAncestors(QList<int>() << 1);
|
||||
moveCommand->setDestRow(0);
|
||||
moveCommand->doCommand();
|
||||
|
||||
QCOMPARE(observer.storePersistentFailureCount, 0);
|
||||
QCOMPARE(observer.checkPersistentFailureCount, 0);
|
||||
}
|
||||
|
||||
void tst_ModelTest::testResetThroughProxy()
|
||||
@ -302,6 +331,9 @@ void tst_ModelTest::testResetThroughProxy()
|
||||
ModelResetCommand *resetCommand = new ModelResetCommand(model, this);
|
||||
resetCommand->setNumCols(0);
|
||||
resetCommand->doCommand();
|
||||
|
||||
QCOMPARE(observer.storePersistentFailureCount, 0);
|
||||
QCOMPARE(observer.checkPersistentFailureCount, 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,14 +3,12 @@
|
||||
|
||||
TEMPLATE=subdirs
|
||||
SUBDIRS=\
|
||||
# exceptionsafety_objects \ shouldn't enable it
|
||||
# baselineexample \ Just an example demonstrating qbaselinetest usage
|
||||
lancelot \
|
||||
qaccessibility \
|
||||
qalgorithms \
|
||||
qcombobox \
|
||||
qcssparser \
|
||||
#qdatastream \ # FIXME: uses qtsvg (QTBUG-19244)
|
||||
qdatastream \
|
||||
qdir \
|
||||
qfocusevent \
|
||||
qimage \
|
||||
@ -37,6 +35,8 @@ SUBDIRS=\
|
||||
windowsmobile \
|
||||
nativeimagehandleprovider
|
||||
|
||||
contains(QT_CONFIG, accessibility):SUBDIRS += qaccessibility
|
||||
|
||||
contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter
|
||||
mac: {
|
||||
SUBDIRS += macgui \
|
||||
@ -56,6 +56,8 @@ symbian {
|
||||
qs60mainapplication
|
||||
}
|
||||
|
||||
!win32-msvc*:!wince*:SUBDIRS += exceptionsafety_objects
|
||||
|
||||
# Following tests depends on private API
|
||||
!contains(QT_CONFIG, private_tests): SUBDIRS -= \
|
||||
qcombobox \
|
||||
|
@ -7,7 +7,7 @@ requires(contains(QT_CONFIG,private_tests))
|
||||
|
||||
MOC_DIR=tmp
|
||||
|
||||
QT = core network
|
||||
QT = core-private network-private
|
||||
|
||||
symbian {
|
||||
TARGET.CAPABILITY = NetworkServices
|
||||
|
@ -83,8 +83,12 @@ public:
|
||||
|
||||
bool open(QIODevice::OpenMode openMode)
|
||||
{
|
||||
Q_ASSERT(!openForRead_);
|
||||
Q_ASSERT(!openForWrite_);
|
||||
if (openForRead_ || openForWrite_) {
|
||||
qWarning("%s: file is already open for %s",
|
||||
Q_FUNC_INFO,
|
||||
(openForRead_ ? "reading" : "writing"));
|
||||
return false;
|
||||
}
|
||||
|
||||
openFile_ = resolveFile(openMode & QIODevice::WriteOnly);
|
||||
if (!openFile_)
|
||||
@ -132,13 +136,19 @@ public:
|
||||
|
||||
qint64 pos() const
|
||||
{
|
||||
Q_ASSERT(openForRead_ || openForWrite_);
|
||||
if (!openForRead_ && !openForWrite_) {
|
||||
qWarning("%s: file is not open", Q_FUNC_INFO);
|
||||
return -1;
|
||||
}
|
||||
return position_;
|
||||
}
|
||||
|
||||
bool seek(qint64 pos)
|
||||
{
|
||||
Q_ASSERT(openForRead_ || openForWrite_);
|
||||
if (!openForRead_ && !openForWrite_) {
|
||||
qWarning("%s: file is not open", Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pos >= 0) {
|
||||
position_ = pos;
|
||||
@ -150,7 +160,11 @@ public:
|
||||
|
||||
bool flush()
|
||||
{
|
||||
Q_ASSERT(openForRead_ || openForWrite_);
|
||||
if (!openForRead_ && !openForWrite_) {
|
||||
qWarning("%s: file is not open", Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -346,10 +360,10 @@ public:
|
||||
|
||||
void setFileName(const QString &file)
|
||||
{
|
||||
Q_ASSERT(!openForRead_);
|
||||
Q_ASSERT(!openForWrite_);
|
||||
|
||||
fileName_ = file;
|
||||
if (openForRead_ || openForWrite_)
|
||||
qWarning("%s: Can't set file name while file is open", Q_FUNC_INFO);
|
||||
else
|
||||
fileName_ = file;
|
||||
}
|
||||
|
||||
// typedef QAbstractFileEngineIterator Iterator;
|
||||
@ -368,9 +382,16 @@ public:
|
||||
|
||||
qint64 read(char *data, qint64 maxLen)
|
||||
{
|
||||
Q_ASSERT(openForRead_);
|
||||
if (!openForRead_) {
|
||||
qWarning("%s: file must be open for reading", Q_FUNC_INFO);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (openFile_.isNull()) {
|
||||
qWarning("%s: file must not be null", Q_FUNC_INFO);
|
||||
return -1;
|
||||
}
|
||||
|
||||
Q_ASSERT(!openFile_.isNull());
|
||||
QMutexLocker lock(&openFile_->mutex);
|
||||
qint64 readSize = qMin(openFile_->content.size() - position_, maxLen);
|
||||
if (readSize < 0)
|
||||
@ -384,12 +405,19 @@ public:
|
||||
|
||||
qint64 write(const char *data, qint64 length)
|
||||
{
|
||||
Q_ASSERT(openForWrite_);
|
||||
if (!openForWrite_) {
|
||||
qWarning("%s: file must be open for writing", Q_FUNC_INFO);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (openFile_.isNull()) {
|
||||
qWarning("%s: file must not be null", Q_FUNC_INFO);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (length < 0)
|
||||
return -1;
|
||||
|
||||
Q_ASSERT(!openFile_.isNull());
|
||||
QMutexLocker lock(&openFile_->mutex);
|
||||
if (openFile_->content.size() == position_)
|
||||
openFile_->content.append(data, length);
|
||||
@ -434,7 +462,8 @@ protected:
|
||||
QSharedPointer<File> resolveFile(bool create) const
|
||||
{
|
||||
if (openForRead_ || openForWrite_) {
|
||||
Q_ASSERT(openFile_);
|
||||
if (!openFile_)
|
||||
qWarning("%s: file should not be null", Q_FUNC_INFO);
|
||||
return openFile_;
|
||||
}
|
||||
|
||||
|
@ -299,7 +299,7 @@ public:
|
||||
startTimer(2000);
|
||||
}
|
||||
|
||||
void timerEvent(QTimerEvent *event)
|
||||
void timerEvent(QTimerEvent * /* event */)
|
||||
{
|
||||
// should not crash.
|
||||
(void)new QScrollArea(this);
|
||||
|
@ -90,7 +90,7 @@ public:
|
||||
QSizeF documentSize() const { return QSizeF(); }
|
||||
QRectF frameBoundingRect(QTextFrame *) const { return QRectF(); }
|
||||
QRectF blockBoundingRect(const QTextBlock &) const { return QRectF(); }
|
||||
void documentChanged(int from, int oldLength, int length) {
|
||||
void documentChanged(int from, int /* oldLength */, int length) {
|
||||
++changeEvents;
|
||||
|
||||
QTextBlock last = document()->lastBlock();
|
||||
|
@ -1,4 +1,5 @@
|
||||
load(qttest_p4)
|
||||
requires(contains(QT_CONFIG,accessibility))
|
||||
SOURCES += tst_qaccessibility.cpp
|
||||
|
||||
unix:!mac:LIBS+=-lm
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,212 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt3Support module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef Q3TL_H
|
||||
#define Q3TL_H
|
||||
|
||||
#include <QtCore/qalgorithms.h>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QT_MODULE(Qt3SupportLight)
|
||||
|
||||
template <typename T, typename LessThan>
|
||||
Q_OUTOFLINE_TEMPLATE void qHeapSortPushDown(T *heap, int first, int last, LessThan lessThan)
|
||||
{
|
||||
int r = first;
|
||||
while (r <= last / 2) {
|
||||
if (last == 2 * r) {
|
||||
// node r has only one child
|
||||
if (lessThan(heap[2 * r], heap[r]))
|
||||
qSwap(heap[r], heap[2 * r]);
|
||||
r = last;
|
||||
} else {
|
||||
// node r has two children
|
||||
if (lessThan(heap[2 * r], heap[r]) && !lessThan(heap[2 * r + 1], heap[2 * r])) {
|
||||
// swap with left child
|
||||
qSwap(heap[r], heap[2 * r]);
|
||||
r *= 2;
|
||||
} else if (lessThan(heap[2 * r + 1], heap[r])
|
||||
&& lessThan(heap[2 * r + 1], heap[2 * r])) {
|
||||
// swap with right child
|
||||
qSwap(heap[r], heap[2 * r + 1]);
|
||||
r = 2 * r + 1;
|
||||
} else {
|
||||
r = last;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename BiIterator, typename T, typename LessThan>
|
||||
Q_OUTOFLINE_TEMPLATE void qHeapSortHelper(BiIterator begin, BiIterator end, const T & /* dummy */, LessThan lessThan)
|
||||
{
|
||||
BiIterator it = begin;
|
||||
uint n = 0;
|
||||
while (it != end) {
|
||||
++n;
|
||||
++it;
|
||||
}
|
||||
if (n == 0)
|
||||
return;
|
||||
|
||||
// Create the heap
|
||||
BiIterator insert = begin;
|
||||
T *realheap = new T[n];
|
||||
T *heap = realheap - 1;
|
||||
int size = 0;
|
||||
for(; insert != end; ++insert) {
|
||||
heap[++size] = *insert;
|
||||
int i = size;
|
||||
while (i > 1 && lessThan(heap[i], heap[i / 2])) {
|
||||
qSwap(heap[i], heap[i / 2]);
|
||||
i /= 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Now do the sorting
|
||||
for (int i = n; i > 0; i--) {
|
||||
*begin++ = heap[1];
|
||||
if (i > 1) {
|
||||
heap[1] = heap[i];
|
||||
qHeapSortPushDown(heap, 1, i - 1, lessThan);
|
||||
}
|
||||
}
|
||||
|
||||
delete[] realheap;
|
||||
}
|
||||
|
||||
template <typename BiIterator, typename T>
|
||||
inline void qHeapSortHelper(BiIterator begin, BiIterator end, const T &dummy)
|
||||
{
|
||||
qHeapSortHelper(begin, end, dummy, qLess<T>());
|
||||
}
|
||||
|
||||
template <typename BiIterator, typename LessThan>
|
||||
inline void qHeapSort(BiIterator begin, BiIterator end, LessThan lessThan)
|
||||
{
|
||||
if (begin != end)
|
||||
qHeapSortHelper(begin, end, *begin, lessThan);
|
||||
}
|
||||
|
||||
template <typename BiIterator>
|
||||
inline void qHeapSort(BiIterator begin, BiIterator end)
|
||||
{
|
||||
if (begin != end)
|
||||
qHeapSortHelper(begin, end, *begin);
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
inline void qHeapSort(Container &c)
|
||||
{
|
||||
#ifdef Q_CC_BOR
|
||||
// Work around Borland 5.5 optimizer bug
|
||||
c.detach();
|
||||
#endif
|
||||
if (!c.empty())
|
||||
qHeapSortHelper(c.begin(), c.end(), *c.begin());
|
||||
}
|
||||
|
||||
|
||||
template <typename BiIterator, typename LessThan>
|
||||
void qBubbleSort(BiIterator begin, BiIterator end, LessThan lessThan)
|
||||
{
|
||||
// Goto last element;
|
||||
BiIterator last = end;
|
||||
|
||||
// empty list
|
||||
if (begin == end)
|
||||
return;
|
||||
|
||||
--last;
|
||||
// only one element ?
|
||||
if (last == begin)
|
||||
return;
|
||||
|
||||
// So we have at least two elements in here
|
||||
while (begin != last) {
|
||||
bool swapped = false;
|
||||
BiIterator swapPos = begin;
|
||||
BiIterator x = end;
|
||||
BiIterator y = x;
|
||||
y--;
|
||||
do {
|
||||
--x;
|
||||
--y;
|
||||
if (lessThan(*x, *y)) {
|
||||
swapped = true;
|
||||
qSwap(*x, *y);
|
||||
swapPos = y;
|
||||
}
|
||||
} while (y != begin);
|
||||
if (!swapped)
|
||||
return;
|
||||
begin = swapPos;
|
||||
++begin;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename BiIterator, typename T>
|
||||
void qBubbleSortHelper(BiIterator begin, BiIterator end, T)
|
||||
{
|
||||
qBubbleSort(begin, end, qLess<T>());
|
||||
}
|
||||
|
||||
template <typename BiIterator>
|
||||
void qBubbleSort(BiIterator begin, BiIterator end)
|
||||
{
|
||||
if (begin != end)
|
||||
qBubbleSortHelper(begin, end, *begin);
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
inline void qBubbleSort(Container &c)
|
||||
{
|
||||
qBubbleSort(c.begin(), c.end());
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // Q3TL_H
|
@ -47,7 +47,6 @@
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <qalgorithms.h>
|
||||
#include "q3tl.h"
|
||||
#include <QStringList>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
@ -71,8 +70,6 @@ public slots:
|
||||
void cleanup();
|
||||
|
||||
private slots:
|
||||
void qBubbleSort();
|
||||
void qHeapSort();
|
||||
void test_qLowerBound_data();
|
||||
void test_qLowerBound();
|
||||
void test_qUpperBound_data();
|
||||
@ -100,13 +97,11 @@ private:
|
||||
};
|
||||
|
||||
tst_QAlgorithms::tst_QAlgorithms()
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
tst_QAlgorithms::~tst_QAlgorithms()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void tst_QAlgorithms::init()
|
||||
@ -241,7 +236,8 @@ QList<ResultSet> testAlgorithm(Algorithm &algorithm, QStringList dataSetTypes,
|
||||
foreach(QString dataSetType, dataSetTypes) {
|
||||
QVector<DataType> container = generateData<DataType>(dataSetType, size);
|
||||
results.append(testRun(container, algorithm, time));
|
||||
Q_ASSERT(isSorted(container));
|
||||
if (!isSorted(container))
|
||||
qWarning("%s: container is not sorted after test", Q_FUNC_INFO);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
@ -266,149 +262,6 @@ void testAlgorithm(Algorithm algorithm, QStringList &dataSetTypes)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
static bool userFunction1(char ch1, char ch2)
|
||||
{
|
||||
return (ch1 ^ 1) < (ch2 ^ 1);
|
||||
}
|
||||
|
||||
bool userFunction2(const char &ch1, char ch2)
|
||||
{
|
||||
return (ch1 ^ 1) < (ch2 ^ 1);
|
||||
}
|
||||
|
||||
static inline bool userFunction3(char ch1, const char &ch2)
|
||||
{
|
||||
return (ch1 ^ 1) < (ch2 ^ 1);
|
||||
}
|
||||
|
||||
inline bool userFunction4(const char &ch1, const char &ch2)
|
||||
{
|
||||
return (ch1 ^ 1) < (ch2 ^ 1);
|
||||
}
|
||||
|
||||
class UserFunctor1
|
||||
{
|
||||
public:
|
||||
UserFunctor1(int x = 1) : y(x) {}
|
||||
|
||||
bool operator()(char ch1, char ch2)
|
||||
{
|
||||
return (ch1 ^ y) < (ch2 ^ y);
|
||||
}
|
||||
|
||||
char y;
|
||||
};
|
||||
|
||||
void tst_QAlgorithms::qHeapSort()
|
||||
{
|
||||
char array1[] = "3141592";
|
||||
::qHeapSort((char *)array1, array1 + strlen(array1));
|
||||
QVERIFY(strcmp(array1, "1123459") == 0);
|
||||
|
||||
::qHeapSort((char *)array1, array1 + strlen(array1), qGreater<char>());
|
||||
QVERIFY(strcmp(array1, "9543211") == 0);
|
||||
|
||||
::qHeapSort((char *)array1, array1 + strlen(array1), qLess<char>());
|
||||
QVERIFY(strcmp(array1, "1123459") == 0);
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), userFunction1);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), userFunction2);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), userFunction3);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), userFunction4);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
UserFunctor1 userFunctor1;
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), userFunctor1);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), UserFunctor1());
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), UserFunctor1(1));
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), UserFunctor1(3));
|
||||
QVERIFY(strcmp(array2, "3210765498CBA@ED") == 0);
|
||||
::qHeapSort((char *)array2, array2 + strlen(array2), UserFunctor1(0));
|
||||
QVERIFY(strcmp(array2, "0123456789@ABCDE") == 0);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QAlgorithms::qBubbleSort()
|
||||
{
|
||||
char array1[] = "3141592";
|
||||
::qBubbleSort((char *)array1, array1 + strlen(array1));
|
||||
QVERIFY(strcmp(array1, "1123459") == 0);
|
||||
|
||||
::qBubbleSort((char *)array1, array1 + strlen(array1), qGreater<char>());
|
||||
QVERIFY(strcmp(array1, "9543211") == 0);
|
||||
|
||||
::qBubbleSort((char *)array1, array1 + strlen(array1), qLess<char>());
|
||||
QVERIFY(strcmp(array1, "1123459") == 0);
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), userFunction1);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), userFunction2);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), userFunction3);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), userFunction4);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
UserFunctor1 userFunctor1;
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), userFunctor1);
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
}
|
||||
|
||||
{
|
||||
char array2[] = "0123456789@ABCDE";
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), UserFunctor1());
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), UserFunctor1(1));
|
||||
QVERIFY(strcmp(array2, "1032547698A@CBED") == 0);
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), UserFunctor1(3));
|
||||
QVERIFY(strcmp(array2, "3210765498CBA@ED") == 0);
|
||||
::qBubbleSort((char *)array2, array2 + strlen(array2), UserFunctor1(0));
|
||||
QVERIFY(strcmp(array2, "0123456789@ABCDE") == 0);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QAlgorithms::swap()
|
||||
{
|
||||
@ -557,7 +410,7 @@ void tst_QAlgorithms::sortedList()
|
||||
QList<int> list;
|
||||
list << 4 << 3 << 6;
|
||||
|
||||
::qHeapSort(list.begin(), list.end());
|
||||
::qSort(list.begin(), list.end());
|
||||
|
||||
QCOMPARE(list.count(), 3);
|
||||
QCOMPARE(list.at(0), 3);
|
||||
@ -877,26 +730,6 @@ void tst_QAlgorithms::convenienceAPI()
|
||||
qDeleteAll(pointerList.begin(), pointerList.end());
|
||||
}
|
||||
|
||||
template <typename DataType>
|
||||
class HeapSortHelper
|
||||
{
|
||||
public:
|
||||
void operator()(QVector<DataType> list)
|
||||
{
|
||||
::qHeapSort(list);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename DataType>
|
||||
class BubbleSortHelper
|
||||
{
|
||||
public:
|
||||
void operator()(QVector<DataType> list)
|
||||
{
|
||||
::qBubbleSort(list);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename DataType>
|
||||
class QuickSortHelper
|
||||
{
|
||||
@ -948,22 +781,14 @@ void tst_QAlgorithms::performance()
|
||||
testAlgorithm<StlSortHelper<TestInt>, TestInt>(StlSortHelper<TestInt>(), dataSetTypes);
|
||||
cout << endl << "std::stable_sort" << endl;
|
||||
testAlgorithm<StlStableSortHelper<TestInt>, TestInt>(StlStableSortHelper<TestInt>(), dataSetTypes);
|
||||
cout << "Heap sort" << endl;
|
||||
testAlgorithm<HeapSortHelper<TestInt>, TestInt>(HeapSortHelper<TestInt>(), dataSetTypes);
|
||||
cout << endl << "Bubble sort" << endl;
|
||||
testAlgorithm<BubbleSortHelper<TestInt>, TestInt>(BubbleSortHelper<TestInt>(), dataSetTypes);
|
||||
/*
|
||||
cout << endl << "Sorting lists of ints" << endl;
|
||||
cout << "Heap sort" << endl;
|
||||
testAlgorithm<HeapSortHelper<int>, int>(HeapSortHelper<int>(), dataSetTypes);
|
||||
cout << endl << "Quick sort" << endl;
|
||||
testAlgorithm<QuickSortHelper<int>, int>(QuickSortHelper<int>(), dataSetTypes);
|
||||
cout << endl << "std::sort" << endl;
|
||||
testAlgorithm<StlSortHelper<int>, int>(StlSortHelper<int>(), dataSetTypes);
|
||||
cout << endl << "std::stable_sort" << endl;
|
||||
testAlgorithm<StlStableSortHelper<int>, int>(StlStableSortHelper<int>(), dataSetTypes);
|
||||
cout << endl << "Bubble sort" << endl;
|
||||
testAlgorithm<BubbleSortHelper<int>, int>(BubbleSortHelper<int>(), dataSetTypes);
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
|
@ -49,5 +49,6 @@ int main(int argc, char *argv[])
|
||||
QApplication app(argc, argv);
|
||||
QApplication::setAttribute(Qt::AA_NativeWindows); //QTBUG-15774
|
||||
base *b = new base();
|
||||
Q_UNUSED(b);
|
||||
return app.exec();
|
||||
}
|
||||
|
@ -116,8 +116,7 @@ tst_QAtomicInt::~tst_QAtomicInt()
|
||||
|
||||
void tst_QAtomicInt::warningFreeHelper()
|
||||
{
|
||||
Q_ASSERT(false);
|
||||
// The code below is bogus, and shouldn't be run. We're looking for warnings, only.
|
||||
qFatal("This code is bogus, and shouldn't be run. We're looking for compiler warnings only.");
|
||||
|
||||
QBasicAtomicInt i = Q_BASIC_ATOMIC_INITIALIZER(0);
|
||||
|
||||
|
@ -98,8 +98,7 @@ struct WFHC
|
||||
|
||||
void tst_QAtomicPointer::warningFreeHelper()
|
||||
{
|
||||
Q_ASSERT(false);
|
||||
// The code below is bogus, and shouldn't be run. We're looking for warnings, only.
|
||||
qFatal("This code is bogus, and shouldn't be run. We're looking for compiler warnings only.");
|
||||
|
||||
QBasicAtomicPointer<WFHC> p = Q_BASIC_ATOMIC_INITIALIZER(0);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
load(qttest_p4)
|
||||
requires(contains(QT_CONFIG,private_tests))
|
||||
QT = core network
|
||||
QT = core network-private
|
||||
SOURCES += tst_qauthenticator.cpp
|
||||
DEFINES += SRCDIR=\\\"$$PWD/\\\"
|
||||
|
@ -309,8 +309,7 @@ void tst_QBuffer::seekTest()
|
||||
// (see Task 184730)
|
||||
{
|
||||
char c;
|
||||
const int offset = 1;
|
||||
Q_ASSERT(offset > 0); // any positive integer will do
|
||||
const int offset = 1; // any positive integer will do
|
||||
const qint64 pos = buf.size() + offset;
|
||||
QVERIFY(buf.seek(pos));
|
||||
QCOMPARE(buf.pos(), pos);
|
||||
|
@ -548,14 +548,14 @@ void tst_QChar::normalization_data()
|
||||
|
||||
QList<QByteArray> l = line.split(';');
|
||||
|
||||
Q_ASSERT(l.size() == 5);
|
||||
QCOMPARE(l.size(), 5);
|
||||
|
||||
QStringList columns;
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
columns.append(QString());
|
||||
|
||||
QList<QByteArray> c = l.at(i).split(' ');
|
||||
Q_ASSERT(!c.isEmpty());
|
||||
QVERIFY(!c.isEmpty());
|
||||
|
||||
for (int j = 0; j < c.size(); ++j) {
|
||||
bool ok;
|
||||
|
@ -1506,7 +1506,6 @@ void tst_QColor::setallowX11ColorNames()
|
||||
for (int i = 0; i < x11RgbTblSize; ++i) {
|
||||
QString colorName = QLatin1String(x11RgbTbl[i].name);
|
||||
QColor color;
|
||||
QTest::ignoreMessage(QtWarningMsg, QString("QColor::setNamedColor: Unknown color name '%1'").arg(colorName).toLatin1());
|
||||
color.setNamedColor(colorName);
|
||||
QVERIFY(!color.isValid());
|
||||
}
|
||||
@ -1528,7 +1527,6 @@ void tst_QColor::setallowX11ColorNames()
|
||||
for (int i = 0; i < x11RgbTblSize; ++i) {
|
||||
QString colorName = QLatin1String(x11RgbTbl[i].name);
|
||||
QColor color;
|
||||
QTest::ignoreMessage(QtWarningMsg, QString("QColor::setNamedColor: Unknown color name '%1'").arg(colorName).toLatin1());
|
||||
color.setNamedColor(colorName);
|
||||
QVERIFY(!color.isValid());
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
CONFIG += qttest_p4
|
||||
QT += gui-private core-private
|
||||
|
||||
SOURCES += tst_qcolumnview.cpp
|
||||
TARGET = tst_qcolumnview
|
||||
|
@ -1,3 +1,4 @@
|
||||
load(qttest_p4)
|
||||
QT += gui-private core-private
|
||||
SOURCES += tst_qcombobox.cpp
|
||||
|
||||
|
@ -1230,21 +1230,17 @@ void tst_QComboBox::insertItem_data()
|
||||
QTest::addColumn<int>("insertIndex");
|
||||
QTest::addColumn<QString>("itemLabel");
|
||||
QTest::addColumn<int>("expectedIndex");
|
||||
QTest::addColumn<bool>("testQt3Support");
|
||||
QTest::addColumn<bool>("editable");
|
||||
|
||||
QStringList initialItems;
|
||||
initialItems << "foo" << "bar";
|
||||
for(int e = 0 ; e<2 ; e++) {
|
||||
bool editable = (e==0);
|
||||
QTest::newRow("Insert less then 0") << initialItems << -1 << "inserted" << 0 << false << editable;
|
||||
QTest::newRow("Insert at 0") << initialItems << 0 << "inserted" << 0 << false << editable;
|
||||
QTest::newRow("Insert beyond count") << initialItems << 3 << "inserted" << 2 << false << editable;
|
||||
QTest::newRow("Insert at count") << initialItems << 2 << "inserted" << 2 << false << editable;
|
||||
QTest::newRow("Insert in the middle") << initialItems << 1 << "inserted" << 1 << false << editable;
|
||||
#if defined(QT3_SUPPORT)
|
||||
QTest::newRow("Qt3Support: Insert less then 0") << initialItems << -1 << "inserted" << 2 << true << editable;
|
||||
#endif
|
||||
QTest::newRow("Insert less then 0") << initialItems << -1 << "inserted" << 0 << editable;
|
||||
QTest::newRow("Insert at 0") << initialItems << 0 << "inserted" << 0 << editable;
|
||||
QTest::newRow("Insert beyond count") << initialItems << 3 << "inserted" << 2 << editable;
|
||||
QTest::newRow("Insert at count") << initialItems << 2 << "inserted" << 2 << editable;
|
||||
QTest::newRow("Insert in the middle") << initialItems << 1 << "inserted" << 1 << editable;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1254,7 +1250,6 @@ void tst_QComboBox::insertItem()
|
||||
QFETCH(int, insertIndex);
|
||||
QFETCH(QString, itemLabel);
|
||||
QFETCH(int, expectedIndex);
|
||||
QFETCH(bool, testQt3Support);
|
||||
QFETCH(bool, editable);
|
||||
|
||||
testWidget->insertItems(0, initialItems);
|
||||
@ -1263,16 +1258,7 @@ void tst_QComboBox::insertItem()
|
||||
testWidget->setEditable(true);
|
||||
if (editable)
|
||||
testWidget->setEditText("FOO");
|
||||
#if defined (QT3_SUPPORT)
|
||||
if (testQt3Support)
|
||||
testWidget->insertItem(itemLabel, insertIndex);
|
||||
else
|
||||
testWidget->insertItem(insertIndex, itemLabel);
|
||||
#else
|
||||
Q_UNUSED(testQt3Support);
|
||||
testWidget->insertItem(insertIndex, itemLabel);
|
||||
#endif
|
||||
|
||||
|
||||
QCOMPARE(testWidget->count(), initialItems.count() + 1);
|
||||
QCOMPARE(testWidget->itemText(expectedIndex), itemLabel);
|
||||
|
@ -277,7 +277,9 @@ retry:
|
||||
case 'L': row = completer->completionCount() - 1; break;
|
||||
case 'F': row = 0; break;
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
QFAIL(qPrintable(QString(
|
||||
"Problem with 'step' value in test data: %1 (only P, N, L and F are allowed)."
|
||||
).arg(step[i])));
|
||||
}
|
||||
completer->setCurrentRow(row);
|
||||
}
|
||||
@ -1248,9 +1250,7 @@ public:
|
||||
void tst_QCompleter::task189564_omitNonSelectableItems()
|
||||
{
|
||||
const QString prefix("a");
|
||||
Q_ASSERT(!prefix.isEmpty());
|
||||
const int n = 5;
|
||||
Q_ASSERT(n > 0);
|
||||
|
||||
QStringList strings;
|
||||
for (int i = 0; i < n; ++i)
|
||||
@ -1278,10 +1278,11 @@ public:
|
||||
{
|
||||
setEditable(true);
|
||||
setInsertPolicy(NoInsert);
|
||||
Q_ASSERT(completer());
|
||||
completer()->setCompletionMode(QCompleter::PopupCompletion);
|
||||
completer()->setCompletionRole(Qt::DisplayRole);
|
||||
connect(lineEdit(), SIGNAL(editingFinished()), SLOT(setCompletionPrefix()));
|
||||
if (completer()) {
|
||||
completer()->setCompletionMode(QCompleter::PopupCompletion);
|
||||
completer()->setCompletionRole(Qt::DisplayRole);
|
||||
connect(lineEdit(), SIGNAL(editingFinished()), SLOT(setCompletionPrefix()));
|
||||
}
|
||||
}
|
||||
private slots:
|
||||
void setCompletionPrefix() { completer()->setCompletionPrefix(lineEdit()->text()); }
|
||||
@ -1290,6 +1291,7 @@ private slots:
|
||||
void tst_QCompleter::task246056_setCompletionPrefix()
|
||||
{
|
||||
task246056_ComboBox *comboBox = new task246056_ComboBox;
|
||||
QVERIFY(comboBox->completer());
|
||||
comboBox->addItem("");
|
||||
comboBox->addItem("a1");
|
||||
comboBox->addItem("a2");
|
||||
|
@ -49,7 +49,11 @@ int main(int argc, char** argv)
|
||||
#ifdef Q_WS_QWS
|
||||
QApplication app(argc, argv);
|
||||
QStringList args = app.arguments();
|
||||
Q_ASSERT(args.count() == 3 || args.count() == 4);
|
||||
if (args.count() != 3 && args.count() != 4) {
|
||||
fprintf(stdout,qPrintable(QString("Usage: %1 channel message [data]").arg(args.at(0))));
|
||||
fflush(stdout);
|
||||
return 1;
|
||||
}
|
||||
QString channelName = args.at(1);
|
||||
QString msg = args.at(2);
|
||||
QByteArray data;
|
||||
|
@ -1,6 +1,6 @@
|
||||
load(qttest_p4)
|
||||
SOURCES += tst_qcssparser.cpp
|
||||
QT += xml
|
||||
QT += xml gui-private
|
||||
|
||||
requires(contains(QT_CONFIG,private_tests))
|
||||
!symbian: {
|
||||
|
@ -148,7 +148,7 @@ void tst_QCssParser::scanner_data()
|
||||
}
|
||||
|
||||
|
||||
static char *tokenName(QCss::TokenType t)
|
||||
static const char *tokenName(QCss::TokenType t)
|
||||
{
|
||||
switch (t) {
|
||||
case QCss::NONE: return "NONE";
|
||||
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 522 KiB |
@ -1,23 +1,14 @@
|
||||
load(qttest_p4)
|
||||
SOURCES += tst_qdatastream.cpp
|
||||
|
||||
!symbian: {
|
||||
cross_compile: DEFINES += SVGFILE=\\\"tests2.svg\\\"
|
||||
else: DEFINES += SVGFILE=\\\"gearflowers.svg\\\"
|
||||
}
|
||||
|
||||
# for qpaintdevicemetrics.h
|
||||
QT += svg
|
||||
|
||||
|
||||
wince*: {
|
||||
addFiles.files = datastream.q42 tests2.svg
|
||||
addFiles.files = datastream.q42
|
||||
addFiles.path = .
|
||||
DEPLOYMENT += addFiles
|
||||
DEFINES += SRCDIR=\\\"\\\"
|
||||
} else:symbian {
|
||||
# SRCDIR and SVGFILE defined in code in symbian
|
||||
addFiles.files = datastream.q42 tests2.svg
|
||||
# SRCDIR defined in code in symbian
|
||||
addFiles.files = datastream.q42
|
||||
addFiles.path = .
|
||||
DEPLOYMENT += addFiles
|
||||
TARGET.EPOCHEAPSIZE = 1000000 10000000
|
||||
|
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<!-- SVG content generated using Symbology Configuration Management System (SCMS) -->
|
||||
<!-- Systematic Software Engineering Ltd. - www.systematic.co.uk - do not remove -->
|
||||
<svg id="SUZP-----------" width="400px" height="400px" viewBox="0 0 400 400">
|
||||
<g >
|
||||
<svg viewBox="0 0 400 400" id="_0.SUZ------------" width="400px" height="400px"><path d="M115 285 C115 400 285 400 285 285 C400 285 400 115 285 115 C285 0 115 0 115 115 C0 115 0 285 115 285 z" style="fill:rgb(255,255,128);stroke:rgb(0,0,0);stroke-width:10"></path>
|
||||
<text x="130px" y="180px" style="font-size:100;font-family:Arial;fill:rgb(0,0,0)">U</text>
|
||||
</svg>
|
||||
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 757 B |
File diff suppressed because it is too large
Load Diff
@ -2701,17 +2701,10 @@ void tst_QDateTimeEdit::task98554()
|
||||
QCOMPARE(testWidget->time(), QTime(0, 0, 10, 0));
|
||||
}
|
||||
|
||||
static QList<int> makeList(int val1, int val2 = -1, int val3 = -1, int val4 = -1, int val5 = -1, int val6 = -1, int val7 = -1)
|
||||
static QList<int> makeList(int val1, int val2, int val3)
|
||||
{
|
||||
QList<int> ret;
|
||||
Q_ASSERT(val1 >= 0);
|
||||
ret << val1;
|
||||
if (val2 < 0) {return ret;} else {ret << val2;}
|
||||
if (val3 < 0) {return ret;} else {ret << val3;}
|
||||
if (val4 < 0) {return ret;} else {ret << val4;}
|
||||
if (val5 < 0) {return ret;} else {ret << val5;}
|
||||
if (val6 < 0) {return ret;} else {ret << val6;}
|
||||
if (val7 >= 0) {ret << val2;}
|
||||
ret << val1 << val2 << val3;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2753,7 +2746,7 @@ void tst_QDateTimeEdit::setCurrentSection()
|
||||
QFETCH(QList<int>, setCurrentSections);
|
||||
QFETCH(QList<int>, expectedCursorPositions);
|
||||
|
||||
Q_ASSERT(setCurrentSections.size() == expectedCursorPositions.size());
|
||||
QCOMPARE(setCurrentSections.size(), expectedCursorPositions.size());
|
||||
testWidget->setDisplayFormat(format);
|
||||
testWidget->setDateTime(dateTime);
|
||||
#ifdef Q_WS_MAC
|
||||
|
@ -3,7 +3,7 @@ SOURCES += ../tst_qdbusmarshall.cpp
|
||||
TARGET = ../tst_qdbusmarshall
|
||||
|
||||
QT = core
|
||||
QT += dbus
|
||||
QT += core-private dbus-private
|
||||
|
||||
LIBS += $$QT_LIBS_DBUS
|
||||
QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user