Merge remote-tracking branch 'origin/5.15' into 5.15.0
Change-Id: I9d9f9e0955144241fcee6148fc78c4501e2ffcea
This commit is contained in:
commit
a15c7260cc
@ -24,6 +24,22 @@
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
/*!
|
||||
\externalpage https://source.android.com/setup/start/build-numbers
|
||||
\title Android: Build Numbers
|
||||
*/
|
||||
/*!
|
||||
\externalpage https://developer.android.com/guide/topics/manifest/uses-feature-element
|
||||
\title Android: <uses-feature>
|
||||
*/
|
||||
/*!
|
||||
\externalpage https://developer.android.com/guide/topics/manifest/uses-permission-element
|
||||
\title Android: <uses-permission>
|
||||
*/
|
||||
/*!
|
||||
\externalpage https://developer.android.com/studio/publish/versioning#appversioning
|
||||
\title Android: App Versioning
|
||||
*/
|
||||
/*!
|
||||
\externalpage http://www.freedesktop.org/
|
||||
\title freedesktop.org
|
||||
|
@ -17,8 +17,16 @@ os_directory = $$(INTEGRITY_DIR)
|
||||
isEmpty(os_directory): \
|
||||
error("This qmakespec requires $INTEGRITY_DIR to be set")
|
||||
|
||||
QMAKE_CC = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared
|
||||
QMAKE_CXX = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared
|
||||
iy_build_target = $$(INTEGRITY_BUILD_TARGET)
|
||||
isEmpty(iy_build_target): \
|
||||
message("This qmakespec requires $INTEGRITY_BUILD_TARGET to be set [dbg|rel|chk|cov] for Integrity versions 11.7.6 and higher")
|
||||
|
||||
start_name = $$(INTEGRITY_DIR)/libs/$$(INTEGRITY_BSP)/$$(INTEGRITY_BUILD_TARGET)
|
||||
rtos_name= libs/$$(INTEGRITY_BSP)/$$(INTEGRITY_BUILD_TARGET)
|
||||
|
||||
QMAKE_CC = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared -startfile_dir=$$start_name --rtos_library_directory=$$rtos_name --rtos_library_directory=libs/arm64/$$iy_build_target
|
||||
QMAKE_CXX = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared -startfile_dir=$$start_name --rtos_library_directory=$$rtos_name --rtos_library_directory=libs/arm64/$$iy_build_target
|
||||
|
||||
QMAKE_LINK = $$QMAKE_CXX
|
||||
QMAKE_AR = $$QMAKE_CXX -archive -o
|
||||
|
||||
|
43
mkspecs/devices/integrity-armv8-SA8155P/qmake.conf
Normal file
43
mkspecs/devices/integrity-armv8-SA8155P/qmake.conf
Normal file
@ -0,0 +1,43 @@
|
||||
#
|
||||
# qmake configuration for INTEGRITY Qualcomm SA8155P ADP
|
||||
#
|
||||
|
||||
load(device_config)
|
||||
|
||||
include(../../common/ghs-integrity-armv8.conf)
|
||||
|
||||
QT_QPA_DEFAULT_PLATFORM = eglfs
|
||||
EGLFS_DEVICE_INTEGRATION = eglfs_openwfd
|
||||
|
||||
qc_multimedia_inc_directory = $$(QC_MULTIMEDIA_INC_DIR)
|
||||
isEmpty(qc_multimedia_inc_directory): \
|
||||
error("This makespec requires the environment variable QC_MULTIMEDIA_INC_DIR to be set.")
|
||||
|
||||
QMAKE_INCDIR += $$(QC_MULTIMEDIA_INC_DIR)
|
||||
|
||||
QMAKE_LIBS_EGL += -lESXEGL_Adreno -lESXGLESv2_Adreno -ladreno_utils -lGSLUser -lOSUser -lpanel -livfs -lposix -lpmem -ltzbsp -lpaged_alloc -lglnext-llvm -lopenwfd -lplanedef -llogger -lnet -lsocket -lrfs_client -lshm_client -lmmosalrfs -lmmosalfile -lOSAbstraction
|
||||
|
||||
QMAKE_LIBS_OPENGL_ES2 += $${QMAKE_LIBS_EGL}
|
||||
|
||||
QMAKE_CFLAGS += -DINTEGRITY
|
||||
QMAKE_CXXFLAGS += -DINTEGRITY
|
||||
|
||||
QMAKE_CFLAGS += -bigswitch
|
||||
QMAKE_CXXFLAGS += -bigswitch
|
||||
QMAKE_LFLAGS += -bigswitch
|
||||
|
||||
dirs = $$(GL_INC_DIR)
|
||||
isEmpty(dirs): \
|
||||
error("This makespec requires the environment variable GL_INC_DIR to be set.")
|
||||
|
||||
QMAKE_INCDIR_EGL = $$split(dirs, $$QMAKE_DIRLIST_SEP)
|
||||
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_EGL
|
||||
|
||||
dirs = $$(GL_LIB_DIR)
|
||||
isEmpty(dirs): \
|
||||
error("This makespec requires the environment variable GL_LIB_DIR to be set.")
|
||||
|
||||
QMAKE_LIBDIR_EGL = $$split(dirs, $$QMAKE_DIRLIST_SEP)
|
||||
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_EGL
|
||||
|
||||
load(qt_config)
|
45
mkspecs/devices/integrity-armv8-SA8155P/qplatformdefs.h
Normal file
45
mkspecs/devices/integrity-armv8-SA8155P/qplatformdefs.h
Normal file
@ -0,0 +1,45 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QPLATFORMDEFS_H
|
||||
#define QPLATFORMDEFS_H
|
||||
|
||||
#include "../../common/integrity/qplatformdefs.h"
|
||||
|
||||
#endif // QPLATFORMDEFS_H
|
@ -25,7 +25,8 @@ qtConfig(stack-protector-strong): CONFIG += stack_protector_strong
|
||||
contains(TEMPLATE, .*lib) {
|
||||
# module and plugins
|
||||
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
|
||||
|
||||
}
|
||||
contains(TEMPLATE, .*lib)|contains(TEMPLATE, aux) {
|
||||
!isEmpty(_QMAKE_SUPER_CACHE_): \
|
||||
rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
|
||||
else: \
|
||||
|
@ -36,7 +36,11 @@ win32 {
|
||||
plugin_target = $$QMAKE_PLUGIN_BUNDLE_NAME
|
||||
else: \
|
||||
plugin_target = $$TARGET
|
||||
QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${plugin_target}.plugin
|
||||
isEmpty(QMAKE_BUNDLE_EXTENSION): \
|
||||
plugin_ext = .plugin
|
||||
else: \
|
||||
plugin_ext = $$QMAKE_BUNDLE_EXTENSION
|
||||
QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${plugin_target}$${plugin_ext}
|
||||
!shallow_bundle: \
|
||||
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_BUNDLE}/Contents/MacOS/$${TARGET}
|
||||
else: \
|
||||
@ -46,7 +50,11 @@ win32 {
|
||||
framework_target = $$QMAKE_FRAMEWORK_BUNDLE_NAME
|
||||
else: \
|
||||
framework_target = $$TARGET
|
||||
QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${framework_target}.framework
|
||||
isEmpty(QMAKE_BUNDLE_EXTENSION): \
|
||||
framework_ext = .framework
|
||||
else: \
|
||||
framework_ext = $$QMAKE_BUNDLE_EXTENSION
|
||||
QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${framework_target}$${framework_ext}
|
||||
!shallow_bundle {
|
||||
TEMP_VERSION = $$section(VERSION, ., 0, 0)
|
||||
isEmpty(TEMP_VERSION):TEMP_VERSION = A
|
||||
|
@ -905,6 +905,187 @@
|
||||
to specify a list of libraries that each project needs to link against,
|
||||
and \c QMAKE_LIBS_X11 would be used to extend this list.
|
||||
|
||||
\target ANDROID_ABI
|
||||
\section1 ANDROID_ABI
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the Android target ABI. Valid values are: armeabi-v7a, arm64-v8a,
|
||||
x86, x86_64.
|
||||
|
||||
\target ANDROID_ABIS
|
||||
\section1 ANDROID_ABIS
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies a list of Android target ABIs. Valid values are: armeabi-v7a,
|
||||
arm64-v8a, x86, x86_64.
|
||||
|
||||
\badcode
|
||||
qmake ANDROID_ABIS="armeabi-v7a arm64-v8a"
|
||||
\endcode
|
||||
|
||||
\target ANDROID_API_VERSION
|
||||
\section1 ANDROID_API_VERSION
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the Android API level number. For more information, see
|
||||
\l{Android: Build Numbers}{Android Build Numbers}.
|
||||
|
||||
\target ANDROID_BUNDLED_JAR_DEPENDENCIES
|
||||
\section1 ANDROID_BUNDLED_JAR_DEPENDENCIES
|
||||
|
||||
\note This variable applies only to Android modules.
|
||||
|
||||
This is useful when writing a Qt module. It specifies a list of pre-bundled
|
||||
dependencies used by the module in a \c .jar format, for example:
|
||||
|
||||
\badcode
|
||||
ANDROID_BUNDLED_JAR_DEPENDENCIES += jar/QtAndroid.jar
|
||||
\endcode
|
||||
|
||||
\target ANDROID_DEPLOYMENT_DEPENDENCIES
|
||||
\section1 ANDROID_DEPLOYMENT_DEPENDENCIES
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
By default, \l androiddeployqt will detect the dependencies of your
|
||||
application. However, since run-time usage of plugins cannot be detected,
|
||||
there could be false positives, as your application might depend on any
|
||||
plugin that is a potential dependency. If you want to minimize the size of
|
||||
your \c APK, it's possible to override the automatic detection using the
|
||||
this variable. This should contain a list of all Qt files which need to be
|
||||
included, with paths relative to the Qt install root.
|
||||
|
||||
\note Only the Qt files specified with this variable are included. Failing
|
||||
to include all the correct files can result in crashes. It's also important
|
||||
to make sure the files are listed in the correct loading order. This variable
|
||||
provides a way to override the automatic detection entirely, so if a library
|
||||
is listed before its dependencies, it will fail to load on some devices.
|
||||
|
||||
\target ANDROID_DEPLOYMENT_SETTINGS_FILE
|
||||
\section1 ANDROID_DEPLOYMENT_SETTINGS_FILE
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the path to the \c {android-deployment-settings.json} file needed
|
||||
by \l androiddeployqt and \c androidtestrunner. This overrides the path to
|
||||
the settings file generated by qmake, thus you have to make sure to provide
|
||||
a valid settings file.
|
||||
|
||||
\target ANDROID_EXTRA_LIBS
|
||||
\section1 ANDROID_EXTRA_LIBS
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
A list of external libraries that will be copied into your application's
|
||||
\c libs folder and loaded on start-up. This can be used, for instance,
|
||||
to enable OpenSSL in your application. For more information, see
|
||||
\l{Adding OpenSSL Support for Android}.
|
||||
|
||||
\target ANDROID_EXTRA_PLUGINS
|
||||
\section1 ANDROID_EXTRA_PLUGINS
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies different resources that your application has to bundle but that
|
||||
cannot be delivered through the assets system, such as QML plugins. With this
|
||||
variable, \l androiddeployqt will make sure everything is packaged and
|
||||
deployed properly.
|
||||
|
||||
\target ANDROID_FEATURES
|
||||
\section1 ANDROID_FEATURES
|
||||
|
||||
\note This variable applies only to Android modules.
|
||||
|
||||
Specifies a module's features list:
|
||||
|
||||
\badcode
|
||||
ANDROID_FEATURES += android.hardware.location.gps
|
||||
\endcode
|
||||
|
||||
For more information, see \l{Android: <uses-feature>}{Android <uses-feature> Docs}.
|
||||
|
||||
\target ANDROID_LIB_DEPENDENCIES
|
||||
\section1 ANDROID_LIB_DEPENDENCIES
|
||||
|
||||
\note This variable applies only to Android modules.
|
||||
|
||||
This is useful when writing a Qt module. It specifies a list of pre-built
|
||||
dependencies used by the module, for example:
|
||||
|
||||
\badcode
|
||||
ANDROID_LIB_DEPENDENCIES += \
|
||||
plugins/libplugins_platforms_qtforandroid.so
|
||||
\endcode
|
||||
|
||||
\target ANDROID_MIN_SDK_VERSION
|
||||
\section1 ANDROID_MIN_SDK_VERSION
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the minimum Android API level for the project. By default, this
|
||||
variable is set to API level 21.
|
||||
|
||||
\target ANDROID_PACKAGE_SOURCE_DIR
|
||||
\section1 ANDROID_PACKAGE_SOURCE_DIR
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the path for a custom Android package template. The Android package
|
||||
template contains:
|
||||
\list
|
||||
\li AndroidManifest.xml file
|
||||
\li build.gradle file and other Gradle scripts
|
||||
\li res/values/libs.xml file
|
||||
\endlist
|
||||
|
||||
The path specified by this variable can contain custom Java classes under
|
||||
\c src directory. By default, the \l androiddeployqt tool copies the
|
||||
application template from the Qt for Android installation path into your
|
||||
project's build directory, then it copies the contents of the path specified
|
||||
by this variable on top of that, overwriting any existing files. For
|
||||
instance, you can make a custom \c {AndroidManifest.xml} for your application,
|
||||
then place this directly into the directory specified by this variable.
|
||||
|
||||
\target ANDROID_PERMISSIONS
|
||||
\section1 ANDROID_PERMISSIONS
|
||||
|
||||
\note This variable applies only to Android modules.
|
||||
|
||||
Specifies a module's permissions list:
|
||||
|
||||
\badcode
|
||||
ANDROID_PERMISSIONS += android.permission.ACCESS_FINE_LOCATION
|
||||
\endcode
|
||||
|
||||
For more information, see \l{Android: <uses-permission>}{Android <uses-permission> Docs}.
|
||||
|
||||
\target ANDROID_TARGET_SDK_VERSION
|
||||
\section1 ANDROID_TARGET_SDK_VERSION
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the target Android API level for the project. By default, this
|
||||
variable is set to API level 28.
|
||||
|
||||
\target ANDROID_VERSION_CODE
|
||||
\section1 ANDROID_VERSION_CODE
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the application's version number. For more information, see
|
||||
\l{Android: App Versioning}{Android App Versioning}.
|
||||
|
||||
\target ANDROID_VERSION_NAME
|
||||
\section1 ANDROID_VERSION_NAME
|
||||
|
||||
\note This variable applies only to Android targets.
|
||||
|
||||
Specifies the application's version in as a human readable string. For more
|
||||
information, see \l{Android: App Versioning}{Android App Versioning}.
|
||||
|
||||
\target CONFIG
|
||||
\section1 CONFIG
|
||||
|
||||
@ -1376,6 +1557,13 @@
|
||||
This variable is also used to specify which additional files will be
|
||||
deployed to embedded devices.
|
||||
|
||||
\target JAVA_HOME
|
||||
\section1 JAVA_HOME
|
||||
|
||||
\note This variable is useful only to Android targets.
|
||||
|
||||
Specifies the JDK/OpenJDK installation path used for building the project.
|
||||
|
||||
\target LEXIMPLS
|
||||
\section1 LEXIMPLS
|
||||
|
||||
|
30
src/3rdparty/sqlite/patches/0002-sqlite-Fix-CVE-2020-11655.patch
vendored
Normal file
30
src/3rdparty/sqlite/patches/0002-sqlite-Fix-CVE-2020-11655.patch
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
From fa3ea2350c0367aa7cfd796b31214e2dcf574360 Mon Sep 17 00:00:00 2001
|
||||
From: Andy Shaw <andy.shaw@qt.io>
|
||||
Date: Mon, 20 Apr 2020 10:43:29 +0200
|
||||
Subject: [PATCH] sqlite: Fix CVE-2020-11655
|
||||
|
||||
This was taken from 4a302b42c7bf5e11 in SQLite, ref:
|
||||
https://www3.sqlite.org/cgi/src/info/4a302b42c7bf5e11
|
||||
|
||||
[ChangeLog][QtSQL][sqlite] Fixed CVE-2020-11655
|
||||
|
||||
Change-Id: I5ead78d9ee63aa0f12f1c1014c79373728569f30
|
||||
---
|
||||
src/3rdparty/sqlite/sqlite3.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
|
||||
index dfe5323a59..054be43d95 100644
|
||||
--- a/src/3rdparty/sqlite/sqlite3.c
|
||||
+++ b/src/3rdparty/sqlite/sqlite3.c
|
||||
@@ -133226,6 +133226,7 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
|
||||
struct AggInfo_func *pFunc;
|
||||
int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
|
||||
if( nReg==0 ) return;
|
||||
+ if( pParse->nErr ) return;
|
||||
#ifdef SQLITE_DEBUG
|
||||
/* Verify that all AggInfo registers are within the range specified by
|
||||
** AggInfo.mnReg..AggInfo.mxReg */
|
||||
--
|
||||
2.24.2 (Apple Git-127)
|
||||
|
63
src/3rdparty/sqlite/patches/0003-sqlite-Fix-CVE-2020-11656.patch
vendored
Normal file
63
src/3rdparty/sqlite/patches/0003-sqlite-Fix-CVE-2020-11656.patch
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
From 99cdbed3bb5368ae2ec80d15635a2dd57961310c Mon Sep 17 00:00:00 2001
|
||||
From: Andy Shaw <andy.shaw@qt.io>
|
||||
Date: Mon, 20 Apr 2020 10:49:57 +0200
|
||||
Subject: [PATCH] sqlite: Fix CVE-2020-11656
|
||||
|
||||
This was taken from d09f8c3621d5f7f8 and b64674919f673602 in SQLite,
|
||||
ref: https://www3.sqlite.org/cgi/src/info/d09f8c3621d5f7f8
|
||||
https://www.sqlite.org/cgi/src/info/b64674919f673602
|
||||
|
||||
[ChangeLog][QtSQL][sqlite] Fixed CVE-2020-11656
|
||||
|
||||
Fixes: QTBUG-83652
|
||||
Change-Id: I99bd59dc10b753ff19822c902dff1fc339d330a8
|
||||
---
|
||||
src/3rdparty/sqlite/sqlite3.c | 18 +++++++++++++++++-
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
|
||||
index 054be43d95..6ff9ba42aa 100644
|
||||
--- a/src/3rdparty/sqlite/sqlite3.c
|
||||
+++ b/src/3rdparty/sqlite/sqlite3.c
|
||||
@@ -97945,7 +97945,7 @@ static int resolveOrderByTermToExprList(
|
||||
nc.nErr = 0;
|
||||
db = pParse->db;
|
||||
savedSuppErr = db->suppressErr;
|
||||
- db->suppressErr = 1;
|
||||
+ if( IN_RENAME_OBJECT==0 ) db->suppressErr = 1;
|
||||
rc = sqlite3ResolveExprNames(&nc, pE);
|
||||
db->suppressErr = savedSuppErr;
|
||||
if( rc ) return 0;
|
||||
@@ -105383,6 +105383,21 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+** Unmap all tokens in the IdList object passed as the second argument.
|
||||
+*/
|
||||
+static void unmapColumnIdlistNames(
|
||||
+ Parse *pParse,
|
||||
+ IdList *pIdList
|
||||
+){
|
||||
+ if( pIdList ){
|
||||
+ int ii;
|
||||
+ for(ii=0; ii<pIdList->nId; ii++){
|
||||
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pIdList->a[ii].zName);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
** Walker callback used by sqlite3RenameExprUnmap().
|
||||
*/
|
||||
@@ -105404,6 +105419,7 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){
|
||||
for(i=0; i<pSrc->nSrc; i++){
|
||||
sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
|
||||
if( sqlite3WalkExpr(pWalker, pSrc->a[i].pOn) ) return WRC_Abort;
|
||||
+ unmapColumnIdlistNames(pParse, pSrc->a[i].pUsing);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.24.2 (Apple Git-127)
|
||||
|
19
src/3rdparty/sqlite/sqlite3.c
vendored
19
src/3rdparty/sqlite/sqlite3.c
vendored
@ -97945,7 +97945,7 @@ static int resolveOrderByTermToExprList(
|
||||
nc.nErr = 0;
|
||||
db = pParse->db;
|
||||
savedSuppErr = db->suppressErr;
|
||||
db->suppressErr = 1;
|
||||
if( IN_RENAME_OBJECT==0 ) db->suppressErr = 1;
|
||||
rc = sqlite3ResolveExprNames(&nc, pE);
|
||||
db->suppressErr = savedSuppErr;
|
||||
if( rc ) return 0;
|
||||
@ -105383,6 +105383,21 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Unmap all tokens in the IdList object passed as the second argument.
|
||||
*/
|
||||
static void unmapColumnIdlistNames(
|
||||
Parse *pParse,
|
||||
IdList *pIdList
|
||||
){
|
||||
if( pIdList ){
|
||||
int ii;
|
||||
for(ii=0; ii<pIdList->nId; ii++){
|
||||
sqlite3RenameTokenRemap(pParse, 0, (void*)pIdList->a[ii].zName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Walker callback used by sqlite3RenameExprUnmap().
|
||||
*/
|
||||
@ -105404,6 +105419,7 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){
|
||||
for(i=0; i<pSrc->nSrc; i++){
|
||||
sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
|
||||
if( sqlite3WalkExpr(pWalker, pSrc->a[i].pOn) ) return WRC_Abort;
|
||||
unmapColumnIdlistNames(pParse, pSrc->a[i].pUsing);
|
||||
}
|
||||
}
|
||||
|
||||
@ -133226,6 +133242,7 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
|
||||
struct AggInfo_func *pFunc;
|
||||
int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
|
||||
if( nReg==0 ) return;
|
||||
if( pParse->nErr ) return;
|
||||
#ifdef SQLITE_DEBUG
|
||||
/* Verify that all AggInfo registers are within the range specified by
|
||||
** AggInfo.mnReg..AggInfo.mxReg */
|
||||
|
@ -403,20 +403,28 @@ public:
|
||||
|
||||
|
||||
//! [39]
|
||||
class QLibrary : public QObject
|
||||
class QItemSelectionModel : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
...
|
||||
|
||||
enum LoadHint {
|
||||
ResolveAllSymbolsHint = 0x01,
|
||||
ExportExternalSymbolsHint = 0x02,
|
||||
LoadArchiveMemberHint = 0x04
|
||||
enum SelectionFlag {
|
||||
NoUpdate = 0x0000,
|
||||
Clear = 0x0001,
|
||||
Select = 0x0002,
|
||||
Deselect = 0x0004,
|
||||
Toggle = 0x0008,
|
||||
Current = 0x0010,
|
||||
Rows = 0x0020,
|
||||
Columns = 0x0040,
|
||||
SelectCurrent = Select | Current,
|
||||
ToggleCurrent = Toggle | Current,
|
||||
ClearAndSelect = Clear | Select
|
||||
};
|
||||
Q_DECLARE_FLAGS(LoadHints, LoadHint)
|
||||
Q_FLAG(LoadHint)
|
||||
|
||||
Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
|
||||
Q_FLAG(SelectionFlags)
|
||||
...
|
||||
}
|
||||
//! [39]
|
||||
|
@ -291,7 +291,7 @@
|
||||
application on supported platforms, use of a session manager may be
|
||||
redundant for system services.
|
||||
This attribute must be set before QGuiApplication is constructed.
|
||||
This value was added in 5.13
|
||||
This value was added in 5.14
|
||||
|
||||
\value AA_DisableNativeVirtualKeyboard When this attribute is set, the native
|
||||
on-screen virtual keyboard will not be shown automatically when a
|
||||
|
@ -76,6 +76,8 @@
|
||||
The following operating systems have variants:
|
||||
LINUX - both Q_OS_LINUX and Q_OS_ANDROID are defined when building for Android
|
||||
- only Q_OS_LINUX is defined if building for other Linux systems
|
||||
MACOS - both Q_OS_BSD4 and Q_OS_IOS are defined when building for iOS
|
||||
- both Q_OS_BSD4 and Q_OS_MACOS are defined when building for macOS
|
||||
FREEBSD - Q_OS_FREEBSD is defined only when building for FreeBSD with a BSD userland
|
||||
- Q_OS_FREEBSD_KERNEL is always defined on FreeBSD, even if the userland is from GNU
|
||||
*/
|
||||
|
@ -253,7 +253,7 @@ QInotifyFileSystemWatcherEngine::QInotifyFileSystemWatcherEngine(int fd, QObject
|
||||
notifier(fd, QSocketNotifier::Read, this)
|
||||
{
|
||||
fcntl(inotifyFd, F_SETFD, FD_CLOEXEC);
|
||||
connect(¬ifier, SIGNAL(activated(int)), SLOT(readFromInotify()));
|
||||
connect(¬ifier, SIGNAL(activated(QSocketDescriptor)), SLOT(readFromInotify()));
|
||||
}
|
||||
|
||||
QInotifyFileSystemWatcherEngine::~QInotifyFileSystemWatcherEngine()
|
||||
|
@ -77,7 +77,7 @@ QKqueueFileSystemWatcherEngine::QKqueueFileSystemWatcherEngine(int kqfd, QObject
|
||||
kqfd(kqfd),
|
||||
notifier(kqfd, QSocketNotifier::Read, this)
|
||||
{
|
||||
connect(¬ifier, SIGNAL(activated(int)), SLOT(readFromKqueue()));
|
||||
connect(¬ifier, SIGNAL(activated(QSocketDescriptor)), SLOT(readFromKqueue()));
|
||||
|
||||
fcntl(kqfd, F_SETFD, FD_CLOEXEC);
|
||||
}
|
||||
|
@ -251,7 +251,7 @@ bool QProcessPrivate::openChannel(Channel &channel)
|
||||
channel.notifier = new QSocketNotifier(channel.pipe[1],
|
||||
QSocketNotifier::Write, q);
|
||||
channel.notifier->setEnabled(false);
|
||||
QObject::connect(channel.notifier, SIGNAL(activated(int)),
|
||||
QObject::connect(channel.notifier, SIGNAL(activated(QSocketDescriptor)),
|
||||
q, SLOT(_q_canWrite()));
|
||||
} else {
|
||||
channel.notifier = new QSocketNotifier(channel.pipe[0],
|
||||
@ -261,7 +261,7 @@ bool QProcessPrivate::openChannel(Channel &channel)
|
||||
receiver = SLOT(_q_canReadStandardOutput());
|
||||
else
|
||||
receiver = SLOT(_q_canReadStandardError());
|
||||
QObject::connect(channel.notifier, SIGNAL(activated(int)),
|
||||
QObject::connect(channel.notifier, SIGNAL(activated(QSocketDescriptor)),
|
||||
q, receiver);
|
||||
}
|
||||
}
|
||||
@ -380,7 +380,7 @@ void QProcessPrivate::startProcess()
|
||||
if (threadData.loadRelaxed()->hasEventDispatcher()) {
|
||||
startupSocketNotifier = new QSocketNotifier(childStartedPipe[0],
|
||||
QSocketNotifier::Read, q);
|
||||
QObject::connect(startupSocketNotifier, SIGNAL(activated(int)),
|
||||
QObject::connect(startupSocketNotifier, SIGNAL(activated(QSocketDescriptor)),
|
||||
q, SLOT(_q_startupNotification()));
|
||||
}
|
||||
|
||||
@ -531,7 +531,7 @@ void QProcessPrivate::startProcess()
|
||||
|
||||
if (threadData.loadRelaxed()->eventDispatcher.loadAcquire()) {
|
||||
deathNotifier = new QSocketNotifier(forkfd, QSocketNotifier::Read, q);
|
||||
QObject::connect(deathNotifier, SIGNAL(activated(int)),
|
||||
QObject::connect(deathNotifier, SIGNAL(activated(QSocketDescriptor)),
|
||||
q, SLOT(_q_processDied()));
|
||||
}
|
||||
}
|
||||
|
@ -2937,7 +2937,7 @@ void QSortFilterProxyModel::setFilterRole(int role)
|
||||
|
||||
/*!
|
||||
\since 5.15
|
||||
\fn void QSortFilterProxyModel::recursiveFilteringEnabledChanged(int recursiveFilteringEnabled)
|
||||
\fn void QSortFilterProxyModel::recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)
|
||||
\brief This signal is emitted when the recursive filter setting is changed
|
||||
to \a recursiveFilteringEnabled.
|
||||
*/
|
||||
|
@ -4493,16 +4493,15 @@ QDebug operator<<(QDebug dbg, const QObject *o)
|
||||
that values of a given enum can be used as flags and combined using the
|
||||
bitwise OR operator. For namespaces use \l Q_FLAG_NS() instead.
|
||||
|
||||
The macro must be placed after the enum declaration.
|
||||
The macro must be placed after the enum declaration. The declaration of
|
||||
the flags type is done using the \l Q_DECLARE_FLAGS() macro.
|
||||
|
||||
For example, in QLibrary, the \l{QLibrary::LoadHints}{LoadHints} flag is
|
||||
For example, in QItemSelectionModel, the
|
||||
\l{QItemSelectionModel::SelectionFlags}{SelectionFlags} flag is
|
||||
declared in the following way:
|
||||
|
||||
\snippet code/src_corelib_kernel_qobject.cpp 39
|
||||
|
||||
The declaration of the flags themselves is performed in the public section
|
||||
of the QLibrary class itself, using the \l Q_DECLARE_FLAGS() macro.
|
||||
|
||||
\note The Q_FLAG macro takes care of registering individual flag values
|
||||
with the meta-object system, so it is unnecessary to use Q_ENUM()
|
||||
in addition to this macro.
|
||||
|
@ -37,23 +37,32 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#define BUILDING_QSOCKETNOTIFIER
|
||||
#include "qsocketnotifier.h"
|
||||
#undef BUILDING_QSOCKETNOTIFIER
|
||||
|
||||
#include "qplatformdefs.h"
|
||||
|
||||
#include "qabstracteventdispatcher.h"
|
||||
#include "qcoreapplication.h"
|
||||
|
||||
#include "qmetatype.h"
|
||||
|
||||
#include "qobject_p.h"
|
||||
#include <private/qthread_p.h>
|
||||
|
||||
#include <QtCore/QLoggingCategory>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcSocketNotifierDeprecation)
|
||||
Q_LOGGING_CATEGORY(lcSocketNotifierDeprecation, "qt.core.socketnotifier_deprecation");
|
||||
|
||||
class QSocketNotifierPrivate : public QObjectPrivate
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QSocketNotifier)
|
||||
public:
|
||||
qintptr sockfd;
|
||||
QSocketDescriptor sockfd;
|
||||
QSocketNotifier::Type sntype;
|
||||
bool snenabled;
|
||||
};
|
||||
@ -143,13 +152,17 @@ QSocketNotifier::QSocketNotifier(qintptr socket, Type type, QObject *parent)
|
||||
: QObject(*new QSocketNotifierPrivate, parent)
|
||||
{
|
||||
Q_D(QSocketNotifier);
|
||||
|
||||
qRegisterMetaType<QSocketDescriptor>();
|
||||
qRegisterMetaType<QSocketNotifier::Type>();
|
||||
|
||||
d->sockfd = socket;
|
||||
d->sntype = type;
|
||||
d->snenabled = true;
|
||||
|
||||
auto thisThreadData = d->threadData.loadRelaxed();
|
||||
|
||||
if (socket < 0)
|
||||
if (!d->sockfd.isValid())
|
||||
qWarning("QSocketNotifier: Invalid socket specified");
|
||||
else if (!thisThreadData->hasEventDispatcher())
|
||||
qWarning("QSocketNotifier: Can only be used with threads started with QThread");
|
||||
@ -169,6 +182,11 @@ QSocketNotifier::~QSocketNotifier()
|
||||
|
||||
/*!
|
||||
\fn void QSocketNotifier::activated(int socket)
|
||||
\obsolete To avoid unintended truncation of the descriptor, use
|
||||
the QSocketDescriptor overload of this function. If you need
|
||||
compatibility with versions older than 5.15 you need to change
|
||||
the slot to accept qintptr if it currently accepts an int, and
|
||||
then connect using Functor-Based Connection.
|
||||
|
||||
This signal is emitted whenever the socket notifier is enabled and
|
||||
a socket event corresponding to its \l {Type}{type} occurs.
|
||||
@ -178,6 +196,18 @@ QSocketNotifier::~QSocketNotifier()
|
||||
\sa type(), socket()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)
|
||||
\since 5.15
|
||||
|
||||
This signal is emitted whenever the socket notifier is enabled and
|
||||
a socket event corresponding to its \a type occurs.
|
||||
|
||||
The socket identifier is passed in the \a socket parameter.
|
||||
|
||||
\sa type(), socket()
|
||||
*/
|
||||
|
||||
|
||||
/*!
|
||||
Returns the socket identifier specified to the constructor.
|
||||
@ -187,7 +217,7 @@ QSocketNotifier::~QSocketNotifier()
|
||||
qintptr QSocketNotifier::socket() const
|
||||
{
|
||||
Q_D(const QSocketNotifier);
|
||||
return d->sockfd;
|
||||
return qintptr(d->sockfd);
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -230,7 +260,7 @@ bool QSocketNotifier::isEnabled() const
|
||||
void QSocketNotifier::setEnabled(bool enable)
|
||||
{
|
||||
Q_D(QSocketNotifier);
|
||||
if (d->sockfd < 0)
|
||||
if (!d->sockfd.isValid())
|
||||
return;
|
||||
if (d->snenabled == enable) // no change
|
||||
return;
|
||||
@ -268,12 +298,61 @@ bool QSocketNotifier::event(QEvent *e)
|
||||
}
|
||||
QObject::event(e); // will activate filters
|
||||
if ((e->type() == QEvent::SockAct) || (e->type() == QEvent::SockClose)) {
|
||||
emit activated(d->sockfd, QPrivateSignal());
|
||||
QPointer<QSocketNotifier> alive(this);
|
||||
emit activated(d->sockfd, d->sntype, QPrivateSignal());
|
||||
// ### Qt7: Remove emission if the activated(int) signal is removed
|
||||
if (alive)
|
||||
emit activated(int(qintptr(d->sockfd)), QPrivateSignal());
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*!
|
||||
\class QSocketDescriptor
|
||||
\inmodule QtCore
|
||||
\brief A class which holds a native socket descriptor.
|
||||
\internal
|
||||
|
||||
\ingroup network
|
||||
\ingroup io
|
||||
|
||||
\since 5.15
|
||||
|
||||
QSocketDescriptor makes it easier to handle native socket
|
||||
descriptors in cross-platform code.
|
||||
|
||||
On Windows it holds a \c {Qt::HANDLE} and on Unix it holds an \c int.
|
||||
The class will implicitly convert between the class and the
|
||||
native descriptor type.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QSocketDescriptor::QSocketDescriptor(DescriptorType descriptor)
|
||||
\internal
|
||||
|
||||
Construct a QSocketDescriptor from a native socket \a descriptor.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QSocketDescriptor::QSocketDescriptor(qintptr descriptor)
|
||||
\internal
|
||||
|
||||
Construct a QSocketDescriptor from a native socket \a descriptor.
|
||||
|
||||
\note This constructor is only available on Windows.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn Qt::HANDLE QSocketDescriptor::winHandle() const noexcept
|
||||
\internal
|
||||
|
||||
Returns the internal handle.
|
||||
|
||||
\note This function is only available on Windows.
|
||||
*/
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#include "moc_qsocketnotifier.cpp"
|
||||
|
@ -44,6 +44,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QSocketDescriptor;
|
||||
class QSocketNotifierPrivate;
|
||||
class Q_CORE_EXPORT QSocketNotifier : public QObject
|
||||
{
|
||||
@ -65,7 +66,23 @@ public Q_SLOTS:
|
||||
void setEnabled(bool);
|
||||
|
||||
Q_SIGNALS:
|
||||
#if defined(Q_MOC_RUN)
|
||||
// Add default arguments during Q_MOC_RUN which makes moc generate "signals" which takes less
|
||||
// parameters, but we won't actually allow emitting without all 3. This lets users use the
|
||||
// string-based connect without specifying QSocketNotifier::Type as one of the parameters.
|
||||
void activated(QSocketDescriptor socket, QSocketNotifier::Type activationEvent = Read,
|
||||
QPrivateSignal = {});
|
||||
#else
|
||||
void activated(QSocketDescriptor socket, QSocketNotifier::Type activationEvent, QPrivateSignal);
|
||||
#endif
|
||||
|
||||
// ### Qt7: consider removing it.
|
||||
// The old signal is compiled internally, but hidden outside of this class.
|
||||
// This means the PMF-based connect(..) will automatically, on recompile, pick up the new
|
||||
// version while the old-style connect(..) can query the metaobject system for this version.
|
||||
#if defined(Q_MOC_RUN) || defined(BUILDING_QSOCKETNOTIFIER) || defined(Q_QDOC)
|
||||
void activated(int socket, QPrivateSignal);
|
||||
#endif
|
||||
|
||||
protected:
|
||||
bool event(QEvent *) override;
|
||||
@ -74,6 +91,50 @@ private:
|
||||
Q_DISABLE_COPY(QSocketNotifier)
|
||||
};
|
||||
|
||||
class QSocketDescriptor
|
||||
{
|
||||
public:
|
||||
#if defined(Q_OS_WIN) || defined(Q_QDOC)
|
||||
using DescriptorType = Qt::HANDLE;
|
||||
#define Q_DECL_CONSTEXPR_NOT_WIN
|
||||
#else
|
||||
using DescriptorType = int;
|
||||
#define Q_DECL_CONSTEXPR_NOT_WIN Q_DECL_CONSTEXPR
|
||||
#endif
|
||||
|
||||
/* implicit */ Q_DECL_CONSTEXPR_NOT_WIN
|
||||
QSocketDescriptor(DescriptorType descriptor = DescriptorType(-1)) noexcept : sockfd(descriptor)
|
||||
{
|
||||
}
|
||||
|
||||
#if defined(Q_OS_WIN) || defined(Q_QDOC)
|
||||
/* implicit */ QSocketDescriptor(qintptr desc) noexcept : sockfd(DescriptorType(desc)) {}
|
||||
operator qintptr() const noexcept { return qintptr(sockfd); }
|
||||
Q_DECL_CONSTEXPR Qt::HANDLE winHandle() const noexcept { return sockfd; }
|
||||
#endif
|
||||
Q_DECL_CONSTEXPR operator DescriptorType() const noexcept { return sockfd; }
|
||||
|
||||
Q_DECL_CONSTEXPR_NOT_WIN bool isValid() const noexcept { return *this != QSocketDescriptor(); }
|
||||
|
||||
friend Q_DECL_CONSTEXPR_NOT_WIN bool operator==(QSocketDescriptor lhs,
|
||||
QSocketDescriptor rhs) noexcept
|
||||
{
|
||||
return lhs.sockfd == rhs.sockfd;
|
||||
}
|
||||
friend Q_DECL_CONSTEXPR_NOT_WIN bool operator!=(QSocketDescriptor lhs,
|
||||
QSocketDescriptor rhs) noexcept
|
||||
{
|
||||
return lhs.sockfd != rhs.sockfd;
|
||||
}
|
||||
|
||||
#undef Q_DECL_CONSTEXPR_NOT_WIN
|
||||
|
||||
private:
|
||||
DescriptorType sockfd;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
Q_DECLARE_METATYPE(QSocketNotifier::Type)
|
||||
Q_DECLARE_METATYPE(QSocketDescriptor)
|
||||
|
||||
#endif // QSOCKETNOTIFIER_H
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2014 Drew Parsons <dparsons@emerall.com>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
@ -78,6 +78,26 @@ QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate()
|
||||
{
|
||||
}
|
||||
|
||||
static QJNIObjectPrivate getDisplayName(QJNIObjectPrivate zone, jint style, jboolean dst,
|
||||
const QLocale &locale)
|
||||
{
|
||||
QJNIObjectPrivate jlanguage
|
||||
= QJNIObjectPrivate::fromString(QLocale::languageToString(locale.language()));
|
||||
QJNIObjectPrivate jcountry
|
||||
= QJNIObjectPrivate::fromString(QLocale::countryToString(locale.country()));
|
||||
QJNIObjectPrivate
|
||||
jvariant = QJNIObjectPrivate::fromString(QLocale::scriptToString(locale.script()));
|
||||
QJNIObjectPrivate jlocale("java.util.Locale",
|
||||
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
|
||||
static_cast<jstring>(jlanguage.object()),
|
||||
static_cast<jstring>(jcountry.object()),
|
||||
static_cast<jstring>(jvariant.object()));
|
||||
|
||||
return zone.callObjectMethod("getDisplayName",
|
||||
"(ZILjava/util/Locale;)Ljava/lang/String;",
|
||||
dst, style, jlocale.object());
|
||||
}
|
||||
|
||||
void QAndroidTimeZonePrivate::init(const QByteArray &ianaId)
|
||||
{
|
||||
const QString iana = QString::fromUtf8(ianaId);
|
||||
@ -99,10 +119,13 @@ void QAndroidTimeZonePrivate::init(const QByteArray &ianaId)
|
||||
// the zone object we got and ignore the zone if not.
|
||||
// Try checking ianaId against getID(), getDisplayName():
|
||||
m_id = match(androidTimeZone.callObjectMethod("getID", "()Ljava/lang/String;"));
|
||||
for (int style = 1; m_id.isEmpty() && style-- > 0;) {
|
||||
for (int dst = 1; m_id.isEmpty() && dst-- > 0;) {
|
||||
m_id = match(androidTimeZone.callObjectMethod(
|
||||
"getDisplayName", "(ZI)Ljava/lang/String;", bool(dst), style));
|
||||
for (int style = 1; m_id.isEmpty() && style >= 0; --style) {
|
||||
for (int dst = 1; m_id.isEmpty() && dst >= 0; --dst) {
|
||||
for (int pick = 2; m_id.isEmpty() && pick >= 0; --pick) {
|
||||
QLocale locale = (pick == 0 ? QLocale::system()
|
||||
: pick == 1 ? QLocale() : QLocale::c());
|
||||
m_id = match(getDisplayName(androidTimeZone, style, jboolean(dst), locale));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -124,14 +147,7 @@ QString QAndroidTimeZonePrivate::displayName(QTimeZone::TimeType timeType, QTime
|
||||
// treat all NameTypes as java TimeZone style LONG (value 1), except of course QTimeZone::ShortName which is style SHORT (value 0);
|
||||
jint style = (nameType == QTimeZone::ShortName ? 0 : 1);
|
||||
|
||||
QJNIObjectPrivate jlanguage = QJNIObjectPrivate::fromString(QLocale::languageToString(locale.language()));
|
||||
QJNIObjectPrivate jcountry = QJNIObjectPrivate::fromString(QLocale::countryToString(locale.country()));
|
||||
QJNIObjectPrivate jvariant = QJNIObjectPrivate::fromString(QLocale::scriptToString(locale.script()));
|
||||
QJNIObjectPrivate jlocale("java.util.Locale", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", static_cast<jstring>(jlanguage.object()), static_cast<jstring>(jcountry.object()), static_cast<jstring>(jvariant.object()));
|
||||
|
||||
QJNIObjectPrivate jname = androidTimeZone.callObjectMethod("getDisplayName", "(ZILjava/util/Locale;)Ljava/lang/String;", daylightTime, style, jlocale.object());
|
||||
|
||||
name = jname.toString();
|
||||
name = getDisplayName(androidTimeZone, style, daylightTime, locale).toString();
|
||||
}
|
||||
|
||||
return name;
|
||||
|
@ -370,11 +370,18 @@ QDataStream &operator>>(QDataStream &stream, QLine &line)
|
||||
|
||||
/*!
|
||||
\enum QLineF::IntersectType
|
||||
\obsolete Use QLineF::IntersectionType instead
|
||||
\obsolete Use QLineF::IntersectionType instead.
|
||||
|
||||
\value NoIntersection
|
||||
Lines do not intersect.
|
||||
\value UnboundedIntersection
|
||||
Lines intersect, but not within the range defined by their lengths.
|
||||
\value BoundedIntersection
|
||||
Lnes intersect within the range defined by their lengths.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\enum QLineF::IntersectionType
|
||||
\typealias QLineF::IntersectionType
|
||||
|
||||
Describes the intersection between two lines.
|
||||
|
||||
|
@ -173,7 +173,7 @@ public:
|
||||
|
||||
public:
|
||||
// typedefs
|
||||
typedef QMultiHash<int, Watcher> WatcherHash;
|
||||
typedef QMultiHash<qintptr, Watcher> WatcherHash;
|
||||
typedef QHash<int, DBusTimeout *> TimeoutHash;
|
||||
typedef QVector<QDBusMessage> PendingMessageList;
|
||||
|
||||
@ -283,8 +283,8 @@ public slots:
|
||||
// public slots
|
||||
void setDispatchEnabled(bool enable);
|
||||
void doDispatch();
|
||||
void socketRead(int);
|
||||
void socketWrite(int);
|
||||
void socketRead(qintptr);
|
||||
void socketWrite(qintptr);
|
||||
void objectDestroyed(QObject *o);
|
||||
void relaySignal(QObject *obj, const QMetaObject *, int signalId, const QVariantList &args);
|
||||
bool addSignalHook(const QString &key, const SignalHook &hook);
|
||||
|
@ -1205,7 +1205,7 @@ void QDBusConnectionPrivate::doDispatch()
|
||||
}
|
||||
}
|
||||
|
||||
void QDBusConnectionPrivate::socketRead(int fd)
|
||||
void QDBusConnectionPrivate::socketRead(qintptr fd)
|
||||
{
|
||||
WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
while (it != watchers.constEnd() && it.key() == fd) {
|
||||
@ -1219,7 +1219,7 @@ void QDBusConnectionPrivate::socketRead(int fd)
|
||||
doDispatch();
|
||||
}
|
||||
|
||||
void QDBusConnectionPrivate::socketWrite(int fd)
|
||||
void QDBusConnectionPrivate::socketWrite(qintptr fd)
|
||||
{
|
||||
WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
while (it != watchers.constEnd() && it.key() == fd) {
|
||||
|
@ -367,6 +367,14 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
|
||||
const int ColumnLimit = 80;
|
||||
QTextBlockFormat blockFmt = block.blockFormat();
|
||||
bool missedBlankCodeBlockLine = false;
|
||||
const bool codeBlock = blockFmt.hasProperty(QTextFormat::BlockCodeFence) ||
|
||||
blockFmt.stringProperty(QTextFormat::BlockCodeLanguage).length() > 0;
|
||||
if (m_fencedCodeBlock && !codeBlock) {
|
||||
m_stream << m_linePrefix << QString(m_wrappedLineIndent, Space)
|
||||
<< m_codeBlockFence << Newline;
|
||||
m_fencedCodeBlock = false;
|
||||
m_codeBlockFence.clear();
|
||||
}
|
||||
if (block.textList()) { // it's a list-item
|
||||
auto fmt = block.textList()->format();
|
||||
const int listLevel = fmt.indent();
|
||||
@ -427,7 +435,7 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
|
||||
} else if (blockFmt.hasProperty(QTextFormat::BlockTrailingHorizontalRulerWidth)) {
|
||||
m_stream << "- - -\n"; // unambiguous horizontal rule, not an underline under a heading
|
||||
return 0;
|
||||
} else if (blockFmt.hasProperty(QTextFormat::BlockCodeFence) || blockFmt.stringProperty(QTextFormat::BlockCodeLanguage).length() > 0) {
|
||||
} else if (codeBlock) {
|
||||
// It's important to preserve blank lines in code blocks. But blank lines in code blocks
|
||||
// inside block quotes are getting preserved anyway (along with the "> " prefix).
|
||||
if (!blockFmt.hasProperty(QTextFormat::BlockQuoteLevel))
|
||||
@ -439,16 +447,11 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
|
||||
m_codeBlockFence = QString(3, fenceChar.at(0));
|
||||
// A block quote can contain an indented code block, but not vice-versa.
|
||||
m_stream << m_linePrefix << QString(m_wrappedLineIndent, Space) << m_codeBlockFence
|
||||
<< Space << blockFmt.stringProperty(QTextFormat::BlockCodeLanguage) << Newline;
|
||||
<< blockFmt.stringProperty(QTextFormat::BlockCodeLanguage) << Newline;
|
||||
m_fencedCodeBlock = true;
|
||||
}
|
||||
wrap = false;
|
||||
} else if (!blockFmt.indent()) {
|
||||
if (m_fencedCodeBlock) {
|
||||
m_stream << m_linePrefix << QString(m_wrappedLineIndent, Space)
|
||||
<< m_codeBlockFence << Newline;
|
||||
m_fencedCodeBlock = false;
|
||||
m_codeBlockFence.clear();
|
||||
}
|
||||
m_wrappedLineIndent = 0;
|
||||
m_linePrefix.clear();
|
||||
if (blockFmt.hasProperty(QTextFormat::BlockQuoteLevel)) {
|
||||
|
@ -185,7 +185,7 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName)
|
||||
Q_ASSERT(!socketNotifier);
|
||||
socketNotifier = new QSocketNotifier(listenSocket,
|
||||
QSocketNotifier::Read, q);
|
||||
q->connect(socketNotifier, SIGNAL(activated(int)),
|
||||
q->connect(socketNotifier, SIGNAL(activated(QSocketDescriptor)),
|
||||
q, SLOT(_q_onNewConnection()));
|
||||
socketNotifier->setEnabled(maxPendingConnections > 0);
|
||||
return true;
|
||||
@ -227,7 +227,7 @@ bool QLocalServerPrivate::listen(qintptr socketDescriptor)
|
||||
Q_ASSERT(!socketNotifier);
|
||||
socketNotifier = new QSocketNotifier(listenSocket,
|
||||
QSocketNotifier::Read, q);
|
||||
q->connect(socketNotifier, SIGNAL(activated(int)),
|
||||
q->connect(socketNotifier, SIGNAL(activated(QSocketDescriptor)),
|
||||
q, SLOT(_q_onNewConnection()));
|
||||
socketNotifier->setEnabled(maxPendingConnections > 0);
|
||||
return true;
|
||||
|
@ -308,7 +308,7 @@ void QLocalSocketPrivate::_q_connectToSocket()
|
||||
// Try again later, all of the sockets listening are full
|
||||
if (!delayConnect) {
|
||||
delayConnect = new QSocketNotifier(connectingSocket, QSocketNotifier::Write, q);
|
||||
q->connect(delayConnect, SIGNAL(activated(int)), q, SLOT(_q_connectToSocket()));
|
||||
q->connect(delayConnect, SIGNAL(activated(QSocketDescriptor)), q, SLOT(_q_connectToSocket()));
|
||||
}
|
||||
if (!connectTimer) {
|
||||
connectTimer = new QTimer(q);
|
||||
|
@ -92,7 +92,7 @@ QDeviceDiscoveryUDev::QDeviceDiscoveryUDev(QDeviceTypes types, struct udev *udev
|
||||
m_udevMonitorFileDescriptor = udev_monitor_get_fd(m_udevMonitor);
|
||||
|
||||
m_udevSocketNotifier = new QSocketNotifier(m_udevMonitorFileDescriptor, QSocketNotifier::Read, this);
|
||||
connect(m_udevSocketNotifier, SIGNAL(activated(int)), this, SLOT(handleUDevNotification()));
|
||||
connect(m_udevSocketNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(handleUDevNotification()));
|
||||
}
|
||||
|
||||
QDeviceDiscoveryUDev::~QDeviceDiscoveryUDev()
|
||||
|
@ -113,6 +113,8 @@ QEvdevMouseHandler::QEvdevMouseHandler(const QString &device, int fd, bool abs,
|
||||
if (m_abs)
|
||||
m_abs = getHardwareMaximum();
|
||||
|
||||
detectHiResWheelSupport();
|
||||
|
||||
// socket notifier for events on the mouse device
|
||||
m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
|
||||
connect(m_notify, &QSocketNotifier::activated,
|
||||
@ -125,6 +127,25 @@ QEvdevMouseHandler::~QEvdevMouseHandler()
|
||||
qt_safe_close(m_fd);
|
||||
}
|
||||
|
||||
void QEvdevMouseHandler::detectHiResWheelSupport()
|
||||
{
|
||||
#if defined(REL_WHEEL_HI_RES) || defined(REL_HWHEEL_HI_RES)
|
||||
// Check if we can expect hires events as we will get both
|
||||
// legacy and hires event and needs to know if we should
|
||||
// ignore the legacy events.
|
||||
unsigned char relFeatures[(REL_MAX / 8) + 1]{};
|
||||
if (ioctl(m_fd, EVIOCGBIT(EV_REL, sizeof (relFeatures)), relFeatures) == -1)
|
||||
return;
|
||||
|
||||
#if defined(REL_WHEEL_HI_RES)
|
||||
m_hiResWheel = TEST_BIT(relFeatures, REL_WHEEL_HI_RES);
|
||||
#endif
|
||||
#if defined(REL_HWHEEL_HI_RES)
|
||||
m_hiResHWheel = TEST_BIT(relFeatures, REL_HWHEEL_HI_RES);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// Ask touch screen hardware for information on coordinate maximums
|
||||
// If any ioctls fail, revert to non abs mode
|
||||
bool QEvdevMouseHandler::getHardwareMaximum()
|
||||
@ -243,14 +264,24 @@ void QEvdevMouseHandler::readMouseData()
|
||||
} else if (data->code == REL_Y) {
|
||||
m_y += data->value;
|
||||
posChanged = true;
|
||||
} else if (data->code == ABS_WHEEL) { // vertical scroll
|
||||
} else if (!m_hiResWheel && data->code == REL_WHEEL) {
|
||||
// data->value: positive == up, negative == down
|
||||
delta.setY(120 * data->value);
|
||||
emit handleWheelEvent(delta);
|
||||
} else if (data->code == ABS_THROTTLE) { // horizontal scroll
|
||||
#ifdef REL_WHEEL_HI_RES
|
||||
} else if (data->code == REL_WHEEL_HI_RES) {
|
||||
delta.setY(data->value);
|
||||
emit handleWheelEvent(delta);
|
||||
#endif
|
||||
} else if (!m_hiResHWheel && data->code == REL_HWHEEL) {
|
||||
// data->value: positive == right, negative == left
|
||||
delta.setX(-120 * data->value);
|
||||
emit handleWheelEvent(delta);
|
||||
#ifdef REL_HWHEEL_HI_RES
|
||||
} else if (data->code == REL_HWHEEL_HI_RES) {
|
||||
delta.setX(-data->value);
|
||||
emit handleWheelEvent(delta);
|
||||
#endif
|
||||
}
|
||||
} else if (data->type == EV_KEY && data->code == BTN_TOUCH) {
|
||||
// We care about touchpads only, not touchscreens -> don't map to button press.
|
||||
|
@ -81,6 +81,7 @@ private:
|
||||
|
||||
void sendMouseEvent();
|
||||
bool getHardwareMaximum();
|
||||
void detectHiResWheelSupport();
|
||||
|
||||
QString m_device;
|
||||
int m_fd;
|
||||
@ -89,6 +90,8 @@ private:
|
||||
int m_prevx = 0, m_prevy = 0;
|
||||
bool m_abs;
|
||||
bool m_compression;
|
||||
bool m_hiResWheel = false;
|
||||
bool m_hiResHWheel = false;
|
||||
Qt::MouseButtons m_buttons;
|
||||
Qt::MouseButton m_button;
|
||||
QEvent::Type m_eventType;
|
||||
|
@ -83,7 +83,7 @@ QOpenWFDDevice::QOpenWFDDevice(QOpenWFDIntegration *integration, WFDint device_e
|
||||
|
||||
int fd = wfdDeviceEventGetFD(mDevice,mEvent);
|
||||
mEventSocketNotifier = new QSocketNotifier(fd,QSocketNotifier::Read,this);
|
||||
connect(mEventSocketNotifier,SIGNAL(activated(int)),SLOT(readEvents()));
|
||||
connect(mEventSocketNotifier,SIGNAL(activated(QSocketDescriptor)),SLOT(readEvents()));
|
||||
|
||||
mCommitedDevice = true;
|
||||
commit(WFD_COMMIT_ENTIRE_DEVICE, handle());
|
||||
|
@ -96,7 +96,7 @@ void QQnxButtonEventNotifier::start()
|
||||
}
|
||||
|
||||
m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
|
||||
QObject::connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(updateButtonStates()));
|
||||
QObject::connect(m_readNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(updateButtonStates()));
|
||||
|
||||
qButtonDebug("successfully connected to Navigator. fd = %d", m_fd);
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ void QQnxNavigatorEventNotifier::start()
|
||||
}
|
||||
|
||||
m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
|
||||
connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(readData()));
|
||||
connect(m_readNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(readData()));
|
||||
}
|
||||
|
||||
void QQnxNavigatorEventNotifier::parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id)
|
||||
|
@ -143,7 +143,7 @@ bool QQnxVirtualKeyboardPps::connect()
|
||||
return false;
|
||||
|
||||
m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
|
||||
QObject::connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(ppsDataReady()));
|
||||
QObject::connect(m_readNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(ppsDataReady()));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ void QWasmEventDispatcher::wakeUp()
|
||||
#ifdef EMSCRIPTEN_HAS_ASYNC_RUN_IN_MAIN_RUNTIME_THREAD
|
||||
if (!emscripten_is_main_runtime_thread())
|
||||
if (m_hasMainLoop)
|
||||
emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, (void*)(&QWasmEventDispatcher::mainThreadWakeUp), this);
|
||||
emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, (void*)(&QWasmEventDispatcher::mainThreadWakeUp), this);
|
||||
#endif
|
||||
QEventDispatcherUNIX::wakeUp();
|
||||
}
|
||||
|
@ -61,11 +61,11 @@ public:
|
||||
QSmSocketReceiver(int socket)
|
||||
{
|
||||
QSocketNotifier* sn = new QSocketNotifier(socket, QSocketNotifier::Read, this);
|
||||
connect(sn, SIGNAL(activated(int)), this, SLOT(socketActivated(int)));
|
||||
connect(sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(socketActivated()));
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
void socketActivated(int);
|
||||
void socketActivated();
|
||||
};
|
||||
|
||||
|
||||
@ -327,7 +327,7 @@ static void sm_saveYourselfPhase2Callback(SmcConn smcConn, SmPointer clientData)
|
||||
}
|
||||
|
||||
|
||||
void QSmSocketReceiver::socketActivated(int)
|
||||
void QSmSocketReceiver::socketActivated()
|
||||
{
|
||||
IceProcessMessages(SmcGetIceConnection(smcConnection), nullptr, nullptr);
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ void QPSQLDriverPrivate::checkPendingNotifications() const
|
||||
Q_Q(const QPSQLDriver);
|
||||
if (seid.size() && !pendingNotifyCheck) {
|
||||
pendingNotifyCheck = true;
|
||||
QMetaObject::invokeMethod(const_cast<QPSQLDriver*>(q), "_q_handleNotification", Qt::QueuedConnection, Q_ARG(int,0));
|
||||
QMetaObject::invokeMethod(const_cast<QPSQLDriver*>(q), "_q_handleNotification", Qt::QueuedConnection);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1246,7 +1246,7 @@ void QPSQLDriver::close()
|
||||
|
||||
d->seid.clear();
|
||||
if (d->sn) {
|
||||
disconnect(d->sn, SIGNAL(activated(int)), this, SLOT(_q_handleNotification(int)));
|
||||
disconnect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
|
||||
delete d->sn;
|
||||
d->sn = nullptr;
|
||||
}
|
||||
@ -1603,7 +1603,7 @@ bool QPSQLDriver::subscribeToNotification(const QString &name)
|
||||
|
||||
if (!d->sn) {
|
||||
d->sn = new QSocketNotifier(socket, QSocketNotifier::Read);
|
||||
connect(d->sn, SIGNAL(activated(int)), this, SLOT(_q_handleNotification(int)));
|
||||
connect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
|
||||
}
|
||||
} else {
|
||||
qWarning("QPSQLDriver::subscribeToNotificationImplementation: PQsocket didn't return a valid socket to listen on");
|
||||
@ -1639,7 +1639,7 @@ bool QPSQLDriver::unsubscribeFromNotification(const QString &name)
|
||||
d->seid.removeAll(name);
|
||||
|
||||
if (d->seid.isEmpty()) {
|
||||
disconnect(d->sn, SIGNAL(activated(int)), this, SLOT(_q_handleNotification(int)));
|
||||
disconnect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
|
||||
delete d->sn;
|
||||
d->sn = nullptr;
|
||||
}
|
||||
@ -1653,7 +1653,7 @@ QStringList QPSQLDriver::subscribedToNotifications() const
|
||||
return d->seid;
|
||||
}
|
||||
|
||||
void QPSQLDriver::_q_handleNotification(int)
|
||||
void QPSQLDriver::_q_handleNotification()
|
||||
{
|
||||
Q_D(QPSQLDriver);
|
||||
d->pendingNotifyCheck = false;
|
||||
|
@ -130,7 +130,7 @@ protected:
|
||||
bool rollbackTransaction() override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void _q_handleNotification(int);
|
||||
void _q_handleNotification();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -435,11 +435,10 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
// rcc uses a QHash to store files in the resource system.
|
||||
// we must force a certain hash order when testing or tst_rcc will fail, see QTBUG-25078
|
||||
if (Q_UNLIKELY(!qEnvironmentVariableIsEmpty("QT_RCC_TEST"))) {
|
||||
qSetGlobalQHashSeed(0);
|
||||
if (qGlobalQHashSeed() != 0)
|
||||
qFatal("Cannot force QHash seed for testing as requested");
|
||||
}
|
||||
// similar requirements exist for reproducibly builds.
|
||||
qSetGlobalQHashSeed(0);
|
||||
if (qGlobalQHashSeed() != 0)
|
||||
qWarning("Cannot force QHash seed");
|
||||
|
||||
return QT_PREPEND_NAMESPACE(runRcc)(argc, argv);
|
||||
}
|
||||
|
@ -53,6 +53,7 @@
|
||||
# undef min
|
||||
#endif // Q_CC_MSVC
|
||||
|
||||
|
||||
class tst_QSocketNotifier : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -63,6 +64,9 @@ private slots:
|
||||
void posixSockets();
|
||||
#endif
|
||||
void asyncMultipleDatagram();
|
||||
void activationReason_data();
|
||||
void activationReason();
|
||||
void legacyConnect();
|
||||
|
||||
protected slots:
|
||||
void async_readDatagramSlot();
|
||||
@ -97,10 +101,10 @@ public:
|
||||
{
|
||||
QSocketNotifier *notifier1 =
|
||||
new QSocketNotifier(readEnd1->socketDescriptor(), QSocketNotifier::Read, this);
|
||||
connect(notifier1, SIGNAL(activated(int)), SLOT(handleActivated()));
|
||||
connect(notifier1, SIGNAL(activated(QSocketDescriptor)), SLOT(handleActivated()));
|
||||
QSocketNotifier *notifier2 =
|
||||
new QSocketNotifier(readEnd2->socketDescriptor(), QSocketNotifier::Read, this);
|
||||
connect(notifier2, SIGNAL(activated(int)), SLOT(handleActivated()));
|
||||
connect(notifier2, SIGNAL(activated(QSocketDescriptor)), SLOT(handleActivated()));
|
||||
}
|
||||
|
||||
public slots:
|
||||
@ -284,12 +288,12 @@ void tst_QSocketNotifier::posixSockets()
|
||||
|
||||
{
|
||||
QSocketNotifier rn(posixSocket, QSocketNotifier::Read);
|
||||
connect(&rn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
connect(&rn, SIGNAL(activated(QSocketDescriptor)), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
QSignalSpy readSpy(&rn, &QSocketNotifier::activated);
|
||||
QVERIFY(readSpy.isValid());
|
||||
// No write notifier, some systems trigger write notification on socket creation, but not all
|
||||
QSocketNotifier en(posixSocket, QSocketNotifier::Exception);
|
||||
connect(&en, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
connect(&en, SIGNAL(activated(QSocketDescriptor)), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
QSignalSpy errorSpy(&en, &QSocketNotifier::activated);
|
||||
QVERIFY(errorSpy.isValid());
|
||||
|
||||
@ -306,7 +310,7 @@ void tst_QSocketNotifier::posixSockets()
|
||||
QCOMPARE(buffer, "hello");
|
||||
|
||||
QSocketNotifier wn(posixSocket, QSocketNotifier::Write);
|
||||
connect(&wn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
connect(&wn, SIGNAL(activated(QSocketDescriptor)), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
QSignalSpy writeSpy(&wn, &QSocketNotifier::activated);
|
||||
QVERIFY(writeSpy.isValid());
|
||||
qt_safe_write(posixSocket, "goodbye", 8);
|
||||
@ -385,5 +389,61 @@ void tst_QSocketNotifier::asyncMultipleDatagram()
|
||||
#endif // !Q_OS_WINRT
|
||||
}
|
||||
|
||||
void tst_QSocketNotifier::activationReason_data()
|
||||
{
|
||||
QTest::addColumn<QSocketNotifier::Type>("type");
|
||||
QTest::addRow("read") << QSocketNotifier::Read;
|
||||
QTest::addRow("write") << QSocketNotifier::Write;
|
||||
QTest::addRow("exception") << QSocketNotifier::Exception;
|
||||
}
|
||||
void tst_QSocketNotifier::activationReason()
|
||||
{
|
||||
QSocketDescriptor fd = 15;
|
||||
|
||||
QFETCH(QSocketNotifier::Type, type);
|
||||
|
||||
QSocketNotifier notifier(fd, type);
|
||||
auto activation = new QEvent(QEvent::SockAct);
|
||||
QCoreApplication::postEvent(¬ifier, activation);
|
||||
|
||||
QSocketNotifier::Type notifierType;
|
||||
connect(¬ifier, &QSocketNotifier::activated, this,
|
||||
[¬ifierType, fd](QSocketDescriptor sockfd, QSocketNotifier::Type sntype) {
|
||||
if (sockfd == fd)
|
||||
notifierType = sntype;
|
||||
else
|
||||
qWarning() << "Got an unexpected socket file descriptor:" << qintptr(sockfd);
|
||||
});
|
||||
|
||||
QCoreApplication::processEvents();
|
||||
QCOMPARE(notifierType, type);
|
||||
}
|
||||
|
||||
// This test ensures that we can connect QSocketNotifier::activated to a slot taking an integer
|
||||
// or qintptr.
|
||||
void tst_QSocketNotifier::legacyConnect()
|
||||
{
|
||||
qintptr fd = 15;
|
||||
QSocketNotifier notifier(fd, QSocketNotifier::Read);
|
||||
auto activation = new QEvent(QEvent::SockAct);
|
||||
QCoreApplication::postEvent(¬ifier, activation);
|
||||
|
||||
bool receivedQIntPtr = false;
|
||||
connect(¬ifier, &QSocketNotifier::activated, this, [&receivedQIntPtr, fd](qintptr q){
|
||||
if (q == fd)
|
||||
receivedQIntPtr = true;
|
||||
});
|
||||
bool receivedInt = false;
|
||||
connect(¬ifier, &QSocketNotifier::activated, this, [&receivedInt, fd](int q){
|
||||
if (q == fd)
|
||||
receivedInt = true;
|
||||
});
|
||||
|
||||
QCoreApplication::processEvents();
|
||||
QVERIFY(receivedQIntPtr);
|
||||
QVERIFY(receivedInt);
|
||||
}
|
||||
|
||||
|
||||
QTEST_MAIN(tst_QSocketNotifier)
|
||||
#include <tst_qsocketnotifier.moc>
|
||||
|
@ -20,7 +20,7 @@ MacFarlane writes:
|
||||
> equivalent sample of Markdown. Here is a sample of AsciiDoc from the AsciiDoc
|
||||
> manual:
|
||||
|
||||
> ``` AsciiDoc
|
||||
> ```AsciiDoc
|
||||
> 1. List item one.
|
||||
> +
|
||||
> List item one continued with a second paragraph followed by an
|
||||
@ -50,7 +50,7 @@ Now let's have an indented code block:
|
||||
}
|
||||
|
||||
and end with a fenced code block:
|
||||
~~~ pseudocode
|
||||
~~~pseudocode
|
||||
#include <something.h>
|
||||
#include <else.h>
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
- something happens in the debugger like this:
|
||||
|
||||
```
|
||||
1 QQuickEventPoint::setGrabberItem qquickevents.cpp 869 0x7ffff7a963f2
|
||||
2 QQuickItem::grabMouse qquickitem.cpp 7599 0x7ffff7abea29
|
||||
3 QQuickWindowPrivate::deliverMatchingPointsToItem qquickwindow.cpp 2738 0x7ffff7aea34c
|
||||
4 QQuickWindowPrivate::deliverPressOrReleaseEvent qquickwindow.cpp 2692 0x7ffff7ae9e57
|
||||
5 QQuickWindowPrivate::deliverMouseEvent qquickwindow.cpp 1911 0x7ffff7ae561b
|
||||
6 QQuickWindowPrivate::deliverPointerEvent qquickwindow.cpp 2454 0x7ffff7ae888c
|
||||
7 QQuickWindowPrivate::handleMouseEvent qquickwindow.cpp 2282 0x7ffff7ae7f1a
|
||||
8 QQuickWindow::mousePressEvent qquickwindow.cpp 2249 0x7ffff7ae7bf5
|
||||
9 QQuickView::mousePressEvent qquickview.cpp 626 0x7ffff7bd6bad
|
||||
10 QWindow::event qwindow.cpp 2258 0x7ffff70b2c54
|
||||
```
|
||||
and then I want to explain something about it.
|
||||
|
||||
- something I tried to fix it:
|
||||
|
||||
```c++
|
||||
item->ungrab();
|
||||
```
|
||||
- still didn't fix it, expecting a breakthrough any day now
|
||||
- some sort of miracle
|
||||
- profit!
|
@ -369,6 +369,7 @@ void tst_QTextMarkdownWriter::rewriteDocument_data()
|
||||
QTest::newRow("list items after headings") << "headingsAndLists.md";
|
||||
QTest::newRow("word wrap") << "wordWrap.md";
|
||||
QTest::newRow("links") << "links.md";
|
||||
QTest::newRow("lists and code blocks") << "listsAndCodeBlocks.md";
|
||||
}
|
||||
|
||||
void tst_QTextMarkdownWriter::rewriteDocument()
|
||||
@ -431,7 +432,7 @@ void tst_QTextMarkdownWriter::fromHtml_data()
|
||||
"![foo](/url \"title\")\n\n";
|
||||
QTest::newRow("code") <<
|
||||
"<pre class=\"language-pseudocode\">\n#include \"foo.h\"\n\nblock {\n statement();\n}\n\n</pre>" <<
|
||||
"``` pseudocode\n#include \"foo.h\"\n\nblock {\n statement();\n}\n```\n\n";
|
||||
"```pseudocode\n#include \"foo.h\"\n\nblock {\n statement();\n}\n```\n\n";
|
||||
// TODO
|
||||
// QTest::newRow("escaped number and paren after double newline") <<
|
||||
// "<p>(The first sentence of this paragraph is a line, the next paragraph has a number</p>13) but that's not part of an ordered list" <<
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -28,6 +28,7 @@
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
#include <QtCore/QProcess>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
|
||||
class tst_QProcess : public QObject
|
||||
{
|
||||
@ -50,7 +51,7 @@ void tst_QProcess::echoTest_performance()
|
||||
|
||||
QVERIFY(process.waitForStarted());
|
||||
|
||||
QTime stopWatch;
|
||||
QElapsedTimer stopWatch;
|
||||
stopWatch.start();
|
||||
|
||||
qint64 totalBytes = 0;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -29,6 +29,7 @@
|
||||
#include <qtest.h>
|
||||
|
||||
#include <QtCore/qmath.h>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
#include <QtWidgets/QWidget>
|
||||
|
||||
#include "benchmarktests.h"
|
||||
@ -44,7 +45,7 @@ public:
|
||||
qreal result() const { return m_result; }
|
||||
|
||||
public:
|
||||
QTime timer;
|
||||
QElapsedTimer timer;
|
||||
|
||||
Benchmark *m_benchmark;
|
||||
|
||||
@ -77,7 +78,7 @@ void BenchWidget::paintEvent(QPaintEvent *)
|
||||
|
||||
++m_iteration;
|
||||
|
||||
uint currentElapsed = timer.isNull() ? 0 : timer.elapsed();
|
||||
uint currentElapsed = timer.isValid() ? timer.elapsed() : 0;
|
||||
timer.restart();
|
||||
|
||||
m_total += currentElapsed;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -32,6 +32,7 @@
|
||||
#include <QtNetwork/qnetworkrequest.h>
|
||||
#include <QtNetwork/qnetworkaccessmanager.h>
|
||||
#include <QtCore/QTemporaryFile>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
#include <QtCore/QFile>
|
||||
|
||||
class qfile_vs_qnetworkaccessmanager : public QObject
|
||||
@ -88,7 +89,7 @@ void qfile_vs_qnetworkaccessmanager::qnamFileRead_iteration(QNetworkAccessManage
|
||||
void qfile_vs_qnetworkaccessmanager::qnamFileRead()
|
||||
{
|
||||
QNetworkAccessManager manager;
|
||||
QTime t;
|
||||
QElapsedTimer t;
|
||||
QNetworkRequest request(QUrl::fromLocalFile(testFile.fileName()));
|
||||
|
||||
// do 3 dry runs for cache warmup
|
||||
@ -121,7 +122,7 @@ void qfile_vs_qnetworkaccessmanager::qnamImmediateFileRead_iteration(QNetworkAcc
|
||||
void qfile_vs_qnetworkaccessmanager::qnamImmediateFileRead()
|
||||
{
|
||||
QNetworkAccessManager manager;
|
||||
QTime t;
|
||||
QElapsedTimer t;
|
||||
QNetworkRequest request(QUrl::fromLocalFile(testFile.fileName()));
|
||||
|
||||
// do 3 dry runs for cache warmup
|
||||
@ -151,7 +152,7 @@ void qfile_vs_qnetworkaccessmanager::qfileFileRead_iteration()
|
||||
|
||||
void qfile_vs_qnetworkaccessmanager::qfileFileRead()
|
||||
{
|
||||
QTime t;
|
||||
QElapsedTimer t;
|
||||
|
||||
// do 3 dry runs for cache warmup
|
||||
qfileFileRead_iteration();
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -31,6 +31,7 @@
|
||||
#include <qtest.h>
|
||||
#include <QtTest/QtTest>
|
||||
#include <QtCore/qrandom.h>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
#include <QtNetwork/qnetworkreply.h>
|
||||
#include <QtNetwork/qnetworkrequest.h>
|
||||
#include <QtNetwork/qnetworkaccessmanager.h>
|
||||
@ -93,7 +94,7 @@ protected:
|
||||
QEventLoop eventLoop;
|
||||
QTimer::singleShot(timeout, &eventLoop, SLOT(quit()));
|
||||
|
||||
QTime timer;
|
||||
QElapsedTimer timer;
|
||||
timer.start();
|
||||
eventLoop.exec();
|
||||
disconnect(client, SIGNAL(bytesWritten(qint64)), this, 0);
|
||||
@ -187,7 +188,7 @@ protected:
|
||||
DataReader reader(client, false);
|
||||
QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit()));
|
||||
|
||||
QTime timer;
|
||||
QElapsedTimer timer;
|
||||
timer.start();
|
||||
eventLoop.exec();
|
||||
qint64 elapsed = timer.elapsed();
|
||||
@ -280,7 +281,7 @@ protected:
|
||||
DataReader reader(client, false);
|
||||
QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit()));
|
||||
|
||||
QTime timer;
|
||||
QElapsedTimer timer;
|
||||
timer.start();
|
||||
eventLoop.exec();
|
||||
qint64 elapsed = timer.elapsed();
|
||||
@ -639,7 +640,7 @@ void tst_qnetworkreply::downloadPerformance()
|
||||
QNetworkReplyPtr reply(manager.get(request));
|
||||
DataReader reader(reply, false);
|
||||
|
||||
QTime loopTime;
|
||||
QElapsedTimer loopTime;
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
loopTime.start();
|
||||
QTestEventLoop::instance().enterLoop(40);
|
||||
@ -682,7 +683,7 @@ void tst_qnetworkreply::httpUploadPerformance()
|
||||
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
|
||||
QTime time;
|
||||
QElapsedTimer time;
|
||||
generator.start();
|
||||
time.start();
|
||||
QTestEventLoop::instance().enterLoop(40);
|
||||
@ -710,7 +711,7 @@ void tst_qnetworkreply::performanceControlRate()
|
||||
sink.connectToHost("127.0.0.1", sender.serverPort());
|
||||
DataReader reader(&sink, false);
|
||||
|
||||
QTime loopTime;
|
||||
QElapsedTimer loopTime;
|
||||
connect(&sink, SIGNAL(disconnected()), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
loopTime.start();
|
||||
QTestEventLoop::instance().enterLoop(40);
|
||||
@ -748,7 +749,7 @@ void tst_qnetworkreply::httpDownloadPerformance()
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
|
||||
HttpDownloadPerformanceClient client(reply.data());
|
||||
|
||||
QTime time;
|
||||
QElapsedTimer time;
|
||||
time.start();
|
||||
QTestEventLoop::instance().enterLoop(40);
|
||||
QCOMPARE(reply->error(), QNetworkReply::NoError);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -27,6 +27,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
#include <qglobal.h>
|
||||
#include <qcoreapplication.h>
|
||||
#include <qtcpsocket.h>
|
||||
@ -129,7 +130,7 @@ void tst_QTcpServer::ipv4LoopbackPerformanceTest()
|
||||
QVERIFY(clientB);
|
||||
|
||||
QByteArray buffer(16384, '@');
|
||||
QTime stopWatch;
|
||||
QElapsedTimer stopWatch;
|
||||
stopWatch.start();
|
||||
qlonglong totalWritten = 0;
|
||||
while (stopWatch.elapsed() < 5000) {
|
||||
@ -180,7 +181,7 @@ void tst_QTcpServer::ipv6LoopbackPerformanceTest()
|
||||
QVERIFY(clientB);
|
||||
|
||||
QByteArray buffer(16384, '@');
|
||||
QTime stopWatch;
|
||||
QElapsedTimer stopWatch;
|
||||
stopWatch.start();
|
||||
qlonglong totalWritten = 0;
|
||||
while (stopWatch.elapsed() < 5000) {
|
||||
@ -230,7 +231,7 @@ void tst_QTcpServer::ipv4PerformanceTest()
|
||||
QVERIFY(clientB);
|
||||
|
||||
QByteArray buffer(16384, '@');
|
||||
QTime stopWatch;
|
||||
QElapsedTimer stopWatch;
|
||||
stopWatch.start();
|
||||
qlonglong totalWritten = 0;
|
||||
while (stopWatch.elapsed() < 5000) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -27,6 +27,7 @@
|
||||
****************************************************************************/
|
||||
#include <QtGui>
|
||||
#include <QtOpenGL>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
|
||||
#include <qtest.h>
|
||||
|
||||
@ -400,7 +401,7 @@ void OpenGLBench::textureUpload()
|
||||
|
||||
pb->makeCurrent();
|
||||
QGLContext *context = const_cast<QGLContext *>(QGLContext::currentContext());
|
||||
QTime time;
|
||||
QElapsedTimer time;
|
||||
|
||||
time.start();
|
||||
context->bindTexture(pixmap, GL_TEXTURE_2D, format, (QGLContext::BindOptions) flags);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the examples of the Qt Toolkit.
|
||||
@ -27,7 +27,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <QDebug>
|
||||
#include <QTime>
|
||||
#include <QElapsedTimer>
|
||||
|
||||
#include "itemrecyclinglist.h"
|
||||
#include "listitemcontainer.h"
|
||||
@ -160,10 +160,10 @@ void ItemRecyclingList::themeChange()
|
||||
|
||||
void ItemRecyclingList::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
static QTime keyPressInterval = QTime::currentTime();
|
||||
static QElapsedTimer keyPressInterval;
|
||||
static qreal step = 0.0;
|
||||
static bool repeat = false;
|
||||
int interval = keyPressInterval.elapsed();
|
||||
int interval = keyPressInterval.isValid() ? keyPressInterval.elapsed() : 0;
|
||||
|
||||
ScrollBar* sb = verticalScrollBar();
|
||||
qreal currentValue = sb->sliderPosition();
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the examples of the Qt Toolkit.
|
||||
@ -132,7 +132,7 @@ qreal MainView::fps()
|
||||
void MainView::fpsReset()
|
||||
{
|
||||
m_frameCount = 0;
|
||||
m_fpsFirstTs.start();
|
||||
m_fpsFirstTs = QTime::currentTime();
|
||||
m_fpsLatestTs = m_fpsFirstTs;
|
||||
m_fpsUpdated.start();
|
||||
}
|
||||
@ -201,7 +201,7 @@ void MainView::paintEvent (QPaintEvent *event)
|
||||
emit repainted();
|
||||
|
||||
m_frameCount++;
|
||||
m_fpsLatestTs.start();
|
||||
m_fpsLatestTs = QTime::currentTime();
|
||||
if(m_fpsUpdated.elapsed() > 2000) {
|
||||
updateFps();
|
||||
m_fpsUpdated.start();
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the examples of the Qt Toolkit.
|
||||
@ -31,6 +31,7 @@
|
||||
|
||||
#include <QGraphicsView>
|
||||
#include <QTime>
|
||||
#include <QElapsedTimer>
|
||||
#include <QTimer>
|
||||
|
||||
#include "settings.h"
|
||||
@ -100,7 +101,7 @@ private:
|
||||
QTime m_fpsFirstTs;
|
||||
QTime m_fpsLatestTs;
|
||||
bool m_OutputFps;
|
||||
QTime m_fpsUpdated;
|
||||
QElapsedTimer m_fpsUpdated;
|
||||
QList<qreal> m_Fpss;
|
||||
|
||||
int m_angle;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the examples of the Qt Toolkit.
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
#include <QPoint>
|
||||
#include <QTimer>
|
||||
#include <QTime>
|
||||
#include <QElapsedTimer>
|
||||
|
||||
#include "scroller.h"
|
||||
|
||||
@ -70,8 +70,8 @@ public:
|
||||
QPoint m_cursorPos;
|
||||
QPointF m_speed;
|
||||
State m_state;
|
||||
QTime m_lastCursorTime;
|
||||
QTime m_lastFrameTime;
|
||||
QElapsedTimer m_lastCursorTime;
|
||||
QElapsedTimer m_lastFrameTime;
|
||||
QTimer m_scrollTimer;
|
||||
int m_scrollSlowAccum;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the examples of the Qt Toolkit.
|
||||
@ -29,7 +29,7 @@
|
||||
#include <QDebug>
|
||||
#include <QGraphicsLinearLayout>
|
||||
#include <QFont>
|
||||
#include <QTime>
|
||||
#include <QElapsedTimer>
|
||||
|
||||
#include "simplelist.h"
|
||||
static const int MinItemWidth = 276;
|
||||
@ -99,10 +99,10 @@ void SimpleList::setListItemCaching(bool enable)
|
||||
|
||||
void SimpleList::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
static QTime keyPressInterval = QTime::currentTime();
|
||||
static QElapsedTimer keyPressInterval;
|
||||
static qreal step = 0.0;
|
||||
static bool repeat = false;
|
||||
int interval = keyPressInterval.elapsed();
|
||||
int interval = keyPressInterval.isValid() ? keyPressInterval.elapsed() : 0;
|
||||
|
||||
ScrollBar* sb = verticalScrollBar();
|
||||
qreal currentValue = sb->sliderPosition();
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -72,7 +72,6 @@ void ChipTester::runBenchmark()
|
||||
{
|
||||
npaints = 0;
|
||||
timerId = startTimer(0);
|
||||
stopWatch.start();
|
||||
eventLoop.exec();
|
||||
killTimer(timerId);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -31,7 +31,6 @@
|
||||
|
||||
#include <QtWidgets/QGraphicsView>
|
||||
#include <QtCore/QEventLoop>
|
||||
#include <QtCore/QTime>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QGraphicsScene)
|
||||
QT_FORWARD_DECLARE_CLASS(QGraphicsView)
|
||||
@ -67,7 +66,6 @@ private:
|
||||
int npaints;
|
||||
int timerId;
|
||||
QEventLoop eventLoop;
|
||||
QTime stopWatch;
|
||||
Operation operation;
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,36 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QCborStreamReader>
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) {
|
||||
QCborStreamReader reader(QByteArray::fromRawData(Data, Size));
|
||||
while (reader.isValid())
|
||||
reader.next(1024);
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
QT -= gui
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
SOURCES += main.cpp
|
||||
FUZZ_ENGINE = $$(LIB_FUZZING_ENGINE)
|
||||
isEmpty(FUZZ_ENGINE) {
|
||||
QMAKE_LFLAGS += -fsanitize=fuzzer
|
||||
} else {
|
||||
LIBS += $$FUZZ_ENGINE
|
||||
}
|
Loading…
Reference in New Issue
Block a user