Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts: mkspecs/features/mac/default_pre.prf mkspecs/features/qpa/genericunixfontdatabase.prf mkspecs/features/uikit/default_post.prf mkspecs/features/uikit/resolve_config.prf mkspecs/macx-ios-clang/features/default_post.prf mkspecs/macx-ios-clang/features/resolve_config.prf src/corelib/io/qiodevice.cpp Change-Id: I6f210f71f177a3c3278a4f380542195e14e4b491
This commit is contained in:
commit
ef25620ac1
7
doc/doc.pro
Normal file
7
doc/doc.pro
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TEMPLATE = aux
|
||||||
|
|
||||||
|
global_docs.files = $$PWD/global
|
||||||
|
global_docs.path = $$[QT_INSTALL_DOCS]
|
||||||
|
INSTALLS += global_docs
|
||||||
|
!prefix_build:!equals(OUT_PWD, $$PWD): \
|
||||||
|
COPIES += global_docs
|
@ -33,6 +33,8 @@ QMAKE_LIBS_DYNLOAD =
|
|||||||
QMAKE_LIBS_OPENGL = -framework OpenGL -framework AGL
|
QMAKE_LIBS_OPENGL = -framework OpenGL -framework AGL
|
||||||
QMAKE_LIBS_THREAD =
|
QMAKE_LIBS_THREAD =
|
||||||
|
|
||||||
|
QMAKE_ACTOOL = actool
|
||||||
|
|
||||||
QMAKE_DSYMUTIL = dsymutil
|
QMAKE_DSYMUTIL = dsymutil
|
||||||
QMAKE_STRIP = strip
|
QMAKE_STRIP = strip
|
||||||
QMAKE_STRIPFLAGS_LIB += -S -x
|
QMAKE_STRIPFLAGS_LIB += -S -x
|
||||||
|
109
mkspecs/features/mac/asset_catalogs.prf
Normal file
109
mkspecs/features/mac/asset_catalogs.prf
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
# QMAKE_ASSET_CATALOGS
|
||||||
|
# Paths to xcassets directories to be compiled
|
||||||
|
#
|
||||||
|
# QMAKE_ASSET_CATALOGS_BUILD_PATH
|
||||||
|
# Location which asset catalogs will be compiled to.
|
||||||
|
# If the current target is an app bundle, defaults to its Resources directory.
|
||||||
|
# Otherwise, this value must be set manually.
|
||||||
|
#
|
||||||
|
# QMAKE_ASSET_CATALOGS_APP_ICON
|
||||||
|
# Name of the icon resource in the asset catalogs that will be used as the app icon.
|
||||||
|
# Defaults to AppIcon.
|
||||||
|
#
|
||||||
|
# QMAKE_ASSET_CATALOGS_INSTALL_PATH
|
||||||
|
# Base path to install files to. Falls back to a path relative to the target install path,
|
||||||
|
# based on QMAKE_ASSET_CATALOGS_BUILD_PATH.
|
||||||
|
|
||||||
|
!have_target|if(!build_pass:!isEmpty(BUILDS)): \
|
||||||
|
return()
|
||||||
|
|
||||||
|
!isEmpty(QMAKE_ASSET_CATALOGS) {
|
||||||
|
load(resolve_target)
|
||||||
|
|
||||||
|
isEmpty(QMAKE_ASSET_CATALOGS_BUILD_PATH) {
|
||||||
|
!isEmpty(QMAKE_RESOLVED_BUNDLE):equals(TEMPLATE, app):app_bundle {
|
||||||
|
macos: \
|
||||||
|
QMAKE_ASSET_CATALOGS_BUILD_PATH = $$QMAKE_RESOLVED_BUNDLE/Contents/Resources
|
||||||
|
else: \
|
||||||
|
QMAKE_ASSET_CATALOGS_BUILD_PATH = $$QMAKE_RESOLVED_BUNDLE
|
||||||
|
} else {
|
||||||
|
error("QMAKE_ASSET_CATALOGS_BUILD_PATH must be set when using QMAKE_ASSET_CATALOGS.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QMAKE_ASSET_CATALOGS_BUILD_PATH = $$clean_path($$QMAKE_ASSET_CATALOGS_BUILD_PATH)
|
||||||
|
|
||||||
|
macx-xcode {
|
||||||
|
!isEmpty(QMAKE_ASSET_CATALOGS_APP_ICON) {
|
||||||
|
asset_catalog_appicon.name = "ASSETCATALOG_COMPILER_APPICON_NAME"
|
||||||
|
asset_catalog_appicon.value = $$QMAKE_ASSET_CATALOGS_APP_ICON
|
||||||
|
QMAKE_MAC_XCODE_SETTINGS += asset_catalog_appicon
|
||||||
|
}
|
||||||
|
|
||||||
|
asset_catalog_compiler.files = $$QMAKE_ASSET_CATALOGS
|
||||||
|
macos: asset_catalog_compiler.path = Contents/Resources
|
||||||
|
QMAKE_BUNDLE_DATA += asset_catalog_compiler
|
||||||
|
} else {
|
||||||
|
!isEmpty(QMAKE_ASSET_CATALOGS_APP_ICON) {
|
||||||
|
asset_catalog_app_icon_arg = \
|
||||||
|
--app-icon $$shell_quote($$QMAKE_ASSET_CATALOGS_APP_ICON)
|
||||||
|
}
|
||||||
|
|
||||||
|
asset_catalog_compiler.target = $$OUT_PWD/asset_catalog_compiler.Info.plist
|
||||||
|
asset_catalog_compiler.commands = $$shell_quote($$QMAKE_ACTOOL) \
|
||||||
|
$$asset_catalog_app_icon_arg \
|
||||||
|
--output-partial-info-plist $$shell_quote($$asset_catalog_compiler.target) \
|
||||||
|
--platform $${version_identifier} \
|
||||||
|
--minimum-deployment-target $${deployment_target} \
|
||||||
|
--compile $$shell_quote($$QMAKE_ASSET_CATALOGS_BUILD_PATH)
|
||||||
|
|
||||||
|
for (catalog, QMAKE_ASSET_CATALOGS) {
|
||||||
|
asset_catalog_compiler.commands += $${catalog}
|
||||||
|
asset_catalog_compiler.depends += $$files($$catalog/*, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
actool_output_files = $$system(\
|
||||||
|
mkdir -p $$system_quote($$QMAKE_ASSET_CATALOGS_BUILD_PATH) && \
|
||||||
|
/usr/libexec/PlistBuddy -c \'Print :com.apple.actool.compilation-results:output-files\' \
|
||||||
|
/dev/stdin <<< $($${asset_catalog_compiler.commands} 2>/dev/null) | grep \'^ .*$\', lines)
|
||||||
|
|
||||||
|
for (output_file, actool_output_files) {
|
||||||
|
!equals(output_file, $$asset_catalog_compiler.target): \
|
||||||
|
actool_output_files_rel += $$relative_path($$output_file, $$QMAKE_ASSET_CATALOGS_BUILD_PATH)
|
||||||
|
}
|
||||||
|
|
||||||
|
QMAKE_EXTRA_TARGETS += asset_catalog_compiler
|
||||||
|
PRE_TARGETDEPS += $$asset_catalog_compiler.target
|
||||||
|
|
||||||
|
isEmpty(QMAKE_ASSET_CATALOGS_INSTALL_PATH) {
|
||||||
|
!isEmpty(target.path): \
|
||||||
|
QMAKE_ASSET_CATALOGS_INSTALL_PATH = $${target.path}/
|
||||||
|
QMAKE_ASSET_CATALOGS_INSTALL_PATH = $${QMAKE_ASSET_CATALOGS_INSTALL_PATH}$$relative_path(\
|
||||||
|
$$QMAKE_ASSET_CATALOGS_BUILD_PATH, $$absolute_path($$DESTDIR, $$OUT_PWD))
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ac_install_file, actool_output_files_rel) {
|
||||||
|
asset_catalogs_files.files += \
|
||||||
|
$$QMAKE_ASSET_CATALOGS_BUILD_PATH/$$ac_install_file
|
||||||
|
}
|
||||||
|
contains(INSTALLS, target): asset_catalogs_files.depends += install_target
|
||||||
|
asset_catalogs_files.path = $$QMAKE_ASSET_CATALOGS_INSTALL_PATH
|
||||||
|
asset_catalogs_files.CONFIG += no_check_exist
|
||||||
|
INSTALLS += asset_catalogs_files
|
||||||
|
}
|
||||||
|
} else: macx-xcode {
|
||||||
|
# Backwards compatibility
|
||||||
|
for (bundle_data, QMAKE_BUNDLE_DATA) {
|
||||||
|
for (bundle_file, $${bundle_data}.files) {
|
||||||
|
!contains(bundle_file, .*\.xcassets$): next()
|
||||||
|
warning("*.xcassets in QMAKE_BUNDLE_DATA is deprecated. Use QMAKE_ASSET_CATALOGS instead.")
|
||||||
|
!exists($$absolute_path($$bundle_file/AppIcon.appiconset, $$_PRO_FILE_PWD_)): next()
|
||||||
|
|
||||||
|
asset_catalog_appicon.name = "ASSETCATALOG_COMPILER_APPICON_NAME"
|
||||||
|
asset_catalog_appicon.value = "AppIcon"
|
||||||
|
QMAKE_MAC_XCODE_SETTINGS += asset_catalog_appicon
|
||||||
|
break()
|
||||||
|
}
|
||||||
|
!isEmpty(asset_catalog_appicon.name): break()
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
CONFIG = sdk rez $$CONFIG
|
CONFIG = asset_catalogs sdk rez $$CONFIG
|
||||||
load(default_pre)
|
load(default_pre)
|
||||||
|
|
||||||
isEmpty(QMAKE_XCODE_DEVELOPER_PATH) {
|
isEmpty(QMAKE_XCODE_DEVELOPER_PATH) {
|
||||||
@ -33,6 +33,8 @@ isEmpty(QMAKE_TARGET_BUNDLE_PREFIX) {
|
|||||||
cache(QMAKE_TARGET_BUNDLE_PREFIX)
|
cache(QMAKE_TARGET_BUNDLE_PREFIX)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QMAKE_ASSET_CATALOGS_APP_ICON = AppIcon
|
||||||
|
|
||||||
# Make the default debug info format for static debug builds
|
# Make the default debug info format for static debug builds
|
||||||
# DWARF instead of DWARF with dSYM. This cuts down build times
|
# DWARF instead of DWARF with dSYM. This cuts down build times
|
||||||
# for application debug builds significantly, as Xcode doesn't
|
# for application debug builds significantly, as Xcode doesn't
|
||||||
|
@ -31,7 +31,7 @@ QMAKE_INCDIR_OPENGL = $$sysrootified
|
|||||||
QMAKESPEC_NAME = $$basename(QMAKESPEC)
|
QMAKESPEC_NAME = $$basename(QMAKESPEC)
|
||||||
|
|
||||||
# Resolve SDK version of various tools
|
# Resolve SDK version of various tools
|
||||||
for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_LINK QMAKE_LINK_SHLIB)) {
|
for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_LINK QMAKE_LINK_SHLIB QMAKE_ACTOOL)) {
|
||||||
tool_variable = QMAKE_MAC_SDK.$${QMAKESPEC_NAME}.$${QMAKE_MAC_SDK}.$${tool}
|
tool_variable = QMAKE_MAC_SDK.$${QMAKESPEC_NAME}.$${QMAKE_MAC_SDK}.$${tool}
|
||||||
!isEmpty($$tool_variable) {
|
!isEmpty($$tool_variable) {
|
||||||
$$tool = $$eval($$tool_variable)
|
$$tool = $$eval($$tool_variable)
|
||||||
|
@ -2,9 +2,5 @@ CONFIG += qpa/basicunixfontdatabase
|
|||||||
qtConfig(fontconfig) {
|
qtConfig(fontconfig) {
|
||||||
DEFINES += Q_FONTCONFIGDATABASE
|
DEFINES += Q_FONTCONFIGDATABASE
|
||||||
QMAKE_USE_PRIVATE += fontconfig/linkonly
|
QMAKE_USE_PRIVATE += fontconfig/linkonly
|
||||||
} else:!android {
|
|
||||||
fonts.path = $$[QT_INSTALL_LIBS]/fonts
|
|
||||||
fonts.files = $$QT_SOURCE_TREE/lib/fonts/*
|
|
||||||
INSTALLS += fonts
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,21 +29,6 @@ macx-xcode {
|
|||||||
QMAKE_MAC_XCODE_SETTINGS += device_family
|
QMAKE_MAC_XCODE_SETTINGS += device_family
|
||||||
|
|
||||||
ios {
|
ios {
|
||||||
# If QMAKE_BUNDLE_DATA contains an asset catalog that includes an
|
|
||||||
# AppIcon.appiconset, we configure Xcode to use it for app icons.
|
|
||||||
for(bundle_data, QMAKE_BUNDLE_DATA) {
|
|
||||||
for(bundle_file, $${bundle_data}.files) {
|
|
||||||
!contains(bundle_file, .*\.xcassets$): next()
|
|
||||||
!exists($$absolute_path($$bundle_file/AppIcon.appiconset, $$_PRO_FILE_PWD_)): next()
|
|
||||||
|
|
||||||
asset_catalog_appicon.name = "ASSETCATALOG_COMPILER_APPICON_NAME"
|
|
||||||
asset_catalog_appicon.value = "AppIcon"
|
|
||||||
QMAKE_MAC_XCODE_SETTINGS += asset_catalog_appicon
|
|
||||||
break()
|
|
||||||
}
|
|
||||||
!isEmpty(asset_catalog_appicon.name): break()
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set up default 4-inch iPhone/iPod launch image so that our apps
|
# Set up default 4-inch iPhone/iPod launch image so that our apps
|
||||||
# support the full screen resolution of those devices.
|
# support the full screen resolution of those devices.
|
||||||
qmake_launch_image = Default-568h@2x.png
|
qmake_launch_image = Default-568h@2x.png
|
||||||
|
@ -8,4 +8,10 @@ xcodebuild {
|
|||||||
|
|
||||||
load(resolve_config)
|
load(resolve_config)
|
||||||
|
|
||||||
!macx-xcode:xcodebuild: addExclusiveBuilds(simulator, device)
|
!macx-xcode:xcodebuild {
|
||||||
|
# Switch the order to make sure that the first Makefile target is the right one
|
||||||
|
!qtConfig(simulator_and_device):contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \
|
||||||
|
addExclusiveBuilds(simulator, device)
|
||||||
|
else: \
|
||||||
|
addExclusiveBuilds(device, simulator)
|
||||||
|
}
|
||||||
|
@ -50,6 +50,7 @@ QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
|
|||||||
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
||||||
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
||||||
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
|
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
|
||||||
|
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
|
||||||
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
|
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
|
||||||
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
|
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
|
||||||
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
|
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
|
||||||
|
@ -468,7 +468,9 @@ QByteArray QMakeEvaluator::getCommandOutput(const QString &args, int *exitCode)
|
|||||||
if (!errout.isEmpty()) {
|
if (!errout.isEmpty()) {
|
||||||
if (errout.endsWith('\n'))
|
if (errout.endsWith('\n'))
|
||||||
errout.chop(1);
|
errout.chop(1);
|
||||||
m_handler->message(QMakeHandler::EvalError, QString::fromLocal8Bit(errout));
|
m_handler->message(
|
||||||
|
QMakeHandler::EvalError | (m_cumulative ? QMakeHandler::CumulativeEvalMessage : 0),
|
||||||
|
QString::fromLocal8Bit(errout));
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
out = proc.readAllStandardOutput();
|
out = proc.readAllStandardOutput();
|
||||||
|
@ -2037,7 +2037,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFileInto(
|
|||||||
void QMakeEvaluator::message(int type, const QString &msg) const
|
void QMakeEvaluator::message(int type, const QString &msg) const
|
||||||
{
|
{
|
||||||
if (!m_skipLevel)
|
if (!m_skipLevel)
|
||||||
m_handler->message(type, msg,
|
m_handler->message(type | (m_cumulative ? QMakeHandler::CumulativeEvalMessage : 0), msg,
|
||||||
m_current.line ? m_current.pro->fileName() : QString(),
|
m_current.line ? m_current.pro->fileName() : QString(),
|
||||||
m_current.line != 0xffff ? m_current.line : -1);
|
m_current.line != 0xffff ? m_current.line : -1);
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,7 @@ bool QMakeVfs::writeFile(const QString &fn, QIODevice::OpenMode mode, bool exe,
|
|||||||
else
|
else
|
||||||
*cont = contents;
|
*cont = contents;
|
||||||
Q_UNUSED(errStr)
|
Q_UNUSED(errStr)
|
||||||
|
Q_UNUSED(exe)
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
QFileInfo qfi(fn);
|
QFileInfo qfi(fn);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
load(qt_parts)
|
load(qt_parts)
|
||||||
|
|
||||||
SUBDIRS += qmake/qmake-aux.pro
|
SUBDIRS += qmake/qmake-aux.pro doc
|
||||||
|
|
||||||
cross_compile: CONFIG += nostrip
|
cross_compile: CONFIG += nostrip
|
||||||
|
|
||||||
@ -84,10 +84,6 @@ mkspecs.files = \
|
|||||||
mkspecs.files -= $$PWD/mkspecs/modules $$PWD/mkspecs/modules-inst
|
mkspecs.files -= $$PWD/mkspecs/modules $$PWD/mkspecs/modules-inst
|
||||||
INSTALLS += mkspecs
|
INSTALLS += mkspecs
|
||||||
|
|
||||||
global_docs.files = $$PWD/doc/global
|
|
||||||
global_docs.path = $$[QT_INSTALL_DOCS]
|
|
||||||
INSTALLS += global_docs
|
|
||||||
|
|
||||||
OTHER_FILES += \
|
OTHER_FILES += \
|
||||||
configure \
|
configure \
|
||||||
header.BSD \
|
header.BSD \
|
||||||
|
4
src/3rdparty/atspi2/xml/Cache.xml
vendored
4
src/3rdparty/atspi2/xml/Cache.xml
vendored
@ -9,12 +9,12 @@
|
|||||||
|
|
||||||
<signal name="AddAccessible">
|
<signal name="AddAccessible">
|
||||||
<arg name="nodeAdded" type="((so)(so)a(so)assusau)"/>
|
<arg name="nodeAdded" type="((so)(so)a(so)assusau)"/>
|
||||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QSpiAccessibleCacheItem"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QSpiAccessibleCacheItem"/>
|
||||||
</signal>
|
</signal>
|
||||||
|
|
||||||
<signal name="RemoveAccessible">
|
<signal name="RemoveAccessible">
|
||||||
<arg name="nodeRemoved" type="(so)"/>
|
<arg name="nodeRemoved" type="(so)"/>
|
||||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
|
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
|
||||||
</signal>
|
</signal>
|
||||||
|
|
||||||
</interface>
|
</interface>
|
||||||
|
@ -3441,7 +3441,7 @@ Q_GLOBAL_STATIC(AndroidRandomStorage, randomTLS)
|
|||||||
pseudo random integers to be returned by qrand().
|
pseudo random integers to be returned by qrand().
|
||||||
|
|
||||||
The sequence of random numbers generated is deterministic per thread. For example,
|
The sequence of random numbers generated is deterministic per thread. For example,
|
||||||
if two threads call qsrand(1) and subsequently calls qrand(), the threads will get
|
if two threads call qsrand(1) and subsequently call qrand(), the threads will get
|
||||||
the same random number sequence.
|
the same random number sequence.
|
||||||
|
|
||||||
\sa qrand()
|
\sa qrand()
|
||||||
|
@ -1761,17 +1761,6 @@
|
|||||||
\value Key_Zoom
|
\value Key_Zoom
|
||||||
\value Key_Exit
|
\value Key_Exit
|
||||||
\value Key_Cancel
|
\value Key_Cancel
|
||||||
\value Key_MicVolumeUp
|
|
||||||
\value Key_Find
|
|
||||||
\value Key_Open
|
|
||||||
\value Key_MicVolumeDown
|
|
||||||
\value Key_New
|
|
||||||
\value Key_Settings
|
|
||||||
\value Key_Redo
|
|
||||||
\value Key_Exit
|
|
||||||
\value Key_Info
|
|
||||||
\value Key_Undo
|
|
||||||
\value Key_Guide
|
|
||||||
|
|
||||||
\sa QKeyEvent::key()
|
\sa QKeyEvent::key()
|
||||||
*/
|
*/
|
||||||
@ -2300,7 +2289,7 @@
|
|||||||
\enum Qt::ItemSelectionMode
|
\enum Qt::ItemSelectionMode
|
||||||
|
|
||||||
This enum is used in QGraphicsItem, QGraphicsScene and QGraphicsView to
|
This enum is used in QGraphicsItem, QGraphicsScene and QGraphicsView to
|
||||||
specify how items are selected, or how to determine if a shapes and items
|
specify how items are selected, or how to determine if shapes and items
|
||||||
collide.
|
collide.
|
||||||
|
|
||||||
\value ContainsItemShape The output list contains only items whose
|
\value ContainsItemShape The output list contains only items whose
|
||||||
|
@ -120,6 +120,14 @@ static void checkWarnMessage(const QIODevice *device, const char *function, cons
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define CHECK_MAXBYTEARRAYSIZE(function) \
|
||||||
|
do { \
|
||||||
|
if (maxSize >= MaxByteArraySize) { \
|
||||||
|
checkWarnMessage(this, #function, "maxSize argument exceeds QByteArray size limit"); \
|
||||||
|
maxSize = MaxByteArraySize - 1; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define CHECK_WRITABLE(function, returnType) \
|
#define CHECK_WRITABLE(function, returnType) \
|
||||||
do { \
|
do { \
|
||||||
if ((d->openMode & WriteOnly) == 0) { \
|
if ((d->openMode & WriteOnly) == 0) { \
|
||||||
@ -1178,10 +1186,7 @@ QByteArray QIODevice::read(qint64 maxSize)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CHECK_MAXLEN(read, result);
|
CHECK_MAXLEN(read, result);
|
||||||
if (maxSize >= MaxByteArraySize) {
|
CHECK_MAXBYTEARRAYSIZE(read);
|
||||||
checkWarnMessage(this, "read", "maxSize argument exceeds QByteArray size limit");
|
|
||||||
maxSize = MaxByteArraySize - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
result.resize(int(maxSize));
|
result.resize(int(maxSize));
|
||||||
qint64 readBytes = read(result.data(), result.size());
|
qint64 readBytes = read(result.data(), result.size());
|
||||||
@ -1402,17 +1407,13 @@ QByteArray QIODevice::readLine(qint64 maxSize)
|
|||||||
QByteArray result;
|
QByteArray result;
|
||||||
|
|
||||||
CHECK_MAXLEN(readLine, result);
|
CHECK_MAXLEN(readLine, result);
|
||||||
|
CHECK_MAXBYTEARRAYSIZE(readLine);
|
||||||
|
|
||||||
#if defined QIODEVICE_DEBUG
|
#if defined QIODEVICE_DEBUG
|
||||||
printf("%p QIODevice::readLine(%lld), d->pos = %lld, d->buffer.size() = %lld\n",
|
printf("%p QIODevice::readLine(%lld), d->pos = %lld, d->buffer.size() = %lld\n",
|
||||||
this, maxSize, d->pos, d->buffer.size());
|
this, maxSize, d->pos, d->buffer.size());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (maxSize >= MaxByteArraySize) {
|
|
||||||
qWarning("QIODevice::read: maxSize argument exceeds QByteArray size limit");
|
|
||||||
maxSize = MaxByteArraySize - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
result.resize(int(maxSize));
|
result.resize(int(maxSize));
|
||||||
qint64 readBytes = 0;
|
qint64 readBytes = 0;
|
||||||
if (!result.size()) {
|
if (!result.size()) {
|
||||||
|
@ -180,7 +180,7 @@ static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, Awai
|
|||||||
t.start();
|
t.start();
|
||||||
switch (awaitStyle) {
|
switch (awaitStyle) {
|
||||||
case ProcessMainThreadEvents:
|
case ProcessMainThreadEvents:
|
||||||
while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started) {
|
while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == AsyncStatus::Started) {
|
||||||
QCoreApplication::processEvents();
|
QCoreApplication::processEvents();
|
||||||
if (timeout && t.hasExpired(timeout))
|
if (timeout && t.hasExpired(timeout))
|
||||||
return ERROR_TIMEOUT;
|
return ERROR_TIMEOUT;
|
||||||
@ -188,7 +188,7 @@ static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, Awai
|
|||||||
break;
|
break;
|
||||||
case ProcessThreadEvents:
|
case ProcessThreadEvents:
|
||||||
if (QAbstractEventDispatcher *dispatcher = QThread::currentThread()->eventDispatcher()) {
|
if (QAbstractEventDispatcher *dispatcher = QThread::currentThread()->eventDispatcher()) {
|
||||||
while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started) {
|
while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == AsyncStatus::Started) {
|
||||||
dispatcher->processEvents(QEventLoop::AllEvents);
|
dispatcher->processEvents(QEventLoop::AllEvents);
|
||||||
if (timeout && t.hasExpired(timeout))
|
if (timeout && t.hasExpired(timeout))
|
||||||
return ERROR_TIMEOUT;
|
return ERROR_TIMEOUT;
|
||||||
@ -198,7 +198,7 @@ static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, Awai
|
|||||||
// fall through
|
// fall through
|
||||||
default:
|
default:
|
||||||
case YieldThread:
|
case YieldThread:
|
||||||
while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started) {
|
while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == AsyncStatus::Started) {
|
||||||
QThread::yieldCurrentThread();
|
QThread::yieldCurrentThread();
|
||||||
if (timeout && t.hasExpired(timeout))
|
if (timeout && t.hasExpired(timeout))
|
||||||
return ERROR_TIMEOUT;
|
return ERROR_TIMEOUT;
|
||||||
@ -206,7 +206,7 @@ static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, Awai
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(hr) || status != Completed) {
|
if (FAILED(hr) || status != AsyncStatus::Completed) {
|
||||||
HRESULT ec;
|
HRESULT ec;
|
||||||
hr = asyncInfo->get_ErrorCode(&ec);
|
hr = asyncInfo->get_ErrorCode(&ec);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
|
@ -370,7 +370,7 @@ void **QListData::erase(void **xi)
|
|||||||
application must interface with a C API.
|
application must interface with a C API.
|
||||||
|
|
||||||
\note Iterators into a QLinkedList and references into
|
\note Iterators into a QLinkedList and references into
|
||||||
heap-allocating QLists remain valid long as the referenced items
|
heap-allocating QLists remain valid as long as the referenced items
|
||||||
remain in the container. This is not true for iterators and
|
remain in the container. This is not true for iterators and
|
||||||
references into a QVector and non-heap-allocating QLists.
|
references into a QVector and non-heap-allocating QLists.
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@
|
|||||||
application must interface with a C API.
|
application must interface with a C API.
|
||||||
|
|
||||||
\note Iterators into a QLinkedList and references into
|
\note Iterators into a QLinkedList and references into
|
||||||
heap-allocating QLists remain valid long as the referenced items
|
heap-allocating QLists remain valid as long as the referenced items
|
||||||
remain in the container. This is not true for iterators and
|
remain in the container. This is not true for iterators and
|
||||||
references into a QVector and non-heap-allocating QLists.
|
references into a QVector and non-heap-allocating QLists.
|
||||||
|
|
||||||
|
@ -2067,6 +2067,9 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix
|
|||||||
font = font.resolve(fnt);
|
font = font.resolve(fnt);
|
||||||
}
|
}
|
||||||
engine = font.d->engineForScript(script);
|
engine = font.d->engineForScript(script);
|
||||||
|
if (engine)
|
||||||
|
engine->ref.ref();
|
||||||
|
|
||||||
QTextCharFormat::VerticalAlignment valign = f.verticalAlignment();
|
QTextCharFormat::VerticalAlignment valign = f.verticalAlignment();
|
||||||
if (valign == QTextCharFormat::AlignSuperScript || valign == QTextCharFormat::AlignSubScript) {
|
if (valign == QTextCharFormat::AlignSuperScript || valign == QTextCharFormat::AlignSubScript) {
|
||||||
if (font.pointSize() != -1)
|
if (font.pointSize() != -1)
|
||||||
@ -2074,16 +2077,14 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix
|
|||||||
else
|
else
|
||||||
font.setPixelSize((font.pixelSize() * 2) / 3);
|
font.setPixelSize((font.pixelSize() * 2) / 3);
|
||||||
scaledEngine = font.d->engineForScript(script);
|
scaledEngine = font.d->engineForScript(script);
|
||||||
|
if (scaledEngine)
|
||||||
|
scaledEngine->ref.ref();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (engine)
|
|
||||||
engine->ref.ref();
|
|
||||||
if (feCache.prevFontEngine)
|
if (feCache.prevFontEngine)
|
||||||
releaseCachedFontEngine(feCache.prevFontEngine);
|
releaseCachedFontEngine(feCache.prevFontEngine);
|
||||||
feCache.prevFontEngine = engine;
|
feCache.prevFontEngine = engine;
|
||||||
|
|
||||||
if (scaledEngine)
|
|
||||||
scaledEngine->ref.ref();
|
|
||||||
if (feCache.prevScaledFontEngine)
|
if (feCache.prevScaledFontEngine)
|
||||||
releaseCachedFontEngine(feCache.prevScaledFontEngine);
|
releaseCachedFontEngine(feCache.prevScaledFontEngine);
|
||||||
feCache.prevScaledFontEngine = scaledEngine;
|
feCache.prevScaledFontEngine = scaledEngine;
|
||||||
|
@ -348,7 +348,7 @@ static inline void qt_mac_waitForMoreEvents(NSString *runLoopMode = NSDefaultRun
|
|||||||
bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
|
bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
|
||||||
{
|
{
|
||||||
Q_D(QCocoaEventDispatcher);
|
Q_D(QCocoaEventDispatcher);
|
||||||
d->interrupt = false;
|
QBoolBlocker interruptBlocker(d->interrupt, false);
|
||||||
|
|
||||||
bool interruptLater = false;
|
bool interruptLater = false;
|
||||||
QtCocoaInterruptDispatcher::cancelInterruptLater();
|
QtCocoaInterruptDispatcher::cancelInterruptLater();
|
||||||
|
@ -739,7 +739,10 @@ static bool _q_dontOverrideCtrlLMB = false;
|
|||||||
|
|
||||||
- (void)handleMouseEvent:(NSEvent *)theEvent
|
- (void)handleMouseEvent:(NSEvent *)theEvent
|
||||||
{
|
{
|
||||||
bool isTabletEvent = [self handleTabletEvent: theEvent];
|
// Tablet events may come in via the mouse event handlers,
|
||||||
|
// check if this is a valid tablet event first.
|
||||||
|
if ([self handleTabletEvent: theEvent])
|
||||||
|
return;
|
||||||
|
|
||||||
QPointF qtWindowPoint;
|
QPointF qtWindowPoint;
|
||||||
QPointF qtScreenPoint;
|
QPointF qtScreenPoint;
|
||||||
@ -768,8 +771,8 @@ static bool _q_dontOverrideCtrlLMB = false;
|
|||||||
nativeDrag->setLastMouseEvent(theEvent, self);
|
nativeDrag->setLastMouseEvent(theEvent, self);
|
||||||
|
|
||||||
Qt::KeyboardModifiers keyboardModifiers = [QNSView convertKeyModifiers:[theEvent modifierFlags]];
|
Qt::KeyboardModifiers keyboardModifiers = [QNSView convertKeyModifiers:[theEvent modifierFlags]];
|
||||||
QWindowSystemInterface::handleMouseEvent(targetView->m_window, timestamp, qtWindowPoint, qtScreenPoint, m_buttons, keyboardModifiers,
|
QWindowSystemInterface::handleMouseEvent(targetView->m_window, timestamp, qtWindowPoint, qtScreenPoint,
|
||||||
isTabletEvent ? Qt::MouseEventSynthesizedByQt : Qt::MouseEventNotSynthesized);
|
m_buttons, keyboardModifiers, Qt::MouseEventNotSynthesized);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)handleFrameStrutMouseEvent:(NSEvent *)theEvent
|
- (void)handleFrameStrutMouseEvent:(NSEvent *)theEvent
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
|
|
||||||
const char kImePlatformDataInputView[] = "inputView";
|
const char kImePlatformDataInputView[] = "inputView";
|
||||||
const char kImePlatformDataInputAccessoryView[] = "inputAccessoryView";
|
const char kImePlatformDataInputAccessoryView[] = "inputAccessoryView";
|
||||||
|
const char kImePlatformDataHideShortcutsBar[] = "hideShortcutsBar";
|
||||||
const char kImePlatformDataReturnKeyType[] = "returnKeyType";
|
const char kImePlatformDataReturnKeyType[] = "returnKeyType";
|
||||||
|
|
||||||
@class QIOSLocaleListener;
|
@class QIOSLocaleListener;
|
||||||
|
@ -521,6 +521,7 @@ bool QIOSMenu::eventFilter(QObject *obj, QEvent *event)
|
|||||||
QVariantMap imPlatformData = queryEvent->value(Qt::ImPlatformData).toMap();
|
QVariantMap imPlatformData = queryEvent->value(Qt::ImPlatformData).toMap();
|
||||||
imPlatformData.insert(kImePlatformDataInputView, QVariant::fromValue(static_cast<void *>(m_pickerView)));
|
imPlatformData.insert(kImePlatformDataInputView, QVariant::fromValue(static_cast<void *>(m_pickerView)));
|
||||||
imPlatformData.insert(kImePlatformDataInputAccessoryView, QVariant::fromValue(static_cast<void *>(m_pickerView.toolbar)));
|
imPlatformData.insert(kImePlatformDataInputAccessoryView, QVariant::fromValue(static_cast<void *>(m_pickerView.toolbar)));
|
||||||
|
imPlatformData.insert(kImePlatformDataHideShortcutsBar, true);
|
||||||
queryEvent->setValue(Qt::ImPlatformData, imPlatformData);
|
queryEvent->setValue(Qt::ImPlatformData, imPlatformData);
|
||||||
queryEvent->setValue(Qt::ImEnabled, true);
|
queryEvent->setValue(Qt::ImEnabled, true);
|
||||||
|
|
||||||
|
@ -236,6 +236,17 @@
|
|||||||
self.inputView = [[[WrapperView alloc] initWithView:inputView] autorelease];
|
self.inputView = [[[WrapperView alloc] initWithView:inputView] autorelease];
|
||||||
if (UIView *accessoryView = static_cast<UIView *>(platformData.value(kImePlatformDataInputAccessoryView).value<void *>()))
|
if (UIView *accessoryView = static_cast<UIView *>(platformData.value(kImePlatformDataInputAccessoryView).value<void *>()))
|
||||||
self.inputAccessoryView = [[[WrapperView alloc] initWithView:accessoryView] autorelease];
|
self.inputAccessoryView = [[[WrapperView alloc] initWithView:accessoryView] autorelease];
|
||||||
|
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_9_0) {
|
||||||
|
if (platformData.value(kImePlatformDataHideShortcutsBar).toBool()) {
|
||||||
|
// According to the docs, leadingBarButtonGroups/trailingBarButtonGroups should be set to nil to hide the shortcuts bar.
|
||||||
|
// However, starting with iOS 10, the API has been surrounded with NS_ASSUME_NONNULL, which contradicts this and causes
|
||||||
|
// compiler warnings. And assigning just an empty array causes layout asserts. Hence, we assign empty button groups instead.
|
||||||
|
UIBarButtonItemGroup *leading = [[[UIBarButtonItemGroup alloc] initWithBarButtonItems:@[] representativeItem:nil] autorelease];
|
||||||
|
UIBarButtonItemGroup *trailing = [[[UIBarButtonItemGroup alloc] initWithBarButtonItems:@[] representativeItem:nil] autorelease];
|
||||||
|
self.inputAssistantItem.leadingBarButtonGroups = @[leading];
|
||||||
|
self.inputAssistantItem.trailingBarButtonGroups = @[trailing];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.undoManager.groupsByEvent = NO;
|
self.undoManager.groupsByEvent = NO;
|
||||||
[self rebuildUndoStack];
|
[self rebuildUndoStack];
|
||||||
|
@ -275,8 +275,6 @@ QXcbClipboard::QXcbClipboard(QXcbConnection *c)
|
|||||||
{
|
{
|
||||||
Q_ASSERT(QClipboard::Clipboard == 0);
|
Q_ASSERT(QClipboard::Clipboard == 0);
|
||||||
Q_ASSERT(QClipboard::Selection == 1);
|
Q_ASSERT(QClipboard::Selection == 1);
|
||||||
m_xClipboard[QClipboard::Clipboard] = 0;
|
|
||||||
m_xClipboard[QClipboard::Selection] = 0;
|
|
||||||
m_clientClipboard[QClipboard::Clipboard] = 0;
|
m_clientClipboard[QClipboard::Clipboard] = 0;
|
||||||
m_clientClipboard[QClipboard::Selection] = 0;
|
m_clientClipboard[QClipboard::Selection] = 0;
|
||||||
m_timestamp[QClipboard::Clipboard] = XCB_CURRENT_TIME;
|
m_timestamp[QClipboard::Clipboard] = XCB_CURRENT_TIME;
|
||||||
@ -329,6 +327,10 @@ QXcbClipboard::~QXcbClipboard()
|
|||||||
}
|
}
|
||||||
free(reply);
|
free(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_clientClipboard[QClipboard::Clipboard] != m_clientClipboard[QClipboard::Selection])
|
||||||
|
delete m_clientClipboard[QClipboard::Clipboard];
|
||||||
|
delete m_clientClipboard[QClipboard::Selection];
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbClipboard::incrTransactionPeeker(xcb_generic_event_t *ge, bool &accepted)
|
void QXcbClipboard::incrTransactionPeeker(xcb_generic_event_t *ge, bool &accepted)
|
||||||
@ -378,9 +380,9 @@ QMimeData * QXcbClipboard::mimeData(QClipboard::Mode mode)
|
|||||||
return m_clientClipboard[mode];
|
return m_clientClipboard[mode];
|
||||||
} else {
|
} else {
|
||||||
if (!m_xClipboard[mode])
|
if (!m_xClipboard[mode])
|
||||||
m_xClipboard[mode] = new QXcbClipboardMime(mode, this);
|
m_xClipboard[mode].reset(new QXcbClipboardMime(mode, this));
|
||||||
|
|
||||||
return m_xClipboard[mode];
|
return m_xClipboard[mode].data();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -730,7 +732,7 @@ void QXcbClipboard::handleXFixesSelectionRequest(xcb_xfixes_selection_notify_eve
|
|||||||
// here we care only about the xfixes events that come from non Qt processes
|
// here we care only about the xfixes events that come from non Qt processes
|
||||||
if (event->owner != XCB_NONE && event->owner != owner()) {
|
if (event->owner != XCB_NONE && event->owner != owner()) {
|
||||||
if (!m_xClipboard[mode]) {
|
if (!m_xClipboard[mode]) {
|
||||||
m_xClipboard[mode] = new QXcbClipboardMime(mode, this);
|
m_xClipboard[mode].reset(new QXcbClipboardMime(mode, this));
|
||||||
} else {
|
} else {
|
||||||
m_xClipboard[mode]->reset();
|
m_xClipboard[mode]->reset();
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ private:
|
|||||||
QClipboard::Mode modeForAtom(xcb_atom_t atom) const;
|
QClipboard::Mode modeForAtom(xcb_atom_t atom) const;
|
||||||
|
|
||||||
// Selection and Clipboard
|
// Selection and Clipboard
|
||||||
QXcbClipboardMime *m_xClipboard[2];
|
QScopedPointer<QXcbClipboardMime> m_xClipboard[2];
|
||||||
QMimeData *m_clientClipboard[2];
|
QMimeData *m_clientClipboard[2];
|
||||||
xcb_timestamp_t m_timestamp[2];
|
xcb_timestamp_t m_timestamp[2];
|
||||||
|
|
||||||
|
@ -359,17 +359,27 @@ void QXcbCursor::changeCursor(QCursor *cursor, QWindow *widget)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
xcb_cursor_t c = XCB_CURSOR_NONE;
|
xcb_cursor_t c = XCB_CURSOR_NONE;
|
||||||
|
bool isBitmapCursor = false;
|
||||||
|
|
||||||
if (cursor) {
|
if (cursor) {
|
||||||
const QXcbCursorCacheKey key(*cursor);
|
const Qt::CursorShape shape = cursor->shape();
|
||||||
CursorHash::iterator it = m_cursorHash.find(key);
|
isBitmapCursor = shape == Qt::BitmapCursor;
|
||||||
if (it == m_cursorHash.end()) {
|
|
||||||
const Qt::CursorShape shape = cursor->shape();
|
if (!isBitmapCursor) {
|
||||||
it = m_cursorHash.insert(key, shape == Qt::BitmapCursor ? createBitmapCursor(cursor) : createFontCursor(shape));
|
const QXcbCursorCacheKey key(*cursor);
|
||||||
|
CursorHash::iterator it = m_cursorHash.find(key);
|
||||||
|
if (it == m_cursorHash.end()) {
|
||||||
|
it = m_cursorHash.insert(key, createFontCursor(shape));
|
||||||
|
}
|
||||||
|
c = it.value();
|
||||||
|
} else {
|
||||||
|
// Do not cache bitmap cursors, as otherwise they have unclear
|
||||||
|
// lifetime (we effectively leak xcb_cursor_t).
|
||||||
|
c = createBitmapCursor(cursor);
|
||||||
}
|
}
|
||||||
c = it.value();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
w->setCursor(c);
|
w->setCursor(c, isBitmapCursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cursorIdForShape(int cshape)
|
static int cursorIdForShape(int cshape)
|
||||||
|
@ -326,6 +326,7 @@ QXcbWindow::QXcbWindow(QWindow *window)
|
|||||||
, m_lastWindowStateEvent(-1)
|
, m_lastWindowStateEvent(-1)
|
||||||
, m_syncState(NoSyncNeeded)
|
, m_syncState(NoSyncNeeded)
|
||||||
, m_pendingSyncRequest(0)
|
, m_pendingSyncRequest(0)
|
||||||
|
, m_currentBitmapCursor(XCB_CURSOR_NONE)
|
||||||
{
|
{
|
||||||
setConnection(xcbScreen()->connection());
|
setConnection(xcbScreen()->connection());
|
||||||
}
|
}
|
||||||
@ -600,6 +601,9 @@ void QXcbWindow::create()
|
|||||||
|
|
||||||
QXcbWindow::~QXcbWindow()
|
QXcbWindow::~QXcbWindow()
|
||||||
{
|
{
|
||||||
|
if (m_currentBitmapCursor != XCB_CURSOR_NONE) {
|
||||||
|
xcb_free_cursor(xcb_connection(), m_currentBitmapCursor);
|
||||||
|
}
|
||||||
if (window()->type() != Qt::ForeignWindow)
|
if (window()->type() != Qt::ForeignWindow)
|
||||||
destroy();
|
destroy();
|
||||||
else {
|
else {
|
||||||
@ -2679,10 +2683,22 @@ bool QXcbWindow::setMouseGrabEnabled(bool grab)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbWindow::setCursor(xcb_cursor_t cursor)
|
void QXcbWindow::setCursor(xcb_cursor_t cursor, bool isBitmapCursor)
|
||||||
{
|
{
|
||||||
xcb_change_window_attributes(xcb_connection(), m_window, XCB_CW_CURSOR, &cursor);
|
xcb_connection_t *conn = xcb_connection();
|
||||||
xcb_flush(xcb_connection());
|
|
||||||
|
xcb_change_window_attributes(conn, m_window, XCB_CW_CURSOR, &cursor);
|
||||||
|
xcb_flush(conn);
|
||||||
|
|
||||||
|
if (m_currentBitmapCursor != XCB_CURSOR_NONE) {
|
||||||
|
xcb_free_cursor(conn, m_currentBitmapCursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isBitmapCursor) {
|
||||||
|
m_currentBitmapCursor = cursor;
|
||||||
|
} else {
|
||||||
|
m_currentBitmapCursor = XCB_CURSOR_NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QXcbWindow::windowEvent(QEvent *event)
|
void QXcbWindow::windowEvent(QEvent *event)
|
||||||
|
@ -103,7 +103,7 @@ public:
|
|||||||
bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE;
|
bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE;
|
||||||
bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
|
bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
void setCursor(xcb_cursor_t cursor);
|
void setCursor(xcb_cursor_t cursor, bool isBitmapCursor);
|
||||||
|
|
||||||
QSurfaceFormat format() const Q_DECL_OVERRIDE;
|
QSurfaceFormat format() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
@ -272,6 +272,7 @@ protected:
|
|||||||
SyncState m_syncState;
|
SyncState m_syncState;
|
||||||
|
|
||||||
QXcbSyncWindowRequest *m_pendingSyncRequest;
|
QXcbSyncWindowRequest *m_pendingSyncRequest;
|
||||||
|
xcb_cursor_t m_currentBitmapCursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -94,7 +94,7 @@ QString QSqlRecordPrivate::createField(int index, const QString &prefix) const
|
|||||||
view within the database). QSqlRecord supports adding and
|
view within the database). QSqlRecord supports adding and
|
||||||
removing fields as well as setting and retrieving field values.
|
removing fields as well as setting and retrieving field values.
|
||||||
|
|
||||||
The values of a record's fields' can be set by name or position
|
The values of a record's fields can be set by name or position
|
||||||
with setValue(); if you want to set a field to null use
|
with setValue(); if you want to set a field to null use
|
||||||
setNull(). To find the position of a field by name use indexOf(),
|
setNull(). To find the position of a field by name use indexOf(),
|
||||||
and to find the name of a field at a particular position use
|
and to find the name of a field at a particular position use
|
||||||
|
@ -130,57 +130,57 @@ do {\
|
|||||||
#endif // !QT_NO_EXCEPTIONS
|
#endif // !QT_NO_EXCEPTIONS
|
||||||
|
|
||||||
|
|
||||||
#define QTRY_LOOP_IMPL(__expr, __timeoutValue, __step) \
|
#define QTRY_LOOP_IMPL(expr, timeoutValue, step) \
|
||||||
if (!(__expr)) { \
|
if (!(expr)) { \
|
||||||
QTest::qWait(0); \
|
QTest::qWait(0); \
|
||||||
} \
|
} \
|
||||||
int __i = 0; \
|
int qt_test_i = 0; \
|
||||||
for (; __i < __timeoutValue && !(__expr); __i += __step) { \
|
for (; qt_test_i < timeoutValue && !(expr); qt_test_i += step) { \
|
||||||
QTest::qWait(__step); \
|
QTest::qWait(step); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define QTRY_TIMEOUT_DEBUG_IMPL(__expr, __timeoutValue, __step)\
|
#define QTRY_TIMEOUT_DEBUG_IMPL(expr, timeoutValue, step)\
|
||||||
if (!(__expr)) { \
|
if (!(expr)) { \
|
||||||
QTRY_LOOP_IMPL((__expr), (2 * __timeoutValue), __step);\
|
QTRY_LOOP_IMPL((expr), (2 * timeoutValue), step);\
|
||||||
if (__expr) { \
|
if (expr) { \
|
||||||
QString msg = QString::fromUtf8("QTestLib: This test case check (\"%1\") failed because the requested timeout (%2 ms) was too short, %3 ms would have been sufficient this time."); \
|
QString msg = QString::fromUtf8("QTestLib: This test case check (\"%1\") failed because the requested timeout (%2 ms) was too short, %3 ms would have been sufficient this time."); \
|
||||||
msg = msg.arg(QString::fromUtf8(#__expr)).arg(__timeoutValue).arg(__timeoutValue + __i); \
|
msg = msg.arg(QString::fromUtf8(#expr)).arg(timeoutValue).arg(timeoutValue + qt_test_i); \
|
||||||
QFAIL(qPrintable(msg)); \
|
QFAIL(qPrintable(msg)); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define QTRY_IMPL(__expr, __timeout)\
|
#define QTRY_IMPL(expr, timeout)\
|
||||||
const int __step = 50; \
|
const int qt_test_step = 50; \
|
||||||
const int __timeoutValue = __timeout; \
|
const int qt_test_timeoutValue = timeout; \
|
||||||
QTRY_LOOP_IMPL((__expr), __timeoutValue, __step); \
|
QTRY_LOOP_IMPL((expr), qt_test_timeoutValue, qt_test_step); \
|
||||||
QTRY_TIMEOUT_DEBUG_IMPL((__expr), __timeoutValue, __step)\
|
QTRY_TIMEOUT_DEBUG_IMPL((expr), qt_test_timeoutValue, qt_test_step)\
|
||||||
|
|
||||||
// Will try to wait for the expression to become true while allowing event processing
|
// Will try to wait for the expression to become true while allowing event processing
|
||||||
#define QTRY_VERIFY_WITH_TIMEOUT(__expr, __timeout) \
|
#define QTRY_VERIFY_WITH_TIMEOUT(expr, timeout) \
|
||||||
do { \
|
do { \
|
||||||
QTRY_IMPL((__expr), __timeout);\
|
QTRY_IMPL((expr), timeout);\
|
||||||
QVERIFY(__expr); \
|
QVERIFY(expr); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define QTRY_VERIFY(__expr) QTRY_VERIFY_WITH_TIMEOUT((__expr), 5000)
|
#define QTRY_VERIFY(expr) QTRY_VERIFY_WITH_TIMEOUT((expr), 5000)
|
||||||
|
|
||||||
// Will try to wait for the expression to become true while allowing event processing
|
// Will try to wait for the expression to become true while allowing event processing
|
||||||
#define QTRY_VERIFY2_WITH_TIMEOUT(__expr, __messageExpression, __timeout) \
|
#define QTRY_VERIFY2_WITH_TIMEOUT(expr, messageExpression, timeout) \
|
||||||
do { \
|
do { \
|
||||||
QTRY_IMPL((__expr), __timeout);\
|
QTRY_IMPL((expr), timeout);\
|
||||||
QVERIFY2(__expr, __messageExpression); \
|
QVERIFY2(expr, messageExpression); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define QTRY_VERIFY2(__expr, __messageExpression) QTRY_VERIFY2_WITH_TIMEOUT((__expr), (__messageExpression), 5000)
|
#define QTRY_VERIFY2(expr, messageExpression) QTRY_VERIFY2_WITH_TIMEOUT((expr), (messageExpression), 5000)
|
||||||
|
|
||||||
// Will try to wait for the comparison to become successful while allowing event processing
|
// Will try to wait for the comparison to become successful while allowing event processing
|
||||||
#define QTRY_COMPARE_WITH_TIMEOUT(__expr, __expected, __timeout) \
|
#define QTRY_COMPARE_WITH_TIMEOUT(expr, expected, timeout) \
|
||||||
do { \
|
do { \
|
||||||
QTRY_IMPL(((__expr) == (__expected)), __timeout);\
|
QTRY_IMPL(((expr) == (expected)), timeout);\
|
||||||
QCOMPARE((__expr), __expected); \
|
QCOMPARE((expr), expected); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define QTRY_COMPARE(__expr, __expected) QTRY_COMPARE_WITH_TIMEOUT((__expr), __expected, 5000)
|
#define QTRY_COMPARE(expr, expected) QTRY_COMPARE_WITH_TIMEOUT((expr), expected, 5000)
|
||||||
|
|
||||||
#define QSKIP_INTERNAL(statement) \
|
#define QSKIP_INTERNAL(statement) \
|
||||||
do {\
|
do {\
|
||||||
|
@ -204,7 +204,10 @@ static QString classNameForInterface(const QString &interface, ClassType classTy
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection::Annotations &annotations, int paramId = -1, const char *direction = "Out")
|
// ### Qt6 Remove the two isSignal ifs
|
||||||
|
// They are only here because before signal arguments where previously searched as "In" so to maintain compatibility
|
||||||
|
// we first search for "Out" and if not found we search for "In"
|
||||||
|
static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection::Annotations &annotations, int paramId = -1, const char *direction = "Out", bool isSignal = false)
|
||||||
{
|
{
|
||||||
int type = QDBusMetaType::signatureToType(signature.toLatin1());
|
int type = QDBusMetaType::signatureToType(signature.toLatin1());
|
||||||
if (type == QVariant::Invalid) {
|
if (type == QVariant::Invalid) {
|
||||||
@ -221,9 +224,15 @@ static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection:
|
|||||||
qttype = annotations.value(oldAnnotationName);
|
qttype = annotations.value(oldAnnotationName);
|
||||||
|
|
||||||
if (qttype.isEmpty()) {
|
if (qttype.isEmpty()) {
|
||||||
fprintf(stderr, "Got unknown type `%s'\n", qPrintable(signature));
|
if (!isSignal || qstrcmp(direction, "Out") == 0) {
|
||||||
fprintf(stderr, "You should add <annotation name=\"%s\" value=\"<type>\"/> to the XML description\n",
|
fprintf(stderr, "Got unknown type `%s'\n", qPrintable(signature));
|
||||||
qPrintable(annotationName));
|
fprintf(stderr, "You should add <annotation name=\"%s\" value=\"<type>\"/> to the XML description\n",
|
||||||
|
qPrintable(annotationName));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSignal)
|
||||||
|
return qtTypeName(signature, annotations, paramId, "In", isSignal);
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,6 +332,23 @@ static void writeArgList(QTextStream &ts, const QStringList &argNames,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void writeSignalArgList(QTextStream &ts, const QStringList &argNames,
|
||||||
|
const QDBusIntrospection::Annotations &annotations,
|
||||||
|
const QDBusIntrospection::Arguments &outputArgs)
|
||||||
|
{
|
||||||
|
bool first = true;
|
||||||
|
int argPos = 0;
|
||||||
|
for (int i = 0; i < outputArgs.count(); ++i) {
|
||||||
|
const QDBusIntrospection::Argument &arg = outputArgs.at(i);
|
||||||
|
QString type = constRefArg(qtTypeName(arg.type, annotations, i, "Out", true /* isSignal */));
|
||||||
|
|
||||||
|
if (!first)
|
||||||
|
ts << ", ";
|
||||||
|
ts << type << argNames.at(argPos++);
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static QString propertyGetter(const QDBusIntrospection::Property &property)
|
static QString propertyGetter(const QDBusIntrospection::Property &property)
|
||||||
{
|
{
|
||||||
QString getter = property.annotations.value(QLatin1String("org.qtproject.QtDBus.PropertyGetter"));
|
QString getter = property.annotations.value(QLatin1String("org.qtproject.QtDBus.PropertyGetter"));
|
||||||
@ -637,7 +663,7 @@ static void writeProxy(const QString &filename, const QDBusIntrospection::Interf
|
|||||||
hs << "void " << signal.name << "(";
|
hs << "void " << signal.name << "(";
|
||||||
|
|
||||||
QStringList argNames = makeArgNames(signal.outputArgs);
|
QStringList argNames = makeArgNames(signal.outputArgs);
|
||||||
writeArgList(hs, argNames, signal.annotations, signal.outputArgs);
|
writeSignalArgList(hs, argNames, signal.annotations, signal.outputArgs);
|
||||||
|
|
||||||
hs << ");" << endl; // finished for header
|
hs << ");" << endl; // finished for header
|
||||||
}
|
}
|
||||||
@ -981,7 +1007,7 @@ static void writeAdaptor(const QString &filename, const QDBusIntrospection::Inte
|
|||||||
hs << "void " << signal.name << "(";
|
hs << "void " << signal.name << "(";
|
||||||
|
|
||||||
QStringList argNames = makeArgNames(signal.outputArgs);
|
QStringList argNames = makeArgNames(signal.outputArgs);
|
||||||
writeArgList(hs, argNames, signal.annotations, signal.outputArgs);
|
writeSignalArgList(hs, argNames, signal.annotations, signal.outputArgs);
|
||||||
|
|
||||||
hs << ");" << endl; // finished for header
|
hs << ");" << endl; // finished for header
|
||||||
}
|
}
|
||||||
|
@ -903,15 +903,13 @@ bool QFileSystemModel::setData(const QModelIndex &idx, const QVariant &value, in
|
|||||||
QFileSystemModelPrivate::QFileSystemNode *parentNode = indexNode->parent;
|
QFileSystemModelPrivate::QFileSystemNode *parentNode = indexNode->parent;
|
||||||
int visibleLocation = parentNode->visibleLocation(parentNode->children.value(indexNode->fileName)->fileName);
|
int visibleLocation = parentNode->visibleLocation(parentNode->children.value(indexNode->fileName)->fileName);
|
||||||
|
|
||||||
d->addNode(parentNode, newName,indexNode->info->fileInfo());
|
|
||||||
parentNode->visibleChildren.removeAt(visibleLocation);
|
parentNode->visibleChildren.removeAt(visibleLocation);
|
||||||
QFileSystemModelPrivate::QFileSystemNode * oldValue = parentNode->children.value(oldName);
|
QFileSystemModelPrivate::QFileSystemNode * oldValue = parentNode->children.value(oldName);
|
||||||
parentNode->children[newName] = oldValue;
|
parentNode->children[newName] = oldValue;
|
||||||
QFileInfo info(parentPath, newName);
|
|
||||||
oldValue->fileName = newName;
|
oldValue->fileName = newName;
|
||||||
oldValue->parent = parentNode;
|
oldValue->parent = parentNode;
|
||||||
#ifndef QT_NO_FILESYSTEMWATCHER
|
#ifndef QT_NO_FILESYSTEMWATCHER
|
||||||
oldValue->populate(d->fileInfoGatherer.getInfo(info));
|
oldValue->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName)));
|
||||||
#endif
|
#endif
|
||||||
oldValue->isVisible = true;
|
oldValue->isVisible = true;
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@
|
|||||||
\snippet shareddirmodel/main.cpp 0
|
\snippet shareddirmodel/main.cpp 0
|
||||||
|
|
||||||
The model is set up to use data from a certain file system. The call to
|
The model is set up to use data from a certain file system. The call to
|
||||||
\l{QFileSystemModel::}{setRootPath()} tell the model which drive on the
|
\l{QFileSystemModel::}{setRootPath()} tells the model which drive on the
|
||||||
file system to expose to the views.
|
file system to expose to the views.
|
||||||
|
|
||||||
We create two views so that we can examine the items held in the model in two
|
We create two views so that we can examine the items held in the model in two
|
||||||
@ -304,7 +304,7 @@
|
|||||||
signals and slots mechanism.
|
signals and slots mechanism.
|
||||||
|
|
||||||
This section describes some basic concepts that are central to the way
|
This section describes some basic concepts that are central to the way
|
||||||
item of data are accessed by other components via a model class. More
|
items of data are accessed by other components via a model class. More
|
||||||
advanced concepts are discussed in later sections.
|
advanced concepts are discussed in later sections.
|
||||||
|
|
||||||
\section3 Model indexes
|
\section3 Model indexes
|
||||||
@ -1869,7 +1869,7 @@
|
|||||||
\codeline
|
\codeline
|
||||||
\snippet qsortfilterproxymodel/main.cpp 1
|
\snippet qsortfilterproxymodel/main.cpp 1
|
||||||
|
|
||||||
Since proxy models are inherit from QAbstractItemModel, they can be connected to
|
Since proxy models inherit from QAbstractItemModel, they can be connected to
|
||||||
any kind of view, and can be shared between views. They can also be used to
|
any kind of view, and can be shared between views. They can also be used to
|
||||||
process the information obtained from other proxy models in a pipeline arrangement.
|
process the information obtained from other proxy models in a pipeline arrangement.
|
||||||
|
|
||||||
|
@ -306,6 +306,8 @@ void QLayoutItem::invalidate()
|
|||||||
/*!
|
/*!
|
||||||
If this item is a QLayout, it is returned as a QLayout; otherwise
|
If this item is a QLayout, it is returned as a QLayout; otherwise
|
||||||
0 is returned. This function provides type-safe casting.
|
0 is returned. This function provides type-safe casting.
|
||||||
|
|
||||||
|
\sa spacerItem(), widget()
|
||||||
*/
|
*/
|
||||||
QLayout * QLayoutItem::layout()
|
QLayout * QLayoutItem::layout()
|
||||||
{
|
{
|
||||||
@ -315,6 +317,8 @@ QLayout * QLayoutItem::layout()
|
|||||||
/*!
|
/*!
|
||||||
If this item is a QSpacerItem, it is returned as a QSpacerItem;
|
If this item is a QSpacerItem, it is returned as a QSpacerItem;
|
||||||
otherwise 0 is returned. This function provides type-safe casting.
|
otherwise 0 is returned. This function provides type-safe casting.
|
||||||
|
|
||||||
|
\sa layout(), widget()
|
||||||
*/
|
*/
|
||||||
QSpacerItem * QLayoutItem::spacerItem()
|
QSpacerItem * QLayoutItem::spacerItem()
|
||||||
{
|
{
|
||||||
@ -345,8 +349,14 @@ QSpacerItem * QSpacerItem::spacerItem()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
If this item is a QWidget, it is returned as a QWidget; otherwise
|
If this item manages a QWidget, returns that widget. Otherwise,
|
||||||
0 is returned. This function provides type-safe casting.
|
\c nullptr is returned.
|
||||||
|
|
||||||
|
\note While the functions layout() and spacerItem() perform casts, this
|
||||||
|
function returns another object: QLayout and QSpacerItem inherit QLayoutItem,
|
||||||
|
while QWidget does not.
|
||||||
|
|
||||||
|
\sa layout(), spacerItem()
|
||||||
*/
|
*/
|
||||||
QWidget * QLayoutItem::widget()
|
QWidget * QLayoutItem::widget()
|
||||||
{
|
{
|
||||||
|
@ -769,7 +769,6 @@ void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &c,
|
|||||||
\fn void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap)
|
\fn void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap)
|
||||||
\relates <qdrawutil.h>
|
\relates <qdrawutil.h>
|
||||||
\since 4.6
|
\since 4.6
|
||||||
\overload
|
|
||||||
|
|
||||||
\brief The qDrawBorderPixmap function is for drawing a pixmap into
|
\brief The qDrawBorderPixmap function is for drawing a pixmap into
|
||||||
the margins of a rectangle.
|
the margins of a rectangle.
|
||||||
|
3951
tests/auto/bic/data/QtConcurrent.5.6.0.linux-gcc-amd64.txt
Normal file
3951
tests/auto/bic/data/QtConcurrent.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4233
tests/auto/bic/data/QtConcurrent.5.7.0.linux-gcc-amd64.txt
Normal file
4233
tests/auto/bic/data/QtConcurrent.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
3899
tests/auto/bic/data/QtCore.5.6.0.linux-gcc-amd64.txt
Normal file
3899
tests/auto/bic/data/QtCore.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4181
tests/auto/bic/data/QtCore.5.7.0.linux-gcc-amd64.txt
Normal file
4181
tests/auto/bic/data/QtCore.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4238
tests/auto/bic/data/QtDBus.5.6.0.linux-gcc-amd64.txt
Normal file
4238
tests/auto/bic/data/QtDBus.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4520
tests/auto/bic/data/QtDBus.5.7.0.linux-gcc-amd64.txt
Normal file
4520
tests/auto/bic/data/QtDBus.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
7549
tests/auto/bic/data/QtGui.5.6.0.linux-gcc-amd64.txt
Normal file
7549
tests/auto/bic/data/QtGui.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
7981
tests/auto/bic/data/QtGui.5.7.0.linux-gcc-amd64.txt
Normal file
7981
tests/auto/bic/data/QtGui.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4721
tests/auto/bic/data/QtNetwork.5.6.0.linux-gcc-amd64.txt
Normal file
4721
tests/auto/bic/data/QtNetwork.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
5003
tests/auto/bic/data/QtNetwork.5.7.0.linux-gcc-amd64.txt
Normal file
5003
tests/auto/bic/data/QtNetwork.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
18563
tests/auto/bic/data/QtOpenGL.5.6.0.linux-gcc-amd64.txt
Normal file
18563
tests/auto/bic/data/QtOpenGL.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
18995
tests/auto/bic/data/QtOpenGL.5.7.0.linux-gcc-amd64.txt
Normal file
18995
tests/auto/bic/data/QtOpenGL.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
18814
tests/auto/bic/data/QtPrintSupport.5.6.0.linux-gcc-amd64.txt
Normal file
18814
tests/auto/bic/data/QtPrintSupport.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
19246
tests/auto/bic/data/QtPrintSupport.5.7.0.linux-gcc-amd64.txt
Normal file
19246
tests/auto/bic/data/QtPrintSupport.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4326
tests/auto/bic/data/QtSql.5.6.0.linux-gcc-amd64.txt
Normal file
4326
tests/auto/bic/data/QtSql.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4608
tests/auto/bic/data/QtSql.5.7.0.linux-gcc-amd64.txt
Normal file
4608
tests/auto/bic/data/QtSql.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
3966
tests/auto/bic/data/QtTest.5.6.0.linux-gcc-amd64.txt
Normal file
3966
tests/auto/bic/data/QtTest.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4248
tests/auto/bic/data/QtTest.5.7.0.linux-gcc-amd64.txt
Normal file
4248
tests/auto/bic/data/QtTest.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
18313
tests/auto/bic/data/QtWidgets.5.6.0.linux-gcc-amd64.txt
Normal file
18313
tests/auto/bic/data/QtWidgets.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
18745
tests/auto/bic/data/QtWidgets.5.7.0.linux-gcc-amd64.txt
Normal file
18745
tests/auto/bic/data/QtWidgets.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4339
tests/auto/bic/data/QtXml.5.6.0.linux-gcc-amd64.txt
Normal file
4339
tests/auto/bic/data/QtXml.5.6.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
4621
tests/auto/bic/data/QtXml.5.7.0.linux-gcc-amd64.txt
Normal file
4621
tests/auto/bic/data/QtXml.5.7.0.linux-gcc-amd64.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -135,6 +135,7 @@ private slots:
|
|||||||
void cursorInNonStopChars();
|
void cursorInNonStopChars();
|
||||||
void nbsp();
|
void nbsp();
|
||||||
void noModificationOfInputString();
|
void noModificationOfInputString();
|
||||||
|
void superscriptCrash_qtbug53911();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QFont testFont;
|
QFont testFont;
|
||||||
@ -2197,5 +2198,61 @@ void tst_QTextLayout::noModificationOfInputString()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QTextLayout::superscriptCrash_qtbug53911()
|
||||||
|
{
|
||||||
|
static int fontSizes = 64;
|
||||||
|
static QString layoutText = "THIS IS SOME EXAMPLE TEXT THIS IS SOME EXAMPLE TEXT";
|
||||||
|
|
||||||
|
QList<QTextLayout*> textLayouts;
|
||||||
|
for (int i = 0; i < fontSizes; ++i) {
|
||||||
|
for (int j = 0; j < 4; ++j) {
|
||||||
|
QTextLayout* newTextLayout = new QTextLayout();
|
||||||
|
newTextLayout->setText(layoutText);
|
||||||
|
QList<QTextLayout::FormatRange> formatRanges;
|
||||||
|
QTextLayout::FormatRange formatRange;
|
||||||
|
|
||||||
|
formatRange.format.setFont(QFont());
|
||||||
|
formatRange.format.setFontPointSize(i + 5);
|
||||||
|
|
||||||
|
switch (j) {
|
||||||
|
case 0:
|
||||||
|
formatRange.format.setFontWeight(QFont::Normal);
|
||||||
|
formatRange.format.setFontItalic(false);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
formatRange.format.setFontWeight(QFont::Bold);
|
||||||
|
formatRange.format.setFontItalic(false);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
formatRange.format.setFontWeight(QFont::Bold);
|
||||||
|
formatRange.format.setFontItalic(true);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
formatRange.format.setFontWeight(QFont::Normal);
|
||||||
|
formatRange.format.setFontItalic(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
formatRange.format.setVerticalAlignment( QTextCharFormat::AlignSuperScript);
|
||||||
|
|
||||||
|
formatRange.start = 0;
|
||||||
|
formatRange.length = layoutText.size();
|
||||||
|
formatRanges << formatRange;
|
||||||
|
newTextLayout->setAdditionalFormats(formatRanges);
|
||||||
|
|
||||||
|
textLayouts.push_front(newTextLayout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This loop would crash before fix for QTBUG-53911
|
||||||
|
foreach (QTextLayout *textLayout, textLayouts) {
|
||||||
|
textLayout->beginLayout();
|
||||||
|
while (textLayout->createLine().isValid());
|
||||||
|
textLayout->endLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
qDeleteAll(textLayouts);
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_MAIN(tst_QTextLayout)
|
QTEST_MAIN(tst_QTextLayout)
|
||||||
#include "tst_qtextlayout.moc"
|
#include "tst_qtextlayout.moc"
|
||||||
|
@ -4925,7 +4925,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp()
|
|||||||
const int maxRate = rate * 1024 * (100+allowedDeviation) / 100;
|
const int maxRate = rate * 1024 * (100+allowedDeviation) / 100;
|
||||||
qDebug() << minRate << "<="<< server.transferRate << "<=" << maxRate << '?';
|
qDebug() << minRate << "<="<< server.transferRate << "<=" << maxRate << '?';
|
||||||
// The test takes too long to run if sending enough data to overwhelm the
|
// The test takes too long to run if sending enough data to overwhelm the
|
||||||
// reciever's kernel buffers.
|
// receiver's kernel buffers.
|
||||||
//QEXPECT_FAIL("http+limited", "Limiting is broken right now, check QTBUG-15065", Continue);
|
//QEXPECT_FAIL("http+limited", "Limiting is broken right now, check QTBUG-15065", Continue);
|
||||||
//QEXPECT_FAIL("https+limited", "Limiting is broken right now, check QTBUG-15065", Continue);
|
//QEXPECT_FAIL("https+limited", "Limiting is broken right now, check QTBUG-15065", Continue);
|
||||||
//QVERIFY(server.transferRate >= minRate && server.transferRate <= maxRate);
|
//QVERIFY(server.transferRate >= minRate && server.transferRate <= maxRate);
|
||||||
|
@ -1357,6 +1357,7 @@ void tst_QFiledialog::widgetlessNativeDialog()
|
|||||||
QVERIFY(!model);
|
QVERIFY(!model);
|
||||||
QPushButton *button = fd.findChild<QPushButton*>();
|
QPushButton *button = fd.findChild<QPushButton*>();
|
||||||
QVERIFY(!button);
|
QVERIFY(!button);
|
||||||
|
QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QFiledialog::selectedFilesWithoutWidgets()
|
void tst_QFiledialog::selectedFilesWithoutWidgets()
|
||||||
|
@ -488,12 +488,12 @@ void tst_QStyleSheetStyle::widgetStyle()
|
|||||||
window1->setStyleSheet(""); // remove stylesheet
|
window1->setStyleSheet(""); // remove stylesheet
|
||||||
QCOMPARE(window1->style(), qApp->style()); // is this cool or what
|
QCOMPARE(window1->style(), qApp->style()); // is this cool or what
|
||||||
QCOMPARE(widget1->style(), qApp->style()); // annoying child follows...
|
QCOMPARE(widget1->style(), qApp->style()); // annoying child follows...
|
||||||
QStyle *wndStyle = QStyleFactory::create("Windows");
|
QScopedPointer<QStyle> wndStyle(QStyleFactory::create("Windows"));
|
||||||
window1->setStyle(wndStyle);
|
window1->setStyle(wndStyle.data());
|
||||||
QCOMPARE(window1->style()->metaObject()->className(), "QStyleSheetStyle"); // auto wraps it
|
QCOMPARE(window1->style()->metaObject()->className(), "QStyleSheetStyle"); // auto wraps it
|
||||||
QCOMPARE(widget1->style(), window1->style()); // and auto propagates to child
|
QCOMPARE(widget1->style(), window1->style()); // and auto propagates to child
|
||||||
qApp->setStyleSheet(""); // remove the app stylesheet
|
qApp->setStyleSheet(""); // remove the app stylesheet
|
||||||
QCOMPARE(window1->style(), wndStyle); // auto dewrap
|
QCOMPARE(window1->style(), wndStyle.data()); // auto dewrap
|
||||||
QCOMPARE(widget1->style(), qApp->style()); // and child state is restored
|
QCOMPARE(widget1->style(), qApp->style()); // and child state is restored
|
||||||
window1->setStyle(0); // let sanity prevail
|
window1->setStyle(0); // let sanity prevail
|
||||||
qApp->setStyle(0);
|
qApp->setStyle(0);
|
||||||
|
@ -1217,7 +1217,7 @@ void tst_QCompleter::task178797_activatedOnReturn()
|
|||||||
words << "foobar1" << "foobar2";
|
words << "foobar1" << "foobar2";
|
||||||
QLineEdit ledit;
|
QLineEdit ledit;
|
||||||
setFrameless(&ledit);
|
setFrameless(&ledit);
|
||||||
QCompleter *completer = new QCompleter(words);
|
QCompleter *completer = new QCompleter(words, &ledit);
|
||||||
ledit.setCompleter(completer);
|
ledit.setCompleter(completer);
|
||||||
QSignalSpy spy(completer, SIGNAL(activated(QString)));
|
QSignalSpy spy(completer, SIGNAL(activated(QString)));
|
||||||
QCOMPARE(spy.count(), 0);
|
QCOMPARE(spy.count(), 0);
|
||||||
@ -1324,7 +1324,7 @@ public:
|
|||||||
|
|
||||||
task250064_TextEdit()
|
task250064_TextEdit()
|
||||||
{
|
{
|
||||||
completer = new QCompleter;
|
completer = new QCompleter(this);
|
||||||
completer->setWidget(this);
|
completer->setWidget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,8 +377,8 @@ static QString glue(const QString &s1, const QString &s2)
|
|||||||
void tst_QUndoGroup::checkSignals()
|
void tst_QUndoGroup::checkSignals()
|
||||||
{
|
{
|
||||||
QUndoGroup group;
|
QUndoGroup group;
|
||||||
QAction *undo_action = group.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undo_action(group.createUndoAction(0, QString("foo")));
|
||||||
QAction *redo_action = group.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redo_action(group.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&group, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&group, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&group, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&group, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&group, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&group, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -590,9 +590,6 @@ void tst_QUndoGroup::checkSignals()
|
|||||||
true, // indexChanged
|
true, // indexChanged
|
||||||
true, // undoChanged
|
true, // undoChanged
|
||||||
true) // redoChanged
|
true) // redoChanged
|
||||||
|
|
||||||
delete undo_action;
|
|
||||||
delete redo_action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QUndoGroup::addStackAndDie()
|
void tst_QUndoGroup::addStackAndDie()
|
||||||
@ -629,8 +626,8 @@ void tst_QUndoGroup::commandTextFormat()
|
|||||||
qApp->installTranslator(&translator);
|
qApp->installTranslator(&translator);
|
||||||
|
|
||||||
QUndoGroup group;
|
QUndoGroup group;
|
||||||
QAction *undo_action = group.createUndoAction(0);
|
const QScopedPointer<QAction> undo_action(group.createUndoAction(0));
|
||||||
QAction *redo_action = group.createRedoAction(0);
|
const QScopedPointer<QAction> redo_action(group.createRedoAction(0));
|
||||||
|
|
||||||
QCOMPARE(undo_action->text(), QString("Undo-default-text"));
|
QCOMPARE(undo_action->text(), QString("Undo-default-text"));
|
||||||
QCOMPARE(redo_action->text(), QString("Redo-default-text"));
|
QCOMPARE(redo_action->text(), QString("Redo-default-text"));
|
||||||
|
@ -257,8 +257,8 @@ static QString glue(const QString &s1, const QString &s2)
|
|||||||
static void checkState(QSignalSpy &redoTextChangedSpy,
|
static void checkState(QSignalSpy &redoTextChangedSpy,
|
||||||
QSignalSpy &canRedoChangedSpy,
|
QSignalSpy &canRedoChangedSpy,
|
||||||
QSignalSpy &undoTextChangedSpy,
|
QSignalSpy &undoTextChangedSpy,
|
||||||
QAction *const redoAction,
|
const QScopedPointer<QAction> &redoAction,
|
||||||
QAction *const undoAction,
|
const QScopedPointer<QAction> &undoAction,
|
||||||
QSignalSpy &canUndoChangedSpy,
|
QSignalSpy &canUndoChangedSpy,
|
||||||
QSignalSpy &cleanChangedSpy,
|
QSignalSpy &cleanChangedSpy,
|
||||||
QSignalSpy &indexChangedSpy,
|
QSignalSpy &indexChangedSpy,
|
||||||
@ -327,8 +327,8 @@ static void checkState(QSignalSpy &redoTextChangedSpy,
|
|||||||
void tst_QUndoStack::undoRedo()
|
void tst_QUndoStack::undoRedo()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -688,8 +688,8 @@ void tst_QUndoStack::undoRedo()
|
|||||||
void tst_QUndoStack::setIndex()
|
void tst_QUndoStack::setIndex()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -952,8 +952,8 @@ void tst_QUndoStack::setIndex()
|
|||||||
void tst_QUndoStack::setClean()
|
void tst_QUndoStack::setClean()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -1205,8 +1205,8 @@ void tst_QUndoStack::setClean()
|
|||||||
void tst_QUndoStack::clear()
|
void tst_QUndoStack::clear()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(this, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(this, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -1403,8 +1403,8 @@ void tst_QUndoStack::clear()
|
|||||||
void tst_QUndoStack::childCommand()
|
void tst_QUndoStack::childCommand()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -1508,16 +1508,13 @@ void tst_QUndoStack::childCommand()
|
|||||||
true, // indexChanged
|
true, // indexChanged
|
||||||
true, // undoChanged
|
true, // undoChanged
|
||||||
true); // redoChanged
|
true); // redoChanged
|
||||||
|
|
||||||
delete undoAction;
|
|
||||||
delete redoAction;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QUndoStack::macroBeginEnd()
|
void tst_QUndoStack::macroBeginEnd()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -1978,16 +1975,13 @@ void tst_QUndoStack::macroBeginEnd()
|
|||||||
true, // indexChanged
|
true, // indexChanged
|
||||||
true, // undoChanged
|
true, // undoChanged
|
||||||
true); // redoChanged
|
true); // redoChanged
|
||||||
|
|
||||||
delete undoAction;
|
|
||||||
delete redoAction;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QUndoStack::compression()
|
void tst_QUndoStack::compression()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -2423,16 +2417,13 @@ void tst_QUndoStack::compression()
|
|||||||
true, // indexChanged
|
true, // indexChanged
|
||||||
true, // undoChanged
|
true, // undoChanged
|
||||||
true); // redoChanged
|
true); // redoChanged
|
||||||
|
|
||||||
delete undoAction;
|
|
||||||
delete redoAction;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QUndoStack::undoLimit()
|
void tst_QUndoStack::undoLimit()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undoAction = stack.createUndoAction(0, QString("foo"));
|
const QScopedPointer<QAction> undoAction(stack.createUndoAction(0, QString("foo")));
|
||||||
QAction *redoAction = stack.createRedoAction(0, QString("bar"));
|
const QScopedPointer<QAction> redoAction(stack.createRedoAction(0, QString("bar")));
|
||||||
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
QSignalSpy indexChangedSpy(&stack, SIGNAL(indexChanged(int)));
|
||||||
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
QSignalSpy cleanChangedSpy(&stack, SIGNAL(cleanChanged(bool)));
|
||||||
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
QSignalSpy canUndoChangedSpy(&stack, SIGNAL(canUndoChanged(bool)));
|
||||||
@ -2972,8 +2963,8 @@ void tst_QUndoStack::commandTextFormat()
|
|||||||
qApp->installTranslator(&translator);
|
qApp->installTranslator(&translator);
|
||||||
|
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undo_action = stack.createUndoAction(0);
|
const QScopedPointer<QAction> undo_action(stack.createUndoAction(0));
|
||||||
QAction *redo_action = stack.createRedoAction(0);
|
const QScopedPointer<QAction> redo_action(stack.createRedoAction(0));
|
||||||
|
|
||||||
QCOMPARE(undo_action->text(), QString("Undo-default-text"));
|
QCOMPARE(undo_action->text(), QString("Undo-default-text"));
|
||||||
QCOMPARE(redo_action->text(), QString("Redo-default-text"));
|
QCOMPARE(redo_action->text(), QString("Redo-default-text"));
|
||||||
@ -3000,8 +2991,8 @@ void tst_QUndoStack::commandTextFormat()
|
|||||||
void tst_QUndoStack::separateUndoText()
|
void tst_QUndoStack::separateUndoText()
|
||||||
{
|
{
|
||||||
QUndoStack stack;
|
QUndoStack stack;
|
||||||
QAction *undo_action = stack.createUndoAction(0);
|
const QScopedPointer<QAction> undo_action(stack.createUndoAction(0));
|
||||||
QAction *redo_action = stack.createRedoAction(0);
|
const QScopedPointer<QAction> redo_action(stack.createRedoAction(0));
|
||||||
|
|
||||||
QUndoCommand *command1 = new IdleCommand();
|
QUndoCommand *command1 = new IdleCommand();
|
||||||
QUndoCommand *command2 = new IdleCommand();
|
QUndoCommand *command2 = new IdleCommand();
|
||||||
|
@ -702,8 +702,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
QTest::addColumn<int>("wheelScrollLines");
|
QTest::addColumn<int>("wheelScrollLines");
|
||||||
QTest::addColumn<bool>("withModifiers"); // use keyboard modifiers while scrolling? (CTRL and SHIFT)
|
QTest::addColumn<bool>("withModifiers"); // use keyboard modifiers while scrolling? (CTRL and SHIFT)
|
||||||
QTest::addColumn<int>("deltaMultiple"); // multiples of WHEEL_DELTA
|
QTest::addColumn<int>("deltaMultiple"); // multiples of WHEEL_DELTA
|
||||||
QTest::addColumn<int>("sliderOrientation");
|
QTest::addColumn<Qt::Orientation>("sliderOrientation");
|
||||||
QTest::addColumn<int>("wheelOrientation");
|
QTest::addColumn<Qt::Orientation>("wheelOrientation");
|
||||||
QTest::addColumn<int>("expectedSliderPosition");
|
QTest::addColumn<int>("expectedSliderPosition");
|
||||||
QTest::addColumn<QPoint>("distanceFromBottomRight"); // mpointer's distance from bottom-right corner of widget
|
QTest::addColumn<QPoint>("distanceFromBottomRight"); // mpointer's distance from bottom-right corner of widget
|
||||||
|
|
||||||
@ -716,8 +716,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 20 // wheel scroll lines
|
<< 20 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< 1 // delta
|
<< 1 // delta
|
||||||
<< int(Qt::Vertical) // orientation of slider
|
<< Qt::Vertical // orientation of slider
|
||||||
<< int(Qt::Vertical) // orientation of wheel
|
<< Qt::Vertical // orientation of wheel
|
||||||
<< 20 // expected position after
|
<< 20 // expected position after
|
||||||
<< QPoint(0,0);
|
<< QPoint(0,0);
|
||||||
|
|
||||||
@ -730,8 +730,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 20 // wheel scroll lines
|
<< 20 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< 1 // delta
|
<< 1 // delta
|
||||||
<< int(Qt::Vertical) // orientation of slider
|
<< Qt::Vertical // orientation of slider
|
||||||
<< int(Qt::Vertical) // orientation of wheel
|
<< Qt::Vertical // orientation of wheel
|
||||||
#ifndef Q_OS_MAC
|
#ifndef Q_OS_MAC
|
||||||
<< 1 // expected position after
|
<< 1 // expected position after
|
||||||
#else
|
#else
|
||||||
@ -748,8 +748,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 20 // wheel scroll lines
|
<< 20 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< 1 // delta
|
<< 1 // delta
|
||||||
<< int(Qt::Horizontal) // orientation of slider
|
<< Qt::Horizontal // orientation of slider
|
||||||
<< int(Qt::Vertical) // orientation of wheel
|
<< Qt::Vertical // orientation of wheel
|
||||||
#ifndef Q_OS_MAC
|
#ifndef Q_OS_MAC
|
||||||
<< 1 // expected position after
|
<< 1 // expected position after
|
||||||
#else
|
#else
|
||||||
@ -767,8 +767,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 20 // wheel scroll lines
|
<< 20 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< 1 // delta
|
<< 1 // delta
|
||||||
<< int(Qt::Horizontal) // orientation of slider
|
<< Qt::Horizontal // orientation of slider
|
||||||
<< int(Qt::Vertical) // orientation of wheel
|
<< Qt::Vertical // orientation of wheel
|
||||||
#ifndef Q_OS_MAC
|
#ifndef Q_OS_MAC
|
||||||
<< 1 // expected position after
|
<< 1 // expected position after
|
||||||
#else
|
#else
|
||||||
@ -786,8 +786,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 20 // wheel scroll lines
|
<< 20 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< -1 // delta
|
<< -1 // delta
|
||||||
<< int(Qt::Horizontal) // orientation of slider
|
<< Qt::Horizontal // orientation of slider
|
||||||
<< int(Qt::Horizontal) // orientation of wheel
|
<< Qt::Horizontal // orientation of wheel
|
||||||
<< 30 // expected position after
|
<< 30 // expected position after
|
||||||
<< QPoint(1,1);
|
<< QPoint(1,1);
|
||||||
|
|
||||||
@ -800,8 +800,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 1 // wheel scroll lines
|
<< 1 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< -2 // delta
|
<< -2 // delta
|
||||||
<< int(Qt::Horizontal) // orientation of slider
|
<< Qt::Horizontal // orientation of slider
|
||||||
<< int(Qt::Horizontal) // orientation of wheel
|
<< Qt::Horizontal // orientation of wheel
|
||||||
<< 100 // expected position after
|
<< 100 // expected position after
|
||||||
<< QPoint(0,0);
|
<< QPoint(0,0);
|
||||||
|
|
||||||
@ -814,8 +814,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 1 // wheel scroll lines
|
<< 1 // wheel scroll lines
|
||||||
<< false // with modifiers
|
<< false // with modifiers
|
||||||
<< 2 // delta
|
<< 2 // delta
|
||||||
<< int(Qt::Horizontal) // orientation of slider
|
<< Qt::Horizontal // orientation of slider
|
||||||
<< int(Qt::Horizontal) // orientation of wheel
|
<< Qt::Horizontal // orientation of wheel
|
||||||
<< 0 // expected position after
|
<< 0 // expected position after
|
||||||
<< QPoint(0,0);
|
<< QPoint(0,0);
|
||||||
|
|
||||||
@ -828,8 +828,8 @@ void tst_QAbstractSlider::wheelEvent_data()
|
|||||||
<< 20 // wheel scroll lines
|
<< 20 // wheel scroll lines
|
||||||
<< true // with modifiers
|
<< true // with modifiers
|
||||||
<< -1 // delta
|
<< -1 // delta
|
||||||
<< int(Qt::Horizontal) // orientation of slider
|
<< Qt::Horizontal // orientation of slider
|
||||||
<< int(Qt::Horizontal) // orientation of wheel
|
<< Qt::Horizontal // orientation of wheel
|
||||||
<< 90 // expected position after
|
<< 90 // expected position after
|
||||||
<< QPoint(0,0);
|
<< QPoint(0,0);
|
||||||
|
|
||||||
@ -846,8 +846,8 @@ void tst_QAbstractSlider::wheelEvent()
|
|||||||
QFETCH(int,wheelScrollLines);
|
QFETCH(int,wheelScrollLines);
|
||||||
QFETCH(bool,withModifiers);
|
QFETCH(bool,withModifiers);
|
||||||
QFETCH(int,deltaMultiple);
|
QFETCH(int,deltaMultiple);
|
||||||
QFETCH(int,sliderOrientation);
|
QFETCH(Qt::Orientation, sliderOrientation);
|
||||||
QFETCH(int,wheelOrientation);
|
QFETCH(Qt::Orientation, wheelOrientation);
|
||||||
QFETCH(int,expectedSliderPosition);
|
QFETCH(int,expectedSliderPosition);
|
||||||
QFETCH(QPoint,distanceFromBottomRight);
|
QFETCH(QPoint,distanceFromBottomRight);
|
||||||
|
|
||||||
@ -855,18 +855,16 @@ void tst_QAbstractSlider::wheelEvent()
|
|||||||
QVERIFY(applicationInstance != 0);
|
QVERIFY(applicationInstance != 0);
|
||||||
QApplication::setWheelScrollLines(wheelScrollLines);
|
QApplication::setWheelScrollLines(wheelScrollLines);
|
||||||
|
|
||||||
Qt::Orientation orientation = *reinterpret_cast<Qt::Orientation*>(&sliderOrientation);
|
|
||||||
slider->setRange(minimum,maximum);
|
slider->setRange(minimum,maximum);
|
||||||
slider->setSliderPosition(initialSliderPosition);
|
slider->setSliderPosition(initialSliderPosition);
|
||||||
slider->setSingleStep(singleStep);
|
slider->setSingleStep(singleStep);
|
||||||
slider->setPageStep(pageStep);
|
slider->setPageStep(pageStep);
|
||||||
slider->setInvertedControls(invertedControls);
|
slider->setInvertedControls(invertedControls);
|
||||||
slider->setOrientation(orientation);
|
slider->setOrientation(sliderOrientation);
|
||||||
|
|
||||||
Qt::KeyboardModifier k = withModifiers ? Qt::ControlModifier : Qt::NoModifier;
|
Qt::KeyboardModifier k = withModifiers ? Qt::ControlModifier : Qt::NoModifier;
|
||||||
orientation = *reinterpret_cast<Qt::Orientation*>(&wheelOrientation);
|
|
||||||
QWheelEvent event(slider->rect().bottomRight() + distanceFromBottomRight, WHEEL_DELTA * deltaMultiple,
|
QWheelEvent event(slider->rect().bottomRight() + distanceFromBottomRight, WHEEL_DELTA * deltaMultiple,
|
||||||
Qt::NoButton, k, orientation);
|
Qt::NoButton, k, wheelOrientation);
|
||||||
QVERIFY(applicationInstance->sendEvent(slider,&event));
|
QVERIFY(applicationInstance->sendEvent(slider,&event));
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
QEXPECT_FAIL("Normal data page", "QTBUG-23679", Continue);
|
QEXPECT_FAIL("Normal data page", "QTBUG-23679", Continue);
|
||||||
@ -878,7 +876,7 @@ void tst_QAbstractSlider::wheelEvent()
|
|||||||
slider->setSliderPosition(initialSliderPosition);
|
slider->setSliderPosition(initialSliderPosition);
|
||||||
k = withModifiers ? Qt::ShiftModifier : Qt::NoModifier;
|
k = withModifiers ? Qt::ShiftModifier : Qt::NoModifier;
|
||||||
event = QWheelEvent(slider->rect().bottomRight() + distanceFromBottomRight, WHEEL_DELTA * deltaMultiple,
|
event = QWheelEvent(slider->rect().bottomRight() + distanceFromBottomRight, WHEEL_DELTA * deltaMultiple,
|
||||||
Qt::NoButton, k, orientation);
|
Qt::NoButton, k, wheelOrientation);
|
||||||
QSignalSpy spy1(slider, SIGNAL(actionTriggered(int)));
|
QSignalSpy spy1(slider, SIGNAL(actionTriggered(int)));
|
||||||
QSignalSpy spy2(slider, SIGNAL(valueChanged(int)));
|
QSignalSpy spy2(slider, SIGNAL(valueChanged(int)));
|
||||||
QVERIFY(applicationInstance->sendEvent(slider,&event));
|
QVERIFY(applicationInstance->sendEvent(slider,&event));
|
||||||
|
Loading…
Reference in New Issue
Block a user