Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: mkspecs/features/mac/default_pre.prf mkspecs/macx-ios-clang/features/resolve_config.prf qtbase.pro Change-Id: I65b5ebca4942a4f295bdd4ac1568e5c347333aea
This commit is contained in:
commit
3e949b75fd
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
|
@ -31,6 +31,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 = rez $$CONFIG
|
CONFIG = asset_catalogs 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
|
||||||
|
@ -37,7 +37,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)
|
||||||
|
@ -24,21 +24,6 @@ macx-xcode {
|
|||||||
ios_device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY
|
ios_device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY
|
||||||
QMAKE_MAC_XCODE_SETTINGS += ios_device_family
|
QMAKE_MAC_XCODE_SETTINGS += ios_device_family
|
||||||
|
|
||||||
# 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
|
||||||
|
@ -30,7 +30,11 @@ macx-xcode {
|
|||||||
QMAKE_MAC_XCODE_SETTINGS += library_suffix_simulator
|
QMAKE_MAC_XCODE_SETTINGS += library_suffix_simulator
|
||||||
CONFIG *= xcode_dynamic_library_suffix
|
CONFIG *= xcode_dynamic_library_suffix
|
||||||
} else {
|
} else {
|
||||||
addExclusiveBuilds(simulator, device)
|
# Switch the order to make sure that the first Makefile target is the right one
|
||||||
|
!contains(QT_CONFIG, simulator_and_device):contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \
|
||||||
|
addExclusiveBuilds(simulator, device)
|
||||||
|
else: \
|
||||||
|
addExclusiveBuilds(device, simulator)
|
||||||
}
|
}
|
||||||
|
|
||||||
equals(TEMPLATE, subdirs) {
|
equals(TEMPLATE, subdirs) {
|
||||||
|
@ -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
|
||||||
|
@ -409,7 +409,9 @@ QByteArray QMakeEvaluator::getCommandOutput(const QString &args) const
|
|||||||
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
|
||||||
|
|
||||||
@ -173,10 +173,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 \
|
||||||
|
@ -2069,6 +2069,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)
|
||||||
@ -2076,16 +2079,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;
|
||||||
|
@ -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";
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
@ -519,6 +519,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];
|
||||||
|
@ -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)
|
||||||
|
@ -322,6 +322,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());
|
||||||
}
|
}
|
||||||
@ -596,6 +597,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 {
|
||||||
@ -2665,10 +2669,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;
|
||||||
|
|
||||||
@ -271,6 +271,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
|
||||||
|
@ -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 {\
|
||||||
|
@ -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()
|
||||||
{
|
{
|
||||||
|
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
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
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
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
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
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
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
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
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
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
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
@ -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"
|
||||||
|
@ -490,12 +490,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);
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user