summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--config.tests/unix/clock-gettime/clock-gettime.pri2
-rw-r--r--config.tests/unix/clock-gettime/clock-gettime.pro1
-rw-r--r--config.tests/unix/clock-monotonic/clock-monotonic.pro1
-rw-r--r--config.tests/unix/stack-protector/stack-protector.cpp52
-rw-r--r--config.tests/unix/stack-protector/stack-protector.pro2
-rw-r--r--configure.json10
-rw-r--r--configure.pri33
-rw-r--r--doc/global/qt-cpp-defines.qdocconf3
-rw-r--r--mkspecs/common/msvc-desktop.conf4
-rw-r--r--mkspecs/common/qcc-base.conf2
-rw-r--r--mkspecs/features/android/android.prf5
-rw-r--r--mkspecs/features/android/resolve_target.prf1
-rw-r--r--mkspecs/features/data/macros.cpp18
-rw-r--r--mkspecs/features/default_post.prf5
-rw-r--r--mkspecs/features/mac/default_post.prf6
-rw-r--r--mkspecs/features/moc.prf4
-rw-r--r--mkspecs/features/qt_common.prf1
-rw-r--r--mkspecs/features/qt_configure.prf4
-rw-r--r--mkspecs/features/toolchain.prf63
-rw-r--r--mkspecs/qnx-aarch64le-qcc/qmake.conf8
-rw-r--r--mkspecs/qnx-x86-64-qcc/qmake.conf8
-rw-r--r--qmake/generators/makefile.cpp2
-rw-r--r--qmake/generators/win32/mingw_make.cpp7
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp27
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp18
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp4
-rw-r--r--src/3rdparty/angle/src/libANGLE/formatutils.cpp2
-rw-r--r--src/3rdparty/angle/src/libANGLE/formatutils.h2
-rw-r--r--src/3rdparty/angle/src/libANGLE/validationES3.cpp18
-rw-r--r--src/3rdparty/atspi2/LICENSE482
-rw-r--r--src/3rdparty/atspi2/atspi/atspi-constants.h1333
-rw-r--r--src/3rdparty/atspi2/atspi2.pri10
-rw-r--r--src/3rdparty/atspi2/qt_attribution.json11
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java12
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java16
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java18
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtSurface.java7
-rw-r--r--src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch110
-rw-r--r--src/corelib/configure.json18
-rw-r--r--src/corelib/doc/src/json.qdoc2
-rw-r--r--src/corelib/global/global.pri1
-rw-r--r--src/corelib/global/qcompilerdetection.h67
-rw-r--r--src/corelib/global/qglobal.cpp25
-rw-r--r--src/corelib/global/qglobalstatic.qdoc (renamed from src/corelib/global/qglobalstatic.cpp)2
-rw-r--r--src/corelib/global/qlogging.cpp2
-rw-r--r--src/corelib/global/qoperatingsystemversion.cpp8
-rw-r--r--src/corelib/global/qoperatingsystemversion.h1
-rw-r--r--src/corelib/io/qloggingcategory.cpp26
-rw-r--r--src/corelib/io/qprocess.cpp36
-rw-r--r--src/corelib/io/qprocess_darwin.mm2
-rw-r--r--src/corelib/io/qprocess_p.h39
-rw-r--r--src/corelib/io/qprocess_unix.cpp14
-rw-r--r--src/corelib/io/qprocess_win.cpp14
-rw-r--r--src/corelib/json/qjson_p.h2
-rw-r--r--src/corelib/kernel/kernel.pri2
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp15
-rw-r--r--src/corelib/kernel/qjnihelpers_p.h8
-rw-r--r--src/corelib/tools/qbytearray.h2
-rw-r--r--src/corelib/tools/qcollator.cpp2
-rw-r--r--src/corelib/tools/qcollator_macx.cpp2
-rw-r--r--src/corelib/tools/qsimd.cpp8
-rw-r--r--src/corelib/tools/qsimd_p.h6
-rw-r--r--src/corelib/tools/qstring.h2
-rw-r--r--src/corelib/tools/qtimezone.cpp8
-rw-r--r--src/gui/configure.json9
-rw-r--r--src/gui/image/qimagereader.cpp2
-rw-r--r--src/gui/kernel/qclipboard.cpp11
-rw-r--r--src/gui/kernel/qkeysequence.cpp2
-rw-r--r--src/gui/painting/qplatformbackingstore.cpp8
-rw-r--r--src/network/kernel/qhostaddress.cpp24
-rw-r--r--src/network/ssl/qsslsocket_mac.cpp6
-rw-r--r--src/platformsupport/linuxaccessibility/dbusxml/Bus.xml (renamed from src/3rdparty/atspi2/xml/Bus.xml)0
-rw-r--r--src/platformsupport/linuxaccessibility/dbusxml/Cache.xml (renamed from src/3rdparty/atspi2/xml/Cache.xml)0
-rw-r--r--src/platformsupport/linuxaccessibility/dbusxml/DeviceEventController.xml (renamed from src/3rdparty/atspi2/xml/DeviceEventController.xml)0
-rw-r--r--src/platformsupport/linuxaccessibility/dbusxml/Socket.xml (renamed from src/3rdparty/atspi2/xml/Socket.xml)0
-rw-r--r--src/platformsupport/linuxaccessibility/linuxaccessibility.pro8
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes.cpp8
-rw-r--r--src/plugins/platforms/android/androidjniinput.cpp26
-rw-r--r--src/plugins/platforms/android/androidjniinput.h2
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp10
-rw-r--r--src/plugins/platforms/android/qandroidinputcontext.cpp5
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.cpp8
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.h2
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm5
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp3
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp8
-rw-r--r--src/plugins/platforms/windows/qtwindowsglobal.h2
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp14
-rw-r--r--src/plugins/platforms/windows/qwindowscursor.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsdrag.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp18
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.h6
-rw-r--r--src/plugins/platforms/windows/qwindowsmime.cpp8
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp2
-rw-r--r--src/plugins/platforms/windows/windows.pri17
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp18
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp16
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.h12
-rw-r--r--src/plugins/sqldrivers/.qmake.conf19
-rw-r--r--src/plugins/sqldrivers/configure.json (renamed from src/sql/configure.json)31
-rw-r--r--src/plugins/sqldrivers/configure.pri (renamed from src/sql/configure.pri)0
-rw-r--r--src/plugins/sqldrivers/qsqldriverbase.pri3
-rw-r--r--src/plugins/sqldrivers/sqldrivers.pro6
-rw-r--r--src/plugins/sqldrivers/sqlite/sqlite.pro5
-rw-r--r--src/tools/moc/preprocessor.cpp13
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp7
-rw-r--r--src/widgets/dialogs/dialogs.pri3
-rw-r--r--src/widgets/dialogs/qdialog.cpp2
-rw-r--r--src/widgets/dialogs/qfiledialog_embedded.ui353
-rw-r--r--src/widgets/doc/images/fusion-style.pngbin0 -> 69799 bytes
-rw-r--r--src/widgets/doc/images/macos-lineedit.pngbin0 -> 1401 bytes
-rw-r--r--src/widgets/doc/images/macos-progressbar.pngbin0 -> 237 bytes
-rw-r--r--src/widgets/doc/images/macos-style.pngbin0 -> 32908 bytes
-rw-r--r--src/widgets/doc/images/macos-style2.pngbin0 -> 54822 bytes
-rw-r--r--src/widgets/doc/images/macos-tabwidget.pngbin0 -> 5406 bytes
-rw-r--r--src/widgets/doc/images/windows-style.pngbin0 -> 69987 bytes
-rw-r--r--src/widgets/doc/images/windows-style2.pngbin0 -> 107675 bytes
-rw-r--r--src/widgets/doc/images/windows-vista-style.pngbin0 -> 65394 bytes
-rw-r--r--src/widgets/doc/images/windows-xp-style.pngbin0 -> 61293 bytes
-rw-r--r--src/widgets/doc/src/qtwidgets-index.qdoc2
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc138
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc142
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc138
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc142
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/gallery.qdoc72
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/widgets.qdoc10
-rw-r--r--src/widgets/itemviews/itemviews.pri16
-rw-r--r--src/widgets/itemviews/qcolumnview.h7
-rw-r--r--src/widgets/itemviews/qcolumnview_p.h8
-rw-r--r--src/widgets/itemviews/qcolumnviewgrip.cpp4
-rw-r--r--src/widgets/itemviews/qcolumnviewgrip_p.h4
-rw-r--r--src/widgets/kernel/qformlayout.cpp2
-rw-r--r--src/widgets/kernel/qwidget.cpp6
-rw-r--r--src/widgets/styles/qcommonstyle.cpp4
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp2
-rw-r--r--src/widgets/widgets/qpushbutton.cpp3
-rw-r--r--src/widgets/widgets/qsizegrip.cpp2
-rw-r--r--src/widgets/widgets/qtabbar.cpp2
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp7
-rw-r--r--tests/auto/corelib/io/qprocess/tst_qprocess.cpp42
-rw-r--r--tests/auto/corelib/io/qresourceengine/qresourceengine.pro4
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST1
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp2
-rw-r--r--tests/auto/corelib/tools/qcollator/tst_qcollator.cpp84
-rw-r--r--tests/auto/corelib/tools/qtimeline/BLACKLIST3
-rw-r--r--tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp16
-rw-r--r--tests/auto/gui/image/qicon/qicon.pro2
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.cpp2
-rw-r--r--tests/auto/gui/image/qimagereader/tst_qimagereader.cpp6
-rw-r--r--tests/auto/gui/kernel/qguieventloop/BLACKLIST2
-rw-r--r--tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp7
-rw-r--r--tests/auto/network/socket/qudpsocket/BLACKLIST3
-rw-r--r--tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp7
-rw-r--r--tests/auto/tools/moc/parse-defines.h9
-rw-r--r--tests/auto/tools/uic/baseline/qpagesetupwidget.ui181
-rw-r--r--tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h139
-rw-r--r--tests/auto/widgets/kernel/qwidget/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp3
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp119
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/BLACKLIST2
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp2
-rw-r--r--tests/manual/dialogs/filedialogpanel.cpp2
163 files changed, 1270 insertions, 3418 deletions
diff --git a/.gitignore b/.gitignore
index cc75d82ea1..4e8ce90b8e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,11 +9,12 @@
/config.tests/*/*/*
!/config.tests/*/*/*[.]*
/config.tests/.qmake.cache
+/config.tests/.qmake.stash
/config.tests/arch/arch
/config.tests/conftest-out
/config.tests/conftest.cpp
/config.opt
-/config.status
+/config.status*
/config.summary
/config.log
/config.cache
diff --git a/config.tests/unix/clock-gettime/clock-gettime.pri b/config.tests/unix/clock-gettime/clock-gettime.pri
deleted file mode 100644
index 65b49fb8b4..0000000000
--- a/config.tests/unix/clock-gettime/clock-gettime.pri
+++ /dev/null
@@ -1,2 +0,0 @@
-# clock_gettime() is implemented in librt on these systems
-linux-*|hpux-*|solaris-*:LIBS_PRIVATE *= -lrt
diff --git a/config.tests/unix/clock-gettime/clock-gettime.pro b/config.tests/unix/clock-gettime/clock-gettime.pro
index bdbb1c2a82..985b94e3fe 100644
--- a/config.tests/unix/clock-gettime/clock-gettime.pro
+++ b/config.tests/unix/clock-gettime/clock-gettime.pro
@@ -1,3 +1,2 @@
SOURCES = clock-gettime.cpp
CONFIG -= qt dylib
-include(clock-gettime.pri)
diff --git a/config.tests/unix/clock-monotonic/clock-monotonic.pro b/config.tests/unix/clock-monotonic/clock-monotonic.pro
index 253a9f7346..4c421c2413 100644
--- a/config.tests/unix/clock-monotonic/clock-monotonic.pro
+++ b/config.tests/unix/clock-monotonic/clock-monotonic.pro
@@ -1,3 +1,2 @@
SOURCES = clock-monotonic.cpp
CONFIG -= qt dylib
-include(../clock-gettime/clock-gettime.pri)
diff --git a/config.tests/unix/stack-protector/stack-protector.cpp b/config.tests/unix/stack-protector/stack-protector.cpp
new file mode 100644
index 0000000000..8b3926fe1f
--- /dev/null
+++ b/config.tests/unix/stack-protector/stack-protector.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the config.tests 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$
+**
+****************************************************************************/
+
+#if defined(__QNXNTO__)
+#include <sys/neutrino.h>
+
+#if _NTO_VERSION < 700
+#error stack-protector not used (by default) before QNX 7.0.0.
+#endif
+
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/config.tests/unix/stack-protector/stack-protector.pro b/config.tests/unix/stack-protector/stack-protector.pro
new file mode 100644
index 0000000000..ac84d7f148
--- /dev/null
+++ b/config.tests/unix/stack-protector/stack-protector.pro
@@ -0,0 +1,2 @@
+SOURCES = stack-protector.cpp
+QMAKE_CXXFLAGS += -fstack-protector-strong
diff --git a/configure.json b/configure.json
index 545e128b76..07caedc5cb 100644
--- a/configure.json
+++ b/configure.json
@@ -10,11 +10,11 @@
"subconfigs": [
"src/corelib",
"src/network",
- "src/sql",
"src/gui",
"src/xml",
"src/widgets",
- "src/printsupport"
+ "src/printsupport",
+ "src/plugins/sqldrivers"
],
"commandline": {
@@ -440,8 +440,8 @@
},
"stack_protector": {
"label": "stack protection",
- "type": "compilerSupportsFlag",
- "test": "-fstack-protector-strong"
+ "type": "compile",
+ "test": "unix/stack-protector"
},
"incredibuild_xge": {
"label": "IncrediBuild",
@@ -969,7 +969,7 @@
"stack-protector-strong": {
"label": "stack protection",
"condition": "config.qnx && tests.stack_protector",
- "output": [ "publicQtConfig" ]
+ "output": [ "privateFeature" ]
},
"system-zlib": {
"label": "Using system zlib",
diff --git a/configure.pri b/configure.pri
index 673252dc51..76bb27e4ae 100644
--- a/configure.pri
+++ b/configure.pri
@@ -252,7 +252,7 @@ defineTest(qtConfTest_architecture) {
error("Could not determine $$eval($${1}.label). See config.log for details.")
test = $$eval($${1}.test)
- test_out_dir = $$shadowed($$QMAKE_CONFIG_TESTS_DIR/$$test)
+ test_out_dir = $$OUT_PWD/$$basename(QMAKE_CONFIG_TESTS_DIR)/$$test
unix:exists($$test_out_dir/arch): \
content = $$cat($$test_out_dir/arch, blob)
else: win32:exists($$test_out_dir/arch.exe): \
@@ -1064,6 +1064,37 @@ defineReplace(qtConfOutputPostProcess_publicPro) {
!isEmpty(config.input.qt_libinfix): output += "QT_LIBINFIX = $$config.input.qt_libinfix"
!isEmpty(config.input.qt_namespace): output += "QT_NAMESPACE = $$config.input.qt_namespace"
+ !isEmpty(QMAKE_GCC_MAJOR_VERSION) {
+ output += \
+ "QT_GCC_MAJOR_VERSION = $$QMAKE_GCC_MAJOR_VERSION" \
+ "QT_GCC_MINOR_VERSION = $$QMAKE_GCC_MINOR_VERSION" \
+ "QT_GCC_PATCH_VERSION = $$QMAKE_GCC_PATCH_VERSION"
+ }
+ !isEmpty(QMAKE_CLANG_MAJOR_VERSION) {
+ output += \
+ "QT_CLANG_MAJOR_VERSION = $$QMAKE_CLANG_MAJOR_VERSION" \
+ "QT_CLANG_MINOR_VERSION = $$QMAKE_CLANG_MINOR_VERSION" \
+ "QT_CLANG_PATCH_VERSION = $$QMAKE_CLANG_PATCH_VERSION"
+ }
+ !isEmpty(QMAKE_APPLE_CLANG_MAJOR_VERSION) {
+ output += \
+ "QT_APPLE_CLANG_MAJOR_VERSION = $$QMAKE_APPLE_CLANG_MAJOR_VERSION" \
+ "QT_APPLE_CLANG_MINOR_VERSION = $$QMAKE_APPLE_CLANG_MINOR_VERSION" \
+ "QT_APPLE_CLANG_PATCH_VERSION = $$QMAKE_APPLE_CLANG_PATCH_VERSION"
+ }
+ !isEmpty(QMAKE_MSC_VER) {
+ output += \
+ "QT_MSVC_MAJOR_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\1")" \
+ "QT_MSVC_MINOR_VERSION = $$format_number($$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\2"))" \
+ "QT_MSVC_PATCH_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\3")"
+ }
+ !isEmpty(QMAKE_ICC_VER) {
+ output += \
+ "QT_ICC_MAJOR_VERSION = $$replace(QMAKE_ICC_VER, "(..)(..)", "\\1")" \
+ "QT_ICC_MINOR_VERSION = $$format_number($$replace(QMAKE_ICC_VER, "(..)(..)", "\\2"))" \
+ "QT_ICC_PATCH_VERSION = $$QMAKE_ICC_UPDATE_VER"
+ }
+
output += "QT_EDITION = $$config.input.qt_edition"
!contains(config.input.qt_edition, "(OpenSource|Preview)") {
output += \
diff --git a/doc/global/qt-cpp-defines.qdocconf b/doc/global/qt-cpp-defines.qdocconf
index 6c294798e2..4dbe144913 100644
--- a/doc/global/qt-cpp-defines.qdocconf
+++ b/doc/global/qt-cpp-defines.qdocconf
@@ -239,5 +239,4 @@ excludefiles += \
"*_unix.cpp" \
"*_udev.cpp" \
"*_vxworks.cpp" \
- "*_darwin.cpp" \
- "*_x11.cpp"
+ "*_darwin.cpp"
diff --git a/mkspecs/common/msvc-desktop.conf b/mkspecs/common/msvc-desktop.conf
index 50745c3621..95db8b93f9 100644
--- a/mkspecs/common/msvc-desktop.conf
+++ b/mkspecs/common/msvc-desktop.conf
@@ -100,9 +100,9 @@ QMAKE_LIBS_COMPAT = advapi32.lib shell32.lib comdlg32.lib user32.lib gdi32
QMAKE_LIBS_QT_ENTRY = -lqtmain
-QMAKE_IDL = midl
+QMAKE_IDL = midl /NOLOGO
QMAKE_LIB = lib /NOLOGO
-QMAKE_RC = rc
+QMAKE_RC = rc /NOLOGO
VCPROJ_EXTENSION = .vcproj
VCSOLUTION_EXTENSION = .sln
diff --git a/mkspecs/common/qcc-base.conf b/mkspecs/common/qcc-base.conf
index 77e0476777..24ee29b6b8 100644
--- a/mkspecs/common/qcc-base.conf
+++ b/mkspecs/common/qcc-base.conf
@@ -36,6 +36,8 @@ QMAKE_CFLAGS_AVX2 += -mavx2
QMAKE_CFLAGS_AESNI += -maes
QMAKE_CFLAGS_SHANI += -msha
+QMAKE_CFLAGS_STACK_PROTECTOR_STRONG = -fstack-protector-strong
+
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -lang-c++
QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
diff --git a/mkspecs/features/android/android.prf b/mkspecs/features/android/android.prf
index 7d77598e76..45eadc9fdb 100644
--- a/mkspecs/features/android/android.prf
+++ b/mkspecs/features/android/android.prf
@@ -1,3 +1,6 @@
+android_install:contains(INSTALLS, target):!isEmpty(target.path): \
+ CONFIG -= android_install
+
contains(TEMPLATE, ".*app") {
!android_app {
!contains(TARGET, ".so"): TARGET = lib$${TARGET}.so
@@ -8,7 +11,7 @@ contains(TEMPLATE, ".*app") {
INSTALLS *= target
}
}
-} else: contains(TEMPLATE, "lib"):!QTDIR_build:android_install {
+} else: contains(TEMPLATE, "lib"):!static:android_install {
target.path = /libs/$$ANDROID_TARGET_ARCH/
INSTALLS *= target
}
diff --git a/mkspecs/features/android/resolve_target.prf b/mkspecs/features/android/resolve_target.prf
index 2bbeffcfd0..25682cd894 100644
--- a/mkspecs/features/android/resolve_target.prf
+++ b/mkspecs/features/android/resolve_target.prf
@@ -1,2 +1,3 @@
+load(resolve_config)
load(android)
load(resolve_target)
diff --git a/mkspecs/features/data/macros.cpp b/mkspecs/features/data/macros.cpp
index e677dace12..9dcb8f0914 100644
--- a/mkspecs/features/data/macros.cpp
+++ b/mkspecs/features/data/macros.cpp
@@ -13,17 +13,17 @@ QMAKE_APPLE_CC = __APPLE_CC__
#endif
#ifdef __clang__
#ifdef __APPLE_CC__
-QT_APPLE_CLANG_MAJOR_VERSION = __clang_major__
-QT_APPLE_CLANG_MINOR_VERSION = __clang_minor__
-QT_APPLE_CLANG_PATCH_VERSION = __clang_patchlevel__
+QMAKE_APPLE_CLANG_MAJOR_VERSION = __clang_major__
+QMAKE_APPLE_CLANG_MINOR_VERSION = __clang_minor__
+QMAKE_APPLE_CLANG_PATCH_VERSION = __clang_patchlevel__
#else
-QT_CLANG_MAJOR_VERSION = __clang_major__
-QT_CLANG_MINOR_VERSION = __clang_minor__
-QT_CLANG_PATCH_VERSION = __clang_patchlevel__
+QMAKE_CLANG_MAJOR_VERSION = __clang_major__
+QMAKE_CLANG_MINOR_VERSION = __clang_minor__
+QMAKE_CLANG_PATCH_VERSION = __clang_patchlevel__
#endif
#endif
#ifdef __GNUC__
-QT_GCC_MAJOR_VERSION = __GNUC__
-QT_GCC_MINOR_VERSION = __GNUC_MINOR__
-QT_GCC_PATCH_VERSION = __GNUC_PATCHLEVEL__
+QMAKE_GCC_MAJOR_VERSION = __GNUC__
+QMAKE_GCC_MINOR_VERSION = __GNUC_MINOR__
+QMAKE_GCC_PATCH_VERSION = __GNUC_PATCHLEVEL__
#endif
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index d18604e0b8..7e027325bd 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -71,6 +71,11 @@ debug {
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE
}
+stack_protector_strong {
+ QMAKE_CFLAGS += $$QMAKE_CFLAGS_STACK_PROTECTOR_STRONG
+ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_STACK_PROTECTOR_STRONG
+}
+
# disable special linker flags for host builds (no proper test for host support yet)
!host_build|!cross_compile {
use_gold_linker: QMAKE_LFLAGS += $$QMAKE_LFLAGS_USE_GOLD
diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf
index 2bba73d795..395ac34001 100644
--- a/mkspecs/features/mac/default_post.prf
+++ b/mkspecs/features/mac/default_post.prf
@@ -162,8 +162,12 @@ macx-xcode {
else: \
use_flag = -include
+ # Only use Xarch with multi-arch, as the option confuses ccache
+ count(VALID_ARCHS, 1, greaterThan): \
+ QMAKE_CFLAGS_USE_PRECOMPILE += \
+ -Xarch_$${arch}
+
QMAKE_CFLAGS_USE_PRECOMPILE += \
- -Xarch_$${arch} \
$${use_flag}${QMAKE_PCH_OUTPUT_$${arch}}
}
icc_pch_style {
diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf
index 15eb38af31..955933d874 100644
--- a/mkspecs/features/moc.prf
+++ b/mkspecs/features/moc.prf
@@ -31,10 +31,10 @@ if(gcc|intel_icl|msvc):!rim_qcc:!uikit:!no_moc_predefs:if(!macos|count(QMAKE_APP
moc_predefs.name = "Generate moc_predefs.h"
moc_predefs.CONFIG = no_link
gcc: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -dM -E -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
- else:intel_icl: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -QdM -P -Za -Fi${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
+ else:intel_icl: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -QdM -P -Fi${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
else:msvc {
moc_predefs.commands += $$QMAKE_CXX -Bx$$shell_quote($$shell_path($$QMAKE_QMAKE)) $$QMAKE_CXXFLAGS \
- -E -Za ${QMAKE_FILE_IN} 2>NUL >${QMAKE_FILE_OUT}
+ -E ${QMAKE_FILE_IN} 2>NUL >${QMAKE_FILE_OUT}
} else: error("Oops, I messed up")
moc_predefs.output = $$MOC_DIR/moc_predefs.h
moc_predefs.input = MOC_PREDEF_FILE
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
index ea235514b7..1e138730b3 100644
--- a/mkspecs/features/qt_common.prf
+++ b/mkspecs/features/qt_common.prf
@@ -17,6 +17,7 @@ DEFINES *= QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
qtConfig(c++11): CONFIG += c++11 strict_c++
qtConfig(c++14): CONFIG += c++14
qtConfig(c++1z): CONFIG += c++1z
+qtConfig(stack-protector-strong): CONFIG += stack_protector_strong
contains(TEMPLATE, .*lib) {
# module and plugins
if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index 964c2393c2..f3db6b467d 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -326,7 +326,7 @@ defineTest(qtConfParseCommandLine) {
}
defineReplace(qtConfToolchainSupportsFlag) {
- test_out_dir = $$shadowed($$QMAKE_CONFIG_TESTS_DIR)
+ test_out_dir = $$OUT_PWD/$$basename(QMAKE_CONFIG_TESTS_DIR)
test_cmd_base = "$$QMAKE_CD $$system_quote($$system_path($$test_out_dir)) &&"
conftest = "int main() { return 0; }"
@@ -849,7 +849,7 @@ defineTest(qtConfTest_compile) {
isEmpty(host): host = false
test_dir = $$QMAKE_CONFIG_TESTS_DIR/$$test
- test_base_out_dir = $$shadowed($$QMAKE_CONFIG_TESTS_DIR)
+ test_base_out_dir = $$OUT_PWD/$$basename(QMAKE_CONFIG_TESTS_DIR)
test_out_dir = $$test_base_out_dir/$$test
!isEmpty($${1}.pro): \
test_dir = $$test_dir/$$eval($${1}.pro)
diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf
index 46a9c5707a..34bd8f1d78 100644
--- a/mkspecs/features/toolchain.prf
+++ b/mkspecs/features/toolchain.prf
@@ -40,19 +40,38 @@ isEmpty($${target_prefix}.INCDIRS) {
# QMAKE_DEFAULT_*DIRS, because they're handled in a single build pass.
darwin: cxx_flags += -isysroot $$QMAKE_MAC_SDK_PATH
- output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$cxx_flags) -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
+ clang: \
+ # Need to link to pick up library paths
+ cxx_flags += $$QMAKE_LFLAGS_SHLIB -o /dev/null -v -Wl,-v
+ else: \
+ # gcc is fine with just preprocessing
+ cxx_flags += -E -v
+
+ output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$cxx_flags) -xc++ - 2>&1 $$cmd_suffix", lines, ec)
+ !equals(ec, 0): \
+ error("Cannot run compiler '$$QMAKE_CXX'. Maybe you forgot to setup the environment?")
add_includes = false
+ add_libraries = false
for (line, output) {
- line ~= s/^ *// # remove leading spaces
+ line ~= s/^[ \\t]*// # remove leading spaces
contains(line, "LIBRARY_PATH=.*") {
line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH=
paths = $$split(line, $$QMAKE_DIRLIST_SEP)
for (path, paths): \
QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path)
+ } else: contains(line, "Library search paths:") {
+ add_libraries = true
} else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here:
add_includes = true
} else: contains(line, "End of search.*") {
add_includes = false
+ } else: $$add_libraries {
+ # We assume all library search paths are absolute
+ !contains(line, "^/.*") {
+ add_libraries = false
+ next()
+ }
+ QMAKE_DEFAULT_LIBDIRS += $$clean_path($$line)
} else: $$add_includes {
!contains(line, ".* \\(framework directory\\)"): \
QMAKE_DEFAULT_INCDIRS += $$clean_path($$line)
@@ -85,13 +104,19 @@ isEmpty($${target_prefix}.INCDIRS) {
#
defineReplace(qtVariablesFromMSVC) {
- return($$system("$$1 -nologo -E $$2 $$system_quote($$PWD/data/macros.cpp) <NUL 2>NUL", lines))
+ ret = $$system("$$1 -nologo -E $$2 $$system_quote($$PWD/data/macros.cpp) <NUL 2>NUL", lines, ec)
+ !equals(ec, 0): \
+ error("Cannot run compiler '$$1'. Maybe you forgot to setup the environment?")
+ return($$ret)
}
defineReplace(qtVariablesFromGCC) {
null_device = /dev/null
equals(QMAKE_HOST.os, Windows): null_device = NUL
- return($$system("$$1 -E $$system_quote($$PWD/data/macros.cpp) <$$null_device 2>$$null_device", lines))
+ ret = $$system("$$1 -E $$system_quote($$PWD/data/macros.cpp) <$$null_device 2>$$null_device", lines, ec)
+ !equals(ec, 0): \
+ error("Cannot run compiler '$$1'. Maybe you forgot to setup the environment?")
+ return($$ret)
}
isEmpty($${target_prefix}.COMPILER_MACROS) {
@@ -138,35 +163,27 @@ unset(target_prefix)
# Populate QMAKE_COMPILER_DEFINES and some compatibility variables.
# The $$format_number() calls strip leading zeros to avoid misinterpretation as octal.
QMAKE_COMPILER_DEFINES += __cplusplus=$$QT_COMPILER_STDCXX
-!isEmpty(QMAKE_MSC_VER) {
+!isEmpty(QMAKE_MSC_VER): \
QMAKE_COMPILER_DEFINES += _MSC_VER=$$QMAKE_MSC_VER _MSC_FULL_VER=$$QMAKE_MSC_FULL_VER
- QT_MSVC_MAJOR_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\1")
- QT_MSVC_MINOR_VERSION = $$format_number($$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\2"))
- QT_MSVC_PATCH_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\3"))
-}
-!isEmpty(QMAKE_ICC_VER) {
+!isEmpty(QMAKE_ICC_VER): \
QMAKE_COMPILER_DEFINES += __INTEL_COMPILER=$$QMAKE_ICC_VER __INTEL_COMPILER_UPDATE=$$QMAKE_ICC_UPDATE_VER
- QT_ICC_MAJOR_VERSION = $$replace(QMAKE_ICC_VER, "(..)(..)", "\\1")
- QT_ICC_MINOR_VERSION = $$format_number($$replace(QMAKE_ICC_VER, "(..)(..)", "\\2"))
- QT_ICC_PATCH_VERSION = $$QMAKE_ICC_UPDATE_VER
-}
!isEmpty(QMAKE_APPLE_CC): \
QMAKE_COMPILER_DEFINES += __APPLE_CC__=$$QMAKE_APPLE_CC
!isEmpty(QT_APPLE_CLANG_MAJOR_VERSION): \
QMAKE_COMPILER_DEFINES += __clang__ \
- __clang_major__=$$QT_APPLE_CLANG_MAJOR_VERSION \
- __clang_minor__=$$QT_APPLE_CLANG_MINOR_VERSION \
- __clang_patchlevel__=$$QT_APPLE_CLANG_PATCH_VERSION
+ __clang_major__=$$QMAKE_APPLE_CLANG_MAJOR_VERSION \
+ __clang_minor__=$$QMAKE_APPLE_CLANG_MINOR_VERSION \
+ __clang_patchlevel__=$$QMAKE_APPLE_CLANG_PATCH_VERSION
!isEmpty(QT_CLANG_MAJOR_VERSION): \
QMAKE_COMPILER_DEFINES += __clang__ \
- __clang_major__=$$QT_CLANG_MAJOR_VERSION \
- __clang_minor__=$$QT_CLANG_MINOR_VERSION \
- __clang_patchlevel__=$$QT_CLANG_PATCH_VERSION
+ __clang_major__=$$QMAKE_CLANG_MAJOR_VERSION \
+ __clang_minor__=$$QMAKE_CLANG_MINOR_VERSION \
+ __clang_patchlevel__=$$QMAKE_CLANG_PATCH_VERSION
!isEmpty(QT_GCC_MAJOR_VERSION): \
QMAKE_COMPILER_DEFINES += \
- __GNUC__=$$QT_GCC_MAJOR_VERSION \
- __GNUC_MINOR__=$$QT_GCC_MINOR_VERSION \
- __GNUC_PATCHLEVEL__=$$QT_GCC_PATCH_VERSION
+ __GNUC__=$$QMAKE_GCC_MAJOR_VERSION \
+ __GNUC_MINOR__=$$QMAKE_GCC_MINOR_VERSION \
+ __GNUC_PATCHLEVEL__=$$QMAKE_GCC_PATCH_VERSION
QMAKE_CFLAGS += $$QMAKE_CFLAGS_MSVC_COMPAT
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_MSVC_COMPAT
diff --git a/mkspecs/qnx-aarch64le-qcc/qmake.conf b/mkspecs/qnx-aarch64le-qcc/qmake.conf
index 5e3123bece..754bc27358 100644
--- a/mkspecs/qnx-aarch64le-qcc/qmake.conf
+++ b/mkspecs/qnx-aarch64le-qcc/qmake.conf
@@ -7,11 +7,3 @@ DEFINES += _FORTIFY_SOURCE=2
QMAKE_LFLAGS_SHLIB += -Wl,-z,relro -Wl,-z,now
include(../common/qcc-base-qnx-aarch64le.conf)
-
-qtConfig(stack-protector-strong) {
- QMAKE_CFLAGS += -fstack-protector-strong
- QMAKE_CXXFLAGS += -fstack-protector-strong
-} else {
- QMAKE_CFLAGS += -fstack-protector -fstack-protector-all
- QMAKE_CXXFLAGS += -fstack-protector -fstack-protector-all
-}
diff --git a/mkspecs/qnx-x86-64-qcc/qmake.conf b/mkspecs/qnx-x86-64-qcc/qmake.conf
index 2a01ed1405..c479181342 100644
--- a/mkspecs/qnx-x86-64-qcc/qmake.conf
+++ b/mkspecs/qnx-x86-64-qcc/qmake.conf
@@ -5,11 +5,3 @@
QMAKE_LFLAGS_SHLIB += -Wl,-z,relro -Wl,-z,now
include(../common/qcc-base-qnx-x86-64.conf)
-
-qtConfig(stack-protector-strong) {
- QMAKE_CFLAGS += -fstack-protector-strong
- QMAKE_CXXFLAGS += -fstack-protector-strong
-} else {
- QMAKE_CFLAGS += -fstack-protector -fstack-protector-all
- QMAKE_CXXFLAGS += -fstack-protector -fstack-protector-all
-}
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index d3221b7a25..a1f3352aa3 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -176,7 +176,7 @@ MakefileGenerator::initOutPaths()
#ifdef Q_OS_WIN
// We don't want to add a separator for DLLDESTDIR on Windows (###why?)
- if(!(dirs[x] == "DLLDESTDIR"))
+ if (dkey != "DLLDESTDIR")
#endif
{
if(!pathRef.endsWith(Option::dir_sep))
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index 8d5a9a7d0f..b9895fb10d 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -36,6 +36,12 @@
#include <stdlib.h>
#include <time.h>
+#ifdef Q_OS_WIN
+#define NULL_DEVICE "NUL"
+#else
+#define NULL_DEVICE "/dev/null"
+#endif
+
QT_BEGIN_NAMESPACE
MingwMakefileGenerator::MingwMakefileGenerator() : Win32MakefileGenerator()
@@ -318,6 +324,7 @@ void MingwMakefileGenerator::writeBuildRulesPart(QTextStream &t)
if(!project->isEmpty("QMAKE_PRE_LINK"))
t << "\n\t" <<var("QMAKE_PRE_LINK");
if(project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") {
+ t << "\n\t-$(DEL_FILE) $(DESTDIR_TARGET) 2>" NULL_DEVICE;
if (project->values("OBJECTS").count() < var("QMAKE_LINK_OBJECT_MAX").toInt()) {
t << "\n\t$(LIB) $(DESTDIR_TARGET) " << objectsLinkLine << " " ;
} else {
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index 129fb28e01..38bf3a0cbd 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -42,7 +42,6 @@ const char _CLCompile[] = "ClCompile";
const char _ItemGroup[] = "ItemGroup";
const char _Link[] = "Link";
const char _Lib[] = "Lib";
-const char _ManifestTool[] = "ManifestTool";
const char _Midl[] = "Midl";
const char _ResourceCompile[] = "ResourceCompile";
@@ -55,7 +54,6 @@ const char _AdditionalManifestDependencies[] = "AdditionalManifestDependencie
const char _AdditionalOptions[] = "AdditionalOptions";
const char _AdditionalUsingDirectories[] = "AdditionalUsingDirectories";
const char _AllowIsolation[] = "AllowIsolation";
-const char _AlwaysAppend[] = "AlwaysAppend";
const char _ApplicationConfigurationMode[] = "ApplicationConfigurationMode";
const char _AssemblerListingLocation[] = "AssemblerListingLocation";
const char _AssemblerOutput[] = "AssemblerOutput";
@@ -82,7 +80,6 @@ const char _CompileAsWinRT[] = "CompileAsWinRT";
const char _ConfigurationType[] = "ConfigurationType";
const char _CPreprocessOptions[] = "CPreprocessOptions";
const char _CreateHotpatchableImage[] = "CreateHotpatchableImage";
-const char _CreateHotPatchableImage[] = "CreateHotPatchableImage";
const char _Culture[] = "Culture";
const char _DataExecutionPrevention[] = "DataExecutionPrevention";
const char _DebugInformationFormat[] = "DebugInformationFormat";
@@ -92,7 +89,6 @@ const char _DelaySign[] = "DelaySign";
const char _DeleteExtensionsOnClean[] = "DeleteExtensionsOnClean";
const char _DisableLanguageExtensions[] = "DisableLanguageExtensions";
const char _DisableSpecificWarnings[] = "DisableSpecificWarnings";
-const char _DisplayLibrary[] = "DisplayLibrary";
const char _DLLDataFileName[] = "DLLDataFileName";
const char _EmbedManagedResourceFile[] = "EmbedManagedResourceFile";
const char _EmbedManifest[] = "EmbedManifest";
@@ -166,8 +162,6 @@ const char _ModuleDefinitionFile[] = "ModuleDefinitionFile";
const char _MultiProcessorCompilation[] = "MultiProcessorCompilation";
const char _Name[] = "Name";
const char _NoEntryPoint[] = "NoEntryPoint";
-const char _NullTerminateStrings[] = "NullTerminateStrings";
-const char _ObjectFiles[] = "ObjectFiles";
const char _ObjectFileName[] = "ObjectFileName";
const char _OmitDefaultLibName[] = "OmitDefaultLibName";
const char _OmitFramePointers[] = "OmitFramePointers";
@@ -195,7 +189,6 @@ const char _ProxyFileName[] = "ProxyFileName";
const char _RandomizedBaseAddress[] = "RandomizedBaseAddress";
const char _RedirectOutputAndErrors[] = "RedirectOutputAndErrors";
const char _RegisterOutput[] = "RegisterOutput";
-const char _RemoveObjects[] = "RemoveObjects";
const char _ResourceOutputFileName[] = "ResourceOutputFileName";
const char _RuntimeLibrary[] = "RuntimeLibrary";
const char _RuntimeTypeInfo[] = "RuntimeTypeInfo";
@@ -211,7 +204,6 @@ const char _StringPooling[] = "StringPooling";
const char _StripPrivateSymbols[] = "StripPrivateSymbols";
const char _StructMemberAlignment[] = "StructMemberAlignment";
const char _SubSystem[] = "SubSystem";
-const char _SupportNobindOfDelayLoadedDLL[] = "SupportNobindOfDelayLoadedDLL";
const char _SupportUnloadOfDelayLoadedDLL[] = "SupportUnloadOfDelayLoadedDLL";
const char _SuppressCompilerWarnings[] = "SuppressCompilerWarnings";
const char _SuppressStartupBanner[] = "SuppressStartupBanner";
@@ -220,8 +212,6 @@ const char _SwapRunFromNet[] = "SwapRunFromNet";
const char _TargetEnvironment[] = "TargetEnvironment";
const char _TargetMachine[] = "TargetMachine";
const char _TerminalServerAware[] = "TerminalServerAware";
-const char _TrackerLogDirectory[] = "TrackerLogDirectory";
-const char _TreatLibWarningAsErrors[] = "TreatLibWarningAsErrors";
const char _TreatLinkerWarningAsErrors[] = "TreatLinkerWarningAsErrors";
const char _TreatSpecificWarningsAsErrors[] = "TreatSpecificWarningsAsErrors";
const char _TreatWarningAsError[] = "TreatWarningAsError";
@@ -240,8 +230,6 @@ const char _UseOfATL[] = "UseOfATL";
const char _UseOfMfc[] = "UseOfMfc";
const char _UseUnicodeForAssemblerListing[] = "UseUnicodeForAssemblerListing";
const char _ValidateAllParameters[] = "ValidateAllParameters";
-const char _VCCustomBuildTool[] = "VCCustomBuildTool";
-const char _Verbose[] = "Verbose";
const char _Version[] = "Version";
const char _WarnAsError[] = "WarnAsError";
const char _WarningLevel[] = "WarningLevel";
@@ -1450,7 +1438,6 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool)
<< attrTagX(_AdditionalIncludeDirectories, tool.AdditionalIncludeDirectories, ";")
<< attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
<< attrTagX(_AdditionalUsingDirectories, tool.AdditionalUsingDirectories, ";")
-//unused << attrTagS(_AlwaysAppend, tool.AlwaysAppend)
<< attrTagS(_AssemblerListingLocation, tool.AssemblerListingLocation)
<< attrTagS(_AssemblerOutput, toString(tool.AssemblerOutput))
<< attrTagS(_BasicRuntimeChecks, toString(tool.BasicRuntimeChecks))
@@ -1486,7 +1473,6 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool)
<< attrTagT(_MinimalRebuild, tool.MinimalRebuild)
<< attrTagT(_MultiProcessorCompilation, tool.MultiProcessorCompilation)
<< attrTagS(_ObjectFileName, tool.ObjectFile)
-//unused << attrTagX(_ObjectFiles, tool.ObjectFiles, ";")
<< attrTagT(_OmitDefaultLibName, tool.OmitDefaultLibName)
<< attrTagT(_OmitFramePointers, tool.OmitFramePointers)
<< attrTagT(_OpenMPSupport, tool.OpenMP)
@@ -1538,7 +1524,6 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCLinkerTool &tool)
<< attrTagS(_CLRSupportLastError, tool.CLRSupportLastError)
<< attrTagS(_CLRThreadAttribute, tool.CLRThreadAttribute)
<< attrTagT(_CLRUnmanagedCodeCheck, tool.CLRUnmanagedCodeCheck)
-//unused << attrTagS(_CreateHotPatchableImage, tool.CreateHotPatchableImage)
<< attrTagT(_DataExecutionPrevention, tool.DataExecutionPrevention)
<< attrTagX(_DelayLoadDLLs, tool.DelayLoadDLLs, ";")
<< attrTagT(_DelaySign, tool.DelaySign)
@@ -1690,22 +1675,13 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCLibrarianTool &tool)
<< attrTagX(_AdditionalDependencies, tool.AdditionalDependencies, ";")
<< attrTagX(_AdditionalLibraryDirectories, tool.AdditionalLibraryDirectories, ";")
<< attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
-//unused << attrTagS(_DisplayLibrary, tool.DisplayLibrary)
-//unused << attrTagS(_ErrorReporting, tool.ErrorReporting)
<< attrTagX(_ExportNamedFunctions, tool.ExportNamedFunctions, ";")
<< attrTagX(_ForceSymbolReferences, tool.ForceSymbolReferences, ";")
<< attrTagT(_IgnoreAllDefaultLibraries, tool.IgnoreAllDefaultLibraries)
<< attrTagX(_IgnoreSpecificDefaultLibraries, tool.IgnoreDefaultLibraryNames, ";")
-//unused << attrTagT(_LinkTimeCodeGeneration, tool.LinkTimeCodeGeneration)
<< attrTagS(_ModuleDefinitionFile, tool.ModuleDefinitionFile)
-//unused << attrTagS(_Name, tool.Name)
<< attrTagS(_OutputFile, tool.OutputFile)
-//unused << attrTagX(_RemoveObjects, tool.RemoveObjects, ";")
-//unused << attrTagS(_SubSystem, tool.SubSystem)
<< attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
-//unused << attrTagS(_TargetMachine, tool.TargetMachine)
-//unused << attrTagT(_TreatLibWarningAsErrors, tool.TreatLibWarningAsErrors)
-//unused << attrTagT(_Verbose, tool.Verbose)
<< closetag(_Lib);
}
@@ -1717,13 +1693,10 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCResourceCompilerTool &tool)
<< attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
<< attrTagS(_Culture, toString(tool.Culture))
<< attrTagT(_IgnoreStandardIncludePath, tool.IgnoreStandardIncludePath)
-//unused << attrTagT(_NullTerminateStrings, tool.NullTerminateStrings)
<< attrTagX(_PreprocessorDefinitions, tool.PreprocessorDefinitions, ";")
<< attrTagS(_ResourceOutputFileName, tool.ResourceOutputFileName)
<< attrTagT(_ShowProgress, toTriState(tool.ShowProgress))
<< attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
-//unused << attrTagS(_TrackerLogDirectory, tool.TrackerLogDirectory)
-//unused << attrTagS(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions)
<< closetag(_ResourceCompile);
}
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index 0d1a294b28..300792c5af 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -47,15 +47,15 @@ static DotNET vsVersionFromString(const char *versionString)
DotNET version;
};
static VSVersionMapping mapping[] = {
- "7.0", NET2002,
- "7.1", NET2003,
- "8.0", NET2005,
- "9.0", NET2008,
- "10.0", NET2010,
- "11.0", NET2012,
- "12.0", NET2013,
- "14.0", NET2015,
- "15.0", NET2017
+ { "7.0", NET2002 },
+ { "7.1", NET2003 },
+ { "8.0", NET2005 },
+ { "9.0", NET2008 },
+ { "10.0", NET2010 },
+ { "11.0", NET2012 },
+ { "12.0", NET2013 },
+ { "14.0", NET2015 },
+ { "15.0", NET2017 }
};
DotNET result = NETUnknown;
for (const auto entry : mapping) {
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index dfbb4c69ea..cc1aaf3817 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -111,8 +111,8 @@ const char _slnExtSections[] = "\n\tGlobalSection(ExtensibilityGlobals) = pos
VcprojGenerator::VcprojGenerator()
: Win32MakefileGenerator(),
is64Bit(false),
- projectWriter(0),
- customBuildToolFilterFileSuffix(QStringLiteral(".cbt"))
+ customBuildToolFilterFileSuffix(QStringLiteral(".cbt")),
+ projectWriter(0)
{
}
diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.cpp b/src/3rdparty/angle/src/libANGLE/formatutils.cpp
index 3a4df126c5..f8b9a8bab8 100644
--- a/src/3rdparty/angle/src/libANGLE/formatutils.cpp
+++ b/src/3rdparty/angle/src/libANGLE/formatutils.cpp
@@ -652,7 +652,7 @@ const Type &GetTypeInfo(GLenum type)
}
}
-const InternalFormat &GetInternalFormatInfo(GLenum internalFormat)
+const InternalFormat GetInternalFormatInfo(GLenum internalFormat)
{
const InternalFormatInfoMap &formatMap = GetInternalFormatMap();
InternalFormatInfoMap::const_iterator iter = formatMap.find(internalFormat);
diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.h b/src/3rdparty/angle/src/libANGLE/formatutils.h
index 6863e4ddc4..2165e6badd 100644
--- a/src/3rdparty/angle/src/libANGLE/formatutils.h
+++ b/src/3rdparty/angle/src/libANGLE/formatutils.h
@@ -79,7 +79,7 @@ struct InternalFormat
GLint skipRows,
GLint skipPixels) const;
};
-const InternalFormat &GetInternalFormatInfo(GLenum internalFormat);
+const InternalFormat GetInternalFormatInfo(GLenum internalFormat);
GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type);
diff --git a/src/3rdparty/angle/src/libANGLE/validationES3.cpp b/src/3rdparty/angle/src/libANGLE/validationES3.cpp
index e08e5d261b..2db64ec4cc 100644
--- a/src/3rdparty/angle/src/libANGLE/validationES3.cpp
+++ b/src/3rdparty/angle/src/libANGLE/validationES3.cpp
@@ -775,20 +775,20 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
// with the values of the source buffer's [channel sizes]. Table 3.17 is used if the
// FRAMEBUFFER_ATTACHMENT_ENCODING is LINEAR and table 3.18 is used if the FRAMEBUFFER_ATTACHMENT_ENCODING
// is SRGB.
- const InternalFormat *sourceEffectiveFormat = NULL;
+ InternalFormat sourceEffectiveFormat;
if (readBufferHandle != 0)
{
// Not the default framebuffer, therefore the read buffer must be a user-created texture or renderbuffer
if (framebufferInternalFormatInfo.pixelBytes > 0)
{
- sourceEffectiveFormat = &framebufferInternalFormatInfo;
+ sourceEffectiveFormat = framebufferInternalFormatInfo;
}
else
{
// Renderbuffers cannot be created with an unsized internal format, so this must be an unsized-format
// texture. We can use the same table we use when creating textures to get its effective sized format.
GLenum sizedInternalFormat = GetSizedInternalFormat(framebufferInternalFormatInfo.format, framebufferInternalFormatInfo.type);
- sourceEffectiveFormat = &GetInternalFormatInfo(sizedInternalFormat);
+ sourceEffectiveFormat = GetInternalFormatInfo(sizedInternalFormat);
}
}
else
@@ -800,7 +800,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
GLenum effectiveFormat;
if (GetEffectiveInternalFormat(framebufferInternalFormatInfo, textureInternalFormatInfo, &effectiveFormat))
{
- sourceEffectiveFormat = &GetInternalFormatInfo(effectiveFormat);
+ sourceEffectiveFormat = GetInternalFormatInfo(effectiveFormat);
}
else
{
@@ -816,7 +816,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
(framebufferInternalFormatInfo.blueBits >= 1 && framebufferInternalFormatInfo.blueBits <= 8) &&
(framebufferInternalFormatInfo.alphaBits >= 1 && framebufferInternalFormatInfo.alphaBits <= 8))
{
- sourceEffectiveFormat = &GetInternalFormatInfo(GL_SRGB8_ALPHA8);
+ sourceEffectiveFormat = GetInternalFormatInfo(GL_SRGB8_ALPHA8);
}
else
{
@@ -834,10 +834,10 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
{
// Section 3.8.5 of the GLES 3.0.3 spec, pg 139, requires that, if the destination format is sized,
// component sizes of the source and destination formats must exactly match
- if (textureInternalFormatInfo.redBits != sourceEffectiveFormat->redBits ||
- textureInternalFormatInfo.greenBits != sourceEffectiveFormat->greenBits ||
- textureInternalFormatInfo.blueBits != sourceEffectiveFormat->blueBits ||
- textureInternalFormatInfo.alphaBits != sourceEffectiveFormat->alphaBits)
+ if (textureInternalFormatInfo.redBits != sourceEffectiveFormat.redBits ||
+ textureInternalFormatInfo.greenBits != sourceEffectiveFormat.greenBits ||
+ textureInternalFormatInfo.blueBits != sourceEffectiveFormat.blueBits ||
+ textureInternalFormatInfo.alphaBits != sourceEffectiveFormat.alphaBits)
{
return false;
}
diff --git a/src/3rdparty/atspi2/LICENSE b/src/3rdparty/atspi2/LICENSE
deleted file mode 100644
index dc5f1b170d..0000000000
--- a/src/3rdparty/atspi2/LICENSE
+++ /dev/null
@@ -1,482 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
diff --git a/src/3rdparty/atspi2/atspi/atspi-constants.h b/src/3rdparty/atspi2/atspi/atspi-constants.h
deleted file mode 100644
index 3675bcca1f..0000000000
--- a/src/3rdparty/atspi2/atspi/atspi-constants.h
+++ /dev/null
@@ -1,1333 +0,0 @@
-/*
- * AT-SPI - Assistive Technology Service Provider Interface
- * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
- *
- * Copyright 2010, 2011 Novell, Inc.
- * Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* TODO: Auto-generate this file again
-
-
-
- !\mainpage AT-SPI Interfaces and Subinterfaces
-
- This is the main documentation page for the
- Assistive Technology Service Provider Interface (AT-SPI).
-
- \section apps Applications and Interface Components
- Namespace Accessibility includes service APIs implemented by
- participating applications and their user interface components:\n\n
- Accessibility::Accessible\n
- Accessibility::Application\n
- Accessibility::Desktop\n
- Accessibility::Collecgtion\n
- Accessibility::Component\n
- Accessibility::Hypertext\n
- Accessibility::Image\n
- Accessibility::Selection\n
- Accessibility::Table\n
- Accessibility::Text\n
- Accessibility::EditableText\n
- Accessibility::Value
-
- \section types Enumerated Types
- Accessibility defines a number of key enumerated types, including:\n\n
- Accessibility::RelationType\n
- Accessibility::Role\n
- Accessibility::StateType\n
- Accessibility::Event\n
- Accessibility::EventDetails \n
-
- \section Registry
- Accessibility also includes Accessibility::Registry,
- which is the service used by assistive technologies and related
- AT-SPI clients to register interest in certain classes of events,
- enumerate the currently available desktop and application list,
- and to synthesize certain kinds of device events.
-
- \section listeners Event Listener Interfaces
- Accessibility::EventListener\n
- Accessibility::DeviceEventListener
-
- \section helpers Helper Interfaces
-
- The following interfaces may be implemented by assistive technologies
- themselves, in order to export their services in a consistent manner or
- in order to interoperate with other applications or desktop services.\n
-
- Accessibility::LoginHelper : Implemented by adaptive technologies which
- need to participate in user-authentication or login activities, and which
- therefore may need negotiation with authentication agents or processes.\n
-
- Accessibility::Selector [NEW]: Implemented by user agents or assistive
- technologies which export lists of choices from which the end-user is
- expected to make selections. Useful for various types of remote
- activation or intercommunication between multiple ATs.
-
- */
-
-#ifndef _ATSPI_CONSTANTS_H_
-#define _ATSPI_CONSTANTS_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * AtspiLocaleType:
- * @ATSPI_LOCALE_TYPE_MESSAGES: For localizable natural-language messages.
- * @ATSPI_LOCALE_TYPE_COLLATE: For regular expression matching and string
- * collation.
- * @ATSPI_LOCALE_TYPE_CTYPE: For regular expression matching, character
- * classification, conversion, case-sensitive comparison, and wide character
- * functions.
- * @ATSPI_LOCALE_TYPE_MONETARY: For monetary formatting.
- * @ATSPI_LOCALE_TYPE_NUMERIC: For number formatting (such as the decimal
- * point and the thousands separator).
- * @ATSPI_LOCALE_TYPE_TIME: For time and date formatting.
- *
- * Used by interfaces #AtspiText and #AtspiDocument, this
- * enumeration corresponds to the POSIX 'setlocale' enum values.
- *
- **/
-typedef enum {
- ATSPI_LOCALE_TYPE_MESSAGES,
- ATSPI_LOCALE_TYPE_COLLATE,
- ATSPI_LOCALE_TYPE_CTYPE,
- ATSPI_LOCALE_TYPE_MONETARY,
- ATSPI_LOCALE_TYPE_NUMERIC,
- ATSPI_LOCALE_TYPE_TIME,
-} AtspiLocaleType;
-
-/**
- * ATSPI_LOCALE_TYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiLocaleType.
- **/
-#define ATSPI_LOCALE_TYPE _COUNT(5+1)
-
-/**
- * AtspiCoordType:
- * @ATSPI_COORD_TYPE_SCREEN: Specifies xy coordinates relative to the screen.
- * @ATSPI_COORD_TYPE_WINDOW: Specifies xy coordinates relative to the widget's
- * top-level window.
- *
- * Enumeration used by #AtspiComponent, #AtspiImage, and #AtspiText interfaces
- * to specify whether coordinates are relative to the window or the screen.
- *
- **/
-typedef enum {
- ATSPI_COORD_TYPE_SCREEN,
- ATSPI_COORD_TYPE_WINDOW,
-} AtspiCoordType;
-
-/**
- * ATSPI_COORD_TYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiCoordType.
- **/
-#define ATSPI_COORD_TYPE_COUNT (1+1)
-
-/**
- * AtspiCollectionSortOrder:
- * @ATSPI_Collection_SORT_ORDER_INVALID:
- * @ATSPI_Collection_SORT_ORDER_CANONICAL:
- * @ATSPI_Collection_SORT_ORDER_FLOW:
- * @ATSPI_Collection_SORT_ORDER_TAB:
- * @ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL:
- * @ATSPI_Collection_SORT_ORDER_REVERSE_FLOW:
- * @ATSPI_Collection_SORT_ORDER_REVERSE_TAB:
- * @ATSPI_Collection_SORT_ORDER_LAST_DEFINED:
- *
- * Enumeration used by interface #AtspiCollection to specify
- * the way #AtspiAccesible objects should be sorted.
- *
- **/
-typedef enum {
- ATSPI_Collection_SORT_ORDER_INVALID,
- ATSPI_Collection_SORT_ORDER_CANONICAL,
- ATSPI_Collection_SORT_ORDER_FLOW,
- ATSPI_Collection_SORT_ORDER_TAB,
- ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL,
- ATSPI_Collection_SORT_ORDER_REVERSE_FLOW,
- ATSPI_Collection_SORT_ORDER_REVERSE_TAB,
- ATSPI_Collection_SORT_ORDER_LAST_DEFINED,
-} AtspiCollectionSortOrder;
-
-/**
- * ATSPI_SORTORDER_COUNT:
- *
- * One higher than the highest valid value of #AtspiCollectionSortOrder.
- */
-#define ATSPI_SORTORDER_COUNT (7+1)
-
-/**
- * AtspiCollectionMatchType:
- * @ATSPI_Collection_MATCH_INVALID: Indicates an error condition or
- * uninitialized value.
- * @ATSPI_Collection_MATCH_ALL: #TRUE if all of the criteria are met.
- * @ATSPI_Collection_MATCH_ANY: #TRUE if any of the criteria are met.
- * @ATSPI_Collection_MATCH_NONE: #TRUE if none of the criteria are met.
- * @ATSPI_Collection_MATCH_EMPTY: Same as @ATSPI_Collection_MATCH_ALL if
- * the criteria is non-empty; for empty criteria this rule requires returned
- * value to also have empty set.
- * @ATSPI_Collection_MATCH_LAST_DEFINED: Used only to determine the end of the
- * enumeration.
- *
- * Enumeration used by #AtspiMatchRule to specify
- * how to interpret #AtspiAccessible objects.
- *
- **/
-typedef enum {
- ATSPI_Collection_MATCH_INVALID,
- ATSPI_Collection_MATCH_ALL,
- ATSPI_Collection_MATCH_ANY,
- ATSPI_Collection_MATCH_NONE,
- ATSPI_Collection_MATCH_EMPTY,
- ATSPI_Collection_MATCH_LAST_DEFINED,
-} AtspiCollectionMatchType;
-
-/**
- * ATSPI_MATCHTYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiCollectionMatchType.
- **/
-#define ATSPI_MATCHTYPES_COUNT (5+1)
-
-/**
- * AtspiCollectionTreeTraversalType:
- * @ATSPI_Collection_TREE_RESTRICT_CHILDREN:
- * @ATSPI_Collection_TREE_RESTRICT_SIBLING:
- * @ATSPI_Collection_TREE_INORDER:
- * @ATSPI_Collection_TREE_LAST_DEFINED:
- *
- * Enumeration used by interface #AtspiCollection to specify
- * restrictions on #AtspiAccesible objects to be traversed.
- *
- **/
-typedef enum {
- ATSPI_Collection_TREE_RESTRICT_CHILDREN,
- ATSPI_Collection_TREE_RESTRICT_SIBLING,
- ATSPI_Collection_TREE_INORDER,
- ATSPI_Collection_TREE_LAST_DEFINED,
-} AtspiCollectionTreeTraversalType;
-
-/**
- * ATSPI_TREETRAVERSALTYPE_COUNT:
- *
- * One higher than the highest valid value of
- * #AtspiCollection_TreeTraversalType.
- */
-#define ATSPI_TREETRAVERSALTYPE _COUNT(3+1)
-
-/**
- * AtspiComponentLayer:
- * @ATSPI_LAYER_INVALID: Indicates an error condition or uninitialized value.
- * @ATSPI_LAYER_BACKGROUND: The bottom-most layer, over which everything else
- * is painted. The 'desktop background' is generally in this layer.
- * @ATSPI_LAYER_CANVAS: The 'background' layer for most content renderers and
- * UI #AtspiComponent containers.
- * @ATSPI_LAYER_WIDGET: The layer in which the majority of ordinary
- * 'foreground' widgets reside.
- * @ATSPI_LAYER_MDI: A special layer between @ATSPI_LAYER_CANVAS and
- * @ATSPI_LAYER_WIDGET, in which the 'pseudo windows' (e.g. the MDI frames)
- * reside. See #atspi_component_get_mdi_z_order.
- * @ATSPI_LAYER_POPUP: A layer for popup window content, above
- * @ATSPI_LAYER_WIDGET.
- * @ATSPI_LAYER_OVERLAY: The topmost layer.
- * @ATSPI_LAYER_WINDOW: The layer in which a toplevel window background usually
- * resides.
- * @ATSPI_LAYER_LAST_DEFINED: Used only to determine the end of the
- * enumeration.
- *
- * The #AtspiComponentLayer of an #AtspiComponent instance indicates its
- * relative stacking order with respect to the onscreen visual representation
- * of the UI. #AtspiComponentLayer, in combination with #AtspiComponent bounds
- * information, can be used to compute the visibility of all or part of a
- * component. This is important in programmatic determination of
- * region-of-interest for magnification, and in
- * flat screen review models of the screen, as well as
- * for other uses. Objects residing in two of the #AtspiComponentLayer
- * categories support further z-ordering information, with respect to their
- * peers in the same layer: namely, @ATSPI_LAYER_WINDOW and
- * @ATSPI_LAYER_MDI. Relative stacking order for other objects within the
- * same layer is not available; the recommended heuristic is
- * first child paints first. In other words, assume that the
- * first siblings in the child list are subject to being overpainted by later
- * siblings if their bounds intersect. The order of layers, from bottom to top,
- * is: @ATSPI_LAYER_BACKGROUND, @ATSPI_LAYER_WINDOW, @ATSPI_LAYER_MDI,
- * @ATSPI_LAYER_CANVAS, @ATSPI_LAYER_WIDGET, @ATSPI_LAYER_POPUP, and
- * @ATSPI_LAYER_OVERLAY.
- *
- */
-typedef enum {
- ATSPI_LAYER_INVALID,
- ATSPI_LAYER_BACKGROUND,
- ATSPI_LAYER_CANVAS,
- ATSPI_LAYER_WIDGET,
- ATSPI_LAYER_MDI,
- ATSPI_LAYER_POPUP,
- ATSPI_LAYER_OVERLAY,
- ATSPI_LAYER_WINDOW,
- ATSPI_LAYER_LAST_DEFINED,
-} AtspiComponentLayer;
-
-/**
- * ATSPI_COMPONENTLAYER_COUNT:
- *
- * One higher than the highest valid value of #AtspiComponentLayer.
- **/
-#define ATSPI_COMPONENTLAYER_COUNT (8+1)
-
-/**
- * AtspiTextBoundaryType:
- * @ATSPI_TEXT_BOUNDARY_CHAR: An #AtspiText instance is bounded by this
- * character only. Start and end offsets differ by one, by definition,
- * for this value.
- * @ATSPI_TEXT_BOUNDARY_WORD_START: Boundary condition is start of a word; i.e.
- * range is from start of one word to the start of another word.
- * @ATSPI_TEXT_BOUNDARY_WORD_END: Boundary condition is the end of a word; i.e.
- * range is from the end of one word to the end of another. Some locales
- * may not distinguish between words and characters or glyphs. In particular,
- * those locales which use wholly or partially ideographic character sets.
- * In these cases, characters may be returned in lieu of multi-character
- * substrings.
- * @ATSPI_TEXT_BOUNDARY_SENTENCE_START: Boundary condition is start of a
- * sentence, as determined by the application. Some locales or
- * character sets may not include explicit sentence delimiters, so this
- * boundary type can not always be honored. Some locales will return lines
- * of text instead of grammatical sentences.
- * @ATSPI_TEXT_BOUNDARY_SENTENCE_END: Boundary condition is end of a sentence,
- * as determined by the application, including the sentence-delimiting
- * character, for instance '.' Some locales or character sets may not
- * include explicit sentence delimiters, so this boundary type can not
- * always be honored. Some locales will return lines of text instead of
- * grammatical sentences.
- * @ATSPI_TEXT_BOUNDARY_LINE_START: Boundary condition is the start of a line;
- * i.e. range is from start of one line to the start of another. This
- * generally means that an end-of-line character will appear at the end of
- * the range.
- * @ATSPI_TEXT_BOUNDARY_LINE_END: Boundary condition is the end of a line; i.e.
- * range is from start of one line to the start of another. This generally
- * means that an end-of-line character will be the first character of the
- * range.
- *
- * Specifies the boundary conditions determining a run of text as returned from
- * #atspi_text_get_text_at_offset, #atspi_text_get_text_after_offset, and
- * #atspi_text_get_text_before_offset.
- *
- * This enumerationis deprecated since 2.9.90 and should not be used. Use
- * AtspiTextGranularity with #atspi_text_get_string_at_offset instead.
- **/
-typedef enum {
- ATSPI_TEXT_BOUNDARY_CHAR,
- ATSPI_TEXT_BOUNDARY_WORD_START,
- ATSPI_TEXT_BOUNDARY_WORD_END,
- ATSPI_TEXT_BOUNDARY_SENTENCE_START,
- ATSPI_TEXT_BOUNDARY_SENTENCE_END,
- ATSPI_TEXT_BOUNDARY_LINE_START,
- ATSPI_TEXT_BOUNDARY_LINE_END,
-} AtspiTextBoundaryType;
-
-/**
- *AtspiTextGranularity:
- *@ATSPI_TEXT_GRANULARITY_CHAR: Granularity is defined by the boundaries between characters
- * (including non-printing characters)
- *@ATSPI_TEXT_GRANULARITY_WORD: Granularity is defined by the boundaries of a word,
- * starting at the beginning of the current word and finishing at the beginning of
- * the following one, if present.
- *@ATSPI_TEXT_GRANULARITY_SENTENCE: Granularity is defined by the boundaries of a sentence,
- * starting at the beginning of the current sentence and finishing at the beginning of
- * the following one, if present.
- *@ATSPI_TEXT_GRANULARITY_LINE: Granularity is defined by the boundaries of a line,
- * starting at the beginning of the current line and finishing at the beginning of
- * the following one, if present.
- *@ATSPI_TEXT_GRANULARITY_PARAGRAPH: Granularity is defined by the boundaries of a paragraph,
- * starting at the beginning of the current paragraph and finishing at the beginning of
- * the following one, if present.
- *
- * Text granularity types used for specifying the granularity of the region of
- * text we are interested in.
- **/
-typedef enum {
- ATSPI_TEXT_GRANULARITY_CHAR,
- ATSPI_TEXT_GRANULARITY_WORD,
- ATSPI_TEXT_GRANULARITY_SENTENCE,
- ATSPI_TEXT_GRANULARITY_LINE,
- ATSPI_TEXT_GRANULARITY_PARAGRAPH
-} AtspiTextGranularity;
-
-/**
- * ATSPI_TEXT_BOUNDARY_TYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiTextBoundaryType.
- */
-#define ATSPI_TEXT_BOUNDARY_TYPE_COUNT (6+1)
-
-/**
- * AtspiTextClipType:
- * @ATSPI_TEXT_CLIP_NONE: No characters/glyphs are omitted.
- * @ATSPI_TEXT_CLIP_MIN: Characters/glyphs clipped by the minimum coordinate
- * are omitted.
- * @ATSPI_TEXT_CLIP_MAX: Characters/glyphs which intersect the maximum
- * coordinate are omitted.
- * @ATSPI_TEXT_CLIP_BOTH: Only glyphs falling entirely within the region
- * bounded by min and max are retained.
- *
- * Enumeration used by interface #AtspiText to indicate
- * how to treat characters intersecting bounding boxes.
- *
- **/
-typedef enum {
- ATSPI_TEXT_CLIP_NONE,
- ATSPI_TEXT_CLIP_MIN,
- ATSPI_TEXT_CLIP_MAX,
- ATSPI_TEXT_CLIP_BOTH,
-} AtspiTextClipType;
-
-/**
- * ATSPI_TEXT_CLIP_TYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiTextClipType.
- */
-#define ATSPI_TEXT_CLIP_TYPE_COUNT (3+1)
-
-/**
- * AtspiStateType:
- * @ATSPI_STATE_INVALID: Indicates an invalid state - probably an error
- * condition.
- * @ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or
- * is an active subelement within a container or table.
- * @ATSPI_STATE_ARMED: Indicates that the object is armed.
- * @ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen
- * representation is in the process of changing, or the object is
- * temporarily unavailable for interaction due to activity already in progress.
- * @ATSPI_STATE_CHECKED: Indicates this object is currently checked.
- * @ATSPI_STATE_COLLAPSED: Indicates this object is collapsed.
- * @ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid
- * backing widget (for instance, if its peer object has been destroyed).
- * @ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this
- * object.
- * @ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it
- * currently reflects some application state. Objects that are "greyed out"
- * may lack this state, and may lack the @ATSPI_STATE_SENSITIVE if direct
- * user interaction cannot cause them to acquire @ATSPI_STATE_ENABLED.
- * See @ATSPI_STATE_SENSITIVE.
- * @ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive
- * disclosure of its children.
- * @ATSPI_STATE_EXPANDED: Indicates this object is expanded.
- * @ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus,
- * which means all events resulting from typing on the keyboard will
- * normally be passed to it when it has focus.
- * @ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard
- * focus.
- * @ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated
- * tooltip.
- * @ATSPI_STATE_HORIZONTAL: Indicates the orientation of this object is
- * horizontal.
- * @ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is
- * represented only by an icon.
- * @ATSPI_STATE_MODAL: Indicates something must be done with this object
- * before the user can interact with an object in a different window.
- * @ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple
- * lines of text.
- * @ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of
- * its children to be selected at the same time, or in the case of text
- * objects, that the object supports non-contiguous text selections.
- * @ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its
- * rectangular region. It also indicates an alpha value of unity, if it
- * supports alpha blending.
- * @ATSPI_STATE_PRESSED: Indicates this object is currently pressed.
- * @ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not
- * fixed.
- * @ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object
- * that allows its children to be selected and that this child is one of
- * those children that can be selected.
- * @ATSPI_STATE_SELECTED: Indicates this object is the child of an object that
- * allows its children to be selected and that this child is one of those
- * children that has been selected.
- * @ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user
- * interaction. @ATSPI_STATE_SENSITIVE usually accompanies.
- * @ATSPI_STATE_ENABLED for user-actionable controls, but may be found in the
- * absence of @ATSPI_STATE_ENABLED if the current visible state of the control
- * is "disconnected" from the application state. In such cases, direct user
- * interaction can often result in the object gaining @ATSPI_STATE_SENSITIVE,
- * for instance if a user makes an explicit selection using an object whose
- * current state is ambiguous or undefined. See @ATSPI_STATE_ENABLED,
- * @ATSPI_STATE_INDETERMINATE.
- * @ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the
- * object's parent's parent, and so on, are all 'shown' to the end-user,
- * i.e. subject to "exposure" if blocking or obscuring objects do not
- * interpose between this object and the top of the window stack.
- * @ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a
- * single line of text.
- * @ATSPI_STATE_STALE: Indicates that the information returned for this object
- * may no longer be synchronized with the application state. This can occur
- * if the object has @ATSPI_STATE_TRANSIENT, and can also occur towards the
- * end of the object peer's lifecycle.
- * @ATSPI_STATE_TRANSIENT: Indicates this object is transient.
- * @ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical;
- * for example this state may appear on such objects as scrollbars, text
- * objects (with vertical text flow), separators, etc.
- * @ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been
- * explicitly marked for exposure to the user. @ATSPI_STATE_VISIBLE is no
- * guarantee that the object is actually unobscured on the screen, only that
- * it is 'potentially' visible, barring obstruction, being scrolled or clipped
- * out of the field of view, or having an ancestor container that has not yet
- * made visible. A widget is potentially onscreen if it has both
- * @ATSPI_STATE_VISIBLE and @ATSPI_STATE_SHOWING. The absence of
- * @ATSPI_STATE_VISIBLE and @ATSPI_STATE_SHOWING is
- * semantically equivalent to saying that an object is 'hidden'.
- * @ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed"
- * event is sent when children become 'active' (i.e. are selected or
- * navigated to onscreen). Used to prevent need to enumerate all children
- * in very large containers, like tables. The presence of
- * @ATSPI_STATE_MANAGES_DESCENDANTS is an indication to the client that the
- * children should not, and need not, be enumerated by the client.
- * Objects implementing this state are expected to provide relevant state
- * notifications to listening clients, for instance notifications of
- * visibility changes and activation of their contained child objects, without
- * the client having previously requested references to those children.
- * @ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean
- * indicator is in a state other than checked or not checked. This
- * usually means that the boolean value reflected or controlled by the
- * object does not apply consistently to the entire current context.
- * For example, a checkbox for the "Bold" attribute of text may have
- * @ATSPI_STATE_INDETERMINATE if the currently selected text contains a mixture
- * of weight attributes. In many cases interacting with a
- * @ATSPI_STATE_INDETERMINATE object will cause the context's corresponding
- * boolean attribute to be homogenized, whereupon the object will lose
- * @ATSPI_STATE_INDETERMINATE and a corresponding state-changed event will be
- * fired.
- * @ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is
- * 'required' from the user, for instance before completing the
- * processing of a form.
- * @ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content
- * is truncated, e.g. a text value in a spreadsheet cell.
- * @ATSPI_STATE_ANIMATED: Indicates this object's visual representation is
- * dynamic, not static. This state may be applied to an object during an
- * animated 'effect' and be removed from the object once its visual
- * representation becomes static. Some applications, notably content viewers,
- * may not be able to detect all kinds of animated content. Therefore the
- * absence of this state should not be taken as
- * definitive evidence that the object's visual representation is
- * static; this state is advisory.
- * @ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition
- * due to failure of input validation. For instance, a form control may
- * acquire this state in response to invalid or malformed user input.
- * @ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object
- * in question implements some form of typeahead or
- * pre-selection behavior whereby entering the first character of one or more
- * sub-elements causes those elements to scroll into view or become
- * selected. Subsequent character input may narrow the selection further as
- * long as one or more sub-elements match the string. This state is normally
- * only useful and encountered on objects that implement #AtspiSelection.
- * In some cases the typeahead behavior may result in full or partial
- * completion of the data in the input field, in which case
- * these input events may trigger text-changed events from the source.
- * @ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in
- * question supports text selection. It should only be exposed on objects
- * which implement the #AtspiText interface, in order to distinguish this state
- * from @ATSPI_STATE_SELECTABLE, which infers that the object in question is a
- * selectable child of an object which implements #AtspiSelection. While
- * similar, text selection and subelement selection are distinct operations.
- * @ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is
- * the 'default' interaction object in a dialog, i.e. the one that gets
- * activated if the user presses "Enter" when the dialog is initially
- * posted.
- * @ATSPI_STATE_VISITED: This state indicates that the object (typically a
- * hyperlink) has already been activated or invoked, with the result that
- * some backing data has been downloaded or rendered.
- *@ATSPI_STATE_CHECKABLE: Indicates this object has the potential to
- * be checked, such as a checkbox or toggle-able table cell. @Since:
- * 2.12
- *@ATSPI_STATE_HAS_POPUP: Indicates that the object has a popup
- * context menu or sub-level menu which may or may not be
- * showing. This means that activation renders conditional content.
- * Note that ordinary tooltips are not considered popups in this
- * context. @Since: 2.12
- * @ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used
- * as a parameter, it indicates the number of items in the #AtspiStateType
- * enumeration.
- *
- *
- * Enumeration used by various interfaces indicating every possible state
- * an #AtspiAccesible object can assume.
- *
- **/
-typedef enum {
- ATSPI_STATE_INVALID,
- ATSPI_STATE_ACTIVE,
- ATSPI_STATE_ARMED,
- ATSPI_STATE_BUSY,
- ATSPI_STATE_CHECKED,
- ATSPI_STATE_COLLAPSED,
- ATSPI_STATE_DEFUNCT,
- ATSPI_STATE_EDITABLE,
- ATSPI_STATE_ENABLED,
- ATSPI_STATE_EXPANDABLE,
- ATSPI_STATE_EXPANDED,
- ATSPI_STATE_FOCUSABLE,
- ATSPI_STATE_FOCUSED,
- ATSPI_STATE_HAS_TOOLTIP,
- ATSPI_STATE_HORIZONTAL,
- ATSPI_STATE_ICONIFIED,
- ATSPI_STATE_MODAL,
- ATSPI_STATE_MULTI_LINE,
- ATSPI_STATE_MULTISELECTABLE,
- ATSPI_STATE_OPAQUE,
- ATSPI_STATE_PRESSED,
- ATSPI_STATE_RESIZABLE,
- ATSPI_STATE_SELECTABLE,
- ATSPI_STATE_SELECTED,
- ATSPI_STATE_SENSITIVE,
- ATSPI_STATE_SHOWING,
- ATSPI_STATE_SINGLE_LINE,
- ATSPI_STATE_STALE,
- ATSPI_STATE_TRANSIENT,
- ATSPI_STATE_VERTICAL,
- ATSPI_STATE_VISIBLE,
- ATSPI_STATE_MANAGES_DESCENDANTS,
- ATSPI_STATE_INDETERMINATE,
- ATSPI_STATE_REQUIRED,
- ATSPI_STATE_TRUNCATED,
- ATSPI_STATE_ANIMATED,
- ATSPI_STATE_INVALID_ENTRY,
- ATSPI_STATE_SUPPORTS_AUTOCOMPLETION,
- ATSPI_STATE_SELECTABLE_TEXT,
- ATSPI_STATE_IS_DEFAULT,
- ATSPI_STATE_VISITED,
- ATSPI_STATE_CHECKABLE,
- ATSPI_STATE_HAS_POPUP,
- ATSPI_STATE_LAST_DEFINED,
-} AtspiStateType;
-
-/**
- * ATSPI_STATETYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiStateType.
- **/
-#define ATSPI_STATETYPE_COUNT (41+1)
-
-/**
- * AtspiKeyEventType:
- * @ATSPI_KEY_PRESSED:
- * @ATSPI_KEY_RELEASED:
- *
- * Deprecated. Should not be used.
- *
- **/
-typedef enum {
- ATSPI_KEY_PRESSED,
- ATSPI_KEY_RELEASED,
-} AtspiKeyEventType;
-
-/**
- * ATSPI_KEYEVENTTYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiKeyEventType.
- **/
-#define ATSPI_KEYEVENTTYPE_COUNT (1+1)
-
-/**
- * AtspiEventType:
- * @ATSPI_KEY_PRESSED_EVENT: Indicates that a key on a keyboard device was
- * pressed.
- * @ATSPI_KEY_RELEASED_EVENT: Indicates that a key on a keyboard device was
- * released.
- * @ATSPI_BUTTON_PRESSED_EVENT: Indicates that a button on a non-keyboard
- * human interface device (HID) was pressed.
- * @ATSPI_BUTTON_RELEASED_EVENT: Indicates that a button on a non-keyboard
- * human interface device (HID) was released.
- *
- * Enumeration used to specify the event types of interest to an
- * #AtspiEventListener, or
- * to identify the type of an event for which notification has been sent.
- *
- **/
-typedef enum {
- ATSPI_KEY_PRESSED_EVENT,
- ATSPI_KEY_RELEASED_EVENT,
- ATSPI_BUTTON_PRESSED_EVENT,
- ATSPI_BUTTON_RELEASED_EVENT,
-} AtspiEventType;
-
-/**
- * ATSPI_EVENTTYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiEventType.
- */
-#define ATSPI_EVENTTYPE_COUNT (3+1)
-
-/**
- * AtspiKeySynthType:
- * @ATSPI_KEY_PRESS: Emulates the pressing of a hardware keyboard key.
- * @ATSPI_KEY_RELEASE: Emulates the release of a hardware keyboard key.
- * @ATSPI_KEY_PRESSRELEASE: Emulates the pressing and immediate releasing
- * of a hardware keyboard key.
- * @ATSPI_KEY_SYM: A symbolic key event is generated, without specifying a
- * hardware key. Note: if the keysym is not present in the current keyboard
- * map, the #AtspiDeviceEventController instance has a limited ability to
- * generate such keysyms on-the-fly. Reliability of GenerateKeyboardEvent
- * calls using out-of-keymap keysyms will vary from system to system, and on
- * the number of different out-of-keymap keysyms being generated in quick
- * succession.
- * In practice this is rarely significant, since the keysyms of interest to
- * AT clients and keyboard emulators are usually part of the current keymap,
- * i.e., present on the system keyboard for the current locale (even if a
- * physical hardware keyboard is not connected).
- * @ATSPI_KEY_STRING: A string is converted to its equivalent keyboard events
- * and emitted. If the string consists of complex characters or composed
- * characters which are not in the current keymap, string emission is
- * subject to the out-of-keymap limitations described for
- * @ATSPI_KEY_SYM. In practice this limitation primarily effects
- * Chinese and Japanese locales.
- *
- * Enumeration used when synthesizing keyboard input via
- * #atspi_generate_keyboard_event.
- *
- **/
-typedef enum {
- ATSPI_KEY_PRESS,
- ATSPI_KEY_RELEASE,
- ATSPI_KEY_PRESSRELEASE,
- ATSPI_KEY_SYM,
- ATSPI_KEY_STRING,
-} AtspiKeySynthType;
-
-/**
- * ATSPI_KEYSYNTHTYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiKeySynthType.
- **/
-#define ATSPI_KEYSYNTHTYPE_COUNT (4+1)
-
-/**
- * AtspiModifierType:
- * @ATSPI_MODIFIER_SHIFT: The left or right 'Shift' key.
- * @ATSPI_MODIFIER_SHIFTLOCK: The ShiftLock or CapsLock key.
- * @ATSPI_MODIFIER_CONTROL: 'Control'/'Ctrl'.
- * @ATSPI_MODIFIER_ALT: The Alt key (as opposed to AltGr).
- * @ATSPI_MODIFIER_META: Depending on the platform, this may map to 'Window',
- * 'Function', 'Meta', 'Menu', or 'NumLock'. Such 'Meta keys' will
- * map to one of META, META2, META3. On X Windows platforms these META
- * values map to the modifier masks Mod1Mask, Mod2Mask, Mod3Mask, e.g. an
- * event having @ATSPI_MODIFIER_META2 means that the 'Mod2Mask' bit
- * is set in the corresponding XEvent.
- * @ATSPI_MODIFIER_META2: See @ATSPI_MODIFIER_META.
- * @ATSPI_MODIFIER_META3: See @ATSPI_MODIFIER_META.
- * @ATSPI_MODIFIER_NUMLOCK: A symbolic meta key name that is mapped by AT-SPI
- * to the appropriate META value, for the convenience of the client.
- *
- *
- *
- **/
-typedef enum {
- ATSPI_MODIFIER_SHIFT,
- ATSPI_MODIFIER_SHIFTLOCK,
- ATSPI_MODIFIER_CONTROL,
- ATSPI_MODIFIER_ALT,
- ATSPI_MODIFIER_META,
- ATSPI_MODIFIER_META2,
- ATSPI_MODIFIER_META3,
- ATSPI_MODIFIER_NUMLOCK = 14,
-} AtspiModifierType;
-
-/**
- * ATSPI_MODIFIERTYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiModifierType.
- **/
-#define ATSPI_MODIFIERTYPE_COUNT (7+1)
-
-/**
- * AtspiRelationType:
- * @ATSPI_RELATION_NULL: Not a meaningful relationship; clients should not
- * normally encounter this #AtspiRelationType value.
- * @ATSPI_RELATION_LABEL_FOR: Object is a label for one or more other objects.
- * @ATSPI_RELATION_LABELLED_BY: Object is labelled by one or more other
- * objects.
- * @ATSPI_RELATION_CONTROLLER_FOR: Object is an interactive object which
- * modifies the state, onscreen location, or other attributes of one or more
- * target objects.
- * @ATSPI_RELATION_CONTROLLED_BY: Object state, position, etc. is
- * modified/controlled by user interaction with one or more other objects.
- * For instance a viewport or scroll pane may be @ATSPI_RELATION_CONTROLLED_BY
- * scrollbars.
- * @ATSPI_RELATION_MEMBER_OF: Object has a grouping relationship (e.g. 'same
- * group as') to one or more other objects.
- * @ATSPI_RELATION_TOOLTIP_FOR: Object is a tooltip associated with another
- * object.
- * @ATSPI_RELATION_NODE_CHILD_OF: Object is a child of the target.
- * @ATSPI_RELATION_NODE_PARENT_OF: Object is a parent of the target.
- * @ATSPI_RELATION_EXTENDED: Used to indicate that a relationship exists, but
- * its type is not specified in the enumeration.
- * @ATSPI_RELATION_FLOWS_TO: Object renders content which flows logically to
- * another object. For instance, text in a paragraph may flow to another
- * object which is not the 'next sibling' in the accessibility hierarchy.
- * @ATSPI_RELATION_FLOWS_FROM: Reciprocal of @ATSPI_RELATION_FLOWS_TO.
- * @ATSPI_RELATION_SUBWINDOW_OF: Object is visually and semantically considered
- * a subwindow of another object, even though it is not the object's child.
- * Useful when dealing with embedded applications and other cases where the
- * widget hierarchy does not map cleanly to the onscreen presentation.
- * @ATSPI_RELATION_EMBEDS: Similar to @ATSPI_RELATION_SUBWINDOW_OF, but
- * specifically used for cross-process embedding.
- * @ATSPI_RELATION_EMBEDDED_BY: Reciprocal of @ATSPI_RELATION_EMBEDS. Used to
- * denote content rendered by embedded renderers that live in a separate process
- * space from the embedding context.
- * @ATSPI_RELATION_POPUP_FOR: Denotes that the object is a transient window or
- * frame associated with another onscreen object. Similar to @ATSPI_TOOLTIP_FOR,
- * but more general. Useful for windows which are technically toplevels
- * but which, for one or more reasons, do not explicitly cause their
- * associated window to lose 'window focus'. Creation of an @ATSPI_ROLE_WINDOW
- * object with the @ATSPI_RELATION_POPUP_FOR relation usually requires
- * some presentation action on the part
- * of assistive technology clients, even though the previous toplevel
- * @ATSPI_ROLE_FRAME object may still be the active window.
- * @ATSPI_RELATION_PARENT_WINDOW_OF: This is the reciprocal relation to
- * @ATSPI_RELATION_POPUP_FOR.
- * @ATSPI_RELATION_DESCRIPTION_FOR: Indicates that an object provides
- * descriptive information about another object; more verbose than
- * @ATSPI_RELATION_LABEL_FOR.
- * @ATSPI_RELATION_DESCRIBED_BY: Indicates that another object provides
- * descriptive information about this object; more verbose than
- * @ATSPI_RELATION_LABELLED_BY.
- * @ATSPI_RELATION_LAST_DEFINED: Do not use as a parameter value, used to
- * determine the size of the enumeration.
- *
- * #AtspiRelationType specifies a relationship between objects
- * (possibly one-to-many
- * or many-to-one) outside of the normal parent/child hierarchical
- * relationship. It allows better semantic identification of how objects
- * are associated with one another. For instance the
- * @ATSPI_RELATION_LABELLED_BY
- * relationship may be used to identify labelling information that should
- * accompany the accessible name property when presenting an object's content or
- * identity to the end user. Similarly,
- * @ATSPI_RELATION_CONTROLLER_FOR can be used
- * to further specify the context in which a valuator is useful, and/or the
- * other UI components which are directly effected by user interactions with
- * the valuator. Common examples include association of scrollbars with the
- * viewport or panel which they control.
- *
- *
- * Enumeration used to specify
- * the type of relation encapsulated in an #AtspiRelation object.
- *
- **/
-typedef enum {
- ATSPI_RELATION_NULL,
- ATSPI_RELATION_LABEL_FOR,
- ATSPI_RELATION_LABELLED_BY,
- ATSPI_RELATION_CONTROLLER_FOR,
- ATSPI_RELATION_CONTROLLED_BY,
- ATSPI_RELATION_MEMBER_OF,
- ATSPI_RELATION_TOOLTIP_FOR,
- ATSPI_RELATION_NODE_CHILD_OF,
- ATSPI_RELATION_NODE_PARENT_OF,
- ATSPI_RELATION_EXTENDED,
- ATSPI_RELATION_FLOWS_TO,
- ATSPI_RELATION_FLOWS_FROM,
- ATSPI_RELATION_SUBWINDOW_OF,
- ATSPI_RELATION_EMBEDS,
- ATSPI_RELATION_EMBEDDED_BY,
- ATSPI_RELATION_POPUP_FOR,
- ATSPI_RELATION_PARENT_WINDOW_OF,
- ATSPI_RELATION_DESCRIPTION_FOR,
- ATSPI_RELATION_DESCRIBED_BY,
- ATSPI_RELATION_LAST_DEFINED,
-} AtspiRelationType;
-
-/**
- * ATSPI_RELATIONTYPE_COUNT:
- *
- * One higher than the highest valid value of #AtspiRelationType.
- **/
-#define ATSPI_RELATIONTYPE_COUNT (19+1)
-
-/**
- * AtspiRole:
- * @ATSPI_ROLE_INVALID: A role indicating an error condition, such as
- * uninitialized Role data.
- * @ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard
- * accelerators for the parent.
- * @ATSPI_ROLE_ALERT: Object is used to alert the user about something.
- * @ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some
- * kind.
- * @ATSPI_ROLE_ARROW: Object is a 2d directional indicator.
- * @ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged
- * into a 2d list.
- * @ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap
- * events.
- * @ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and
- * provides a separate indicator for the current state.
- * @ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box. See
- * @ATSPI_ROLE_CHECK_BOX.
- * @ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a
- * color.
- * @ATSPI_ROLE_COLUMN_HEADER: The header for a column of data.
- * @ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from.
- * @ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date.
- * @ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE.
- * @ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and
- * iconified versions of those internal frames.
- * @ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a
- * visual element, or which displays a value via such a rotating element.
- * @ATSPI_ROLE_DIALOG: A top level window with title bar and a border.
- * @ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through
- * and select the contents of a directory.
- * @ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in
- * the directory and lets the user select a file, browse a different
- * directory, or specify a filename.
- * @ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface
- * elements.
- * @ATSPI_ROLE_FILLER: A object that fills up space in a user interface.
- * @ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use.
- * @ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font.
- * @ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar,
- * etc.
- * @ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of
- * all panes beneath it.
- * @ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children
- * represent the document content.
- * @ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate
- * components.
- * @ATSPI_ROLE_IMAGE: An image, typically static.
- * @ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop
- * pane.
- * @ATSPI_ROLE_LABEL: An object used to present an icon or short string in an
- * interface.
- * @ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be
- * drawn in layers, providing a form of stacking order.
- * @ATSPI_ROLE_LIST: An object that presents a list of objects to the user and
- * allows the user to select one or more of them.
- * @ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list.
- * @ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a
- * list of actions the user can choose from.
- * @ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary
- * dialog box of an application that contains a list of menus the user can
- * choose from.
- * @ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents
- * an action the user can choose.
- * @ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a
- * dialog.
- * @ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list.
- * @ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or
- * page tabs), one at a time,through some mechanism provided by the
- * object.
- * @ATSPI_ROLE_PANEL: A generic container that is often used to group objects.
- * @ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places
- * where the text content is not shown visibly to the user.
- * @ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the
- * user a list of choices, and then hides when the user selects one of those
- * choices.
- * @ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has
- * been completed.
- * @ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the
- * application to do something.
- * @ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other
- * radio buttons in the same group to become unchecked when this one is
- * checked.
- * @ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button"
- * . See @ATSPI_ROLE_RADIO_BUTTON.
- * @ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a
- * layered pane as its children.
- * @ATSPI_ROLE_ROW_HEADER: The header for a row of data.
- * @ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to
- * incrementally view a large amount of data by moving the bounds of a
- * viewport along a one-dimensional axis.
- * @ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view
- * a large amount of information. @ATSPI_ROLE_SCROLL_PANE objects are usually
- * accompanied by @ATSPI_ROLE_SCROLL_BAR controllers, on which the
- * @ATSPI_RELATION_CONTROLLER_FOR and @ATSPI_RELATION_CONTROLLED_BY
- * reciprocal relations are set. See #atspi_get_relation_set.
- * @ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a
- * visible and logical separation of the contents in a menu.
- * @ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded
- * range.
- * @ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to
- * be selected, and which displays the current choice. Unlike
- * @ATSPI_ROLE_SCROLL_BAR, @ATSPI_ROLE_SLIDER objects need not control
- * 'viewport'-like objects.
- * @ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels
- * at the same time.
- * @ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information
- * (c.f. @ATSPI_ROLE_PROGRESS_BAR)
- * @ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows
- * and columns.
- * @ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. Note:
- * Table cells need not have @ATSPI_ROLE_TABLE_CELL, other
- * #AtspiRoleType values are valid as well.
- * @ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column
- * in an #AtspiTable.
- * @ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a
- * #AtspiTable. #AtspiTable rows and columns may also be labelled via the
- * @ATSPI_RELATION_LABEL_FOR/@ATSPI_RELATION_LABELLED_BY relationships.
- * See #atspi_get_relation_set.
- * @ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar
- * and shown in its own window.
- * @ATSPI_ROLE_TERMINAL: An object that emulates a terminal.
- * @ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific
- * type.
- * @ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or
- * unchecked, but does not procide a separate indicator for the current
- * state.
- * @ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or
- * toggle buttons.
- * @ATSPI_ROLE_TOOL_TIP: An object that provides information about another
- * object.
- * @ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the
- * user.
- * @ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and
- * hierarchical info to the user.
- * @ATSPI_ROLE_UNKNOWN: The object contains some #AtspiAccessible information,
- * but its role is not known.
- * @ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to
- * otherwise clip a larger object or content renderer to a specific
- * onscreen viewport.
- * @ATSPI_ROLE_WINDOW: A top level window with no title or border.
- * @ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not
- * included in the core enumeration.
- * @ATSPI_ROLE_HEADER: An object that serves as a document header.
- * @ATSPI_ROLE_FOOTER: An object that serves as a document footer.
- * @ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of
- * text content. See also @ATSPI_ROLE_TEXT.
- * @ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc.
- * for text objects which it controls (should have
- * @ATSPI_RELATION_CONTROLLER_FOR relation to such).
- * @ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible
- * of an application, which may contain @ATSPI_ROLE_FRAME objects or other
- * accessible objects. Children of #AccessibleDesktop objects are generally
- * @ATSPI_ROLE_APPLICATION objects.
- * @ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items
- * for insertion into an entry widget, for instance a list of words for
- * completion of a text entry.
- * @ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar.
- * @ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This
- * role is a "grouping" hint that the contained objects share a context
- * which is different from the container in which this accessible is
- * embedded. In particular, it is used for some kinds of document embedding,
- * and for embedding of out-of-process component, "panel applets", etc.
- * @ATSPI_ROLE_ENTRY: The object is a component whose textual content may be
- * entered or modified by the user, provided @ATSPI_STATE_EDITABLE is present.
- * A readonly @ATSPI_ROLE_ENTRY object (i.e. where @ATSPI_STATE_EDITABLE is
- * not present) implies a read-only 'text field' in a form, as opposed to a
- * title, label, or caption.
- * @ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data.
- * It may contain multiple subelements whose attributes and/or description
- * may be queried to obtain both the quantitative data and information about
- * how the data is being presented. The @ATSPI_LABELLED_BY relation is
- * particularly important in interpreting objects of this type, as is the
- * accessible description property. See @ATSPI_ROLE_CAPTION.
- * @ATSPI_ROLE_CAPTION: The object contains descriptive information, usually
- * textual, about another user interface element such as a table, chart, or
- * image.
- * @ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which
- * contains a view of document content. #AtspiDocument frames may occur within
- * another #AtspiDocument instance, in which case the second document may be
- * said to be embedded in the containing instance. HTML frames are often
- * ATSPI_ROLE_DOCUMENT_FRAME: Either this object, or a singleton descendant,
- * should implement the #AtspiDocument interface.
- * @ATSPI_ROLE_HEADING: The object serves as a heading for content which
- * follows it in a document. The 'heading level' of the heading, if
- * availabe, may be obtained by querying the object's attributes.
- * @ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a
- * page of information. @ATSPI_ROLE_PAGE is used in documents and content which
- * support a paginated navigation model.
- * @ATSPI_ROLE_SECTION: The object is a containing instance of document content
- * which constitutes a particular 'logical' section of the document. The
- * type of content within a section, and the nature of the section division
- * itself, may be obtained by querying the object's attributes. Sections
- * may be nested.
- * @ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in
- * the hierarchy, and is exposed for purely technical reasons. Objects of
- * this role should be ignored by clients, if they are encountered at all.
- * @ATSPI_ROLE_FORM: The object is a containing instance of document content
- * which has within it components with which the user can interact in order
- * to input information; i.e. the object is a container for pushbuttons,
- * comboboxes, text input fields, and other 'GUI' components. @ATSPI_ROLE_FORM
- * should not, in general, be used for toplevel GUI containers or dialogs,
- * but should be reserved for 'GUI' containers which occur within document
- * content, for instance within Web documents, presentations, or text
- * documents. Unlike other GUI containers and dialogs which occur inside
- * application instances, @ATSPI_ROLE_FORM containers' components are
- * associated with the current document, rather than the current foreground
- * application or viewer instance.
- * @ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a
- * hypertext document. Such objects are distinct from 'inline' content
- * which may also use the #AtspiHypertext/#AtspiHyperlink interfacesto indicate
- * the range/location within a text object where an inline or embedded object
- * lies.
- * @ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport
- * which is used to allow composition or input of a 'complex character',
- * in other words it is an "input method window".
- * @ATSPI_ROLE_TABLE_ROW: A row in a table.
- * @ATSPI_ROLE_TREE_ITEM: An object that represents an element of a tree.
- * @ATSPI_ROLE_DOCUMENT_SPREADSHEET: A document frame which contains a
- * spreadsheet.
- * @ATSPI_ROLE_DOCUMENT_PRESENTATION: A document frame which contains a
- * presentation or slide content.
- * @ATSPI_ROLE_DOCUMENT_TEXT: A document frame which contains textual content,
- * such as found in a word processing
- * application.
- * @ATSPI_ROLE_DOCUMENT_WEB: A document frame which contains HTML or other
- * markup suitable for display in a web browser.
- * @ATSPI_ROLE_DOCUMENT_EMAIL: A document frame which contains email content
- * to be displayed or composed either in plain text or
- * HTML.
- * @ATSPI_ROLE_COMMENT: An object found within a document and designed to
- * present a comment, note, or other annotation. In some cases, this object
- * might not be visible until activated.
- * @ATSPI_ROLE_LIST_BOX: A non-collapsible list of choices the user can
- * select from.
- * @ATSPI_ROLE_GROUPING: A group of related widgets. This group typically has
- * a label.
- * @ATSPI_ROLE_IMAGE_MAP: An image map object. Usually a graphic with multiple
- * hotspots, where each hotspot can be activated resulting in the loading of
- * another document or section of a document.
- * @ATSPI_ROLE_NOTIFICATION: A transitory object designed to present a
- * message to the user, typically at the desktop level rather than inside a
- * particular application.
- * @ATSPI_ROLE_INFO_BAR: An object designed to present a message to the user
- * within an existing window.
- *@ATSPI_ROLE_LEVEL_BAR: A bar that serves as a level indicator to, for
- * instance, show the strength of a password or the state of a battery.
- * Since: 2.8
- *@ATSPI_ROLE_TITLE_BAR: A bar that serves as the title of a window or a
- * dialog. @Since: 2.12
- *@ATSPI_ROLE_BLOCK_QUOTE: An object which contains a text section
- * that is quoted from another source. @Since: 2.12
- *@ATSPI_ROLE_AUDIO: An object which represents an audio
- * element. @Since: 2.12
- *@ATSPI_ROLE_VIDEO: An object which represents a video
- * element. @Since: 2.12
- *@ATSPI_ROLE_DEFINITION: A definition of a term or concept. @Since: 2.12
- *@ATSPI_ROLE_ARTICLE: A section of a page that consists of a
- * composition that forms an independent part of a document, page, or
- * site. Examples: A blog entry, a news story, a forum post. @Since:
- * 2.12
- *@ATSPI_ROLE_LANDMARK: A region of a web page intended as a
- * navigational landmark. This is designed to allow Assistive
- * Technologies to provide quick navigation among key regions within a
- * document. @Since: 2.12
- *@ATSPI_ROLE_LOG: A text widget or container holding log content, such
- * as chat history and error logs. In this role there is a
- * relationship between the arrival of new items in the log and the
- * reading order. The log contains a meaningful sequence and new
- * information is added only to the end of the log, not at arbitrary
- * points. @Since: 2.12
- *@ATSPI_ROLE_MARQUEE: A container where non-essential information
- * changes frequently. Common usages of marquee include stock tickers
- * and ad banners. The primary difference between a marquee and a log
- * is that logs usually have a meaningful order or sequence of
- * important content changes. @Since: 2.12
- *@ATSPI_ROLE_MATH: A text widget or container that holds a mathematical
- * expression. @Since: 2.12
- *@ATSPI_ROLE_RATING: A widget whose purpose is to display a rating,
- * such as the number of stars associated with a song in a media
- * player. Objects of this role should also implement
- * AtspiValue. @Since: 2.12
- *@ATSPI_ROLE_TIMER: An object containing a numerical counter which
- * indicates an amount of elapsed time from a start point, or the time
- * remaining until an end point. @Since: 2.12
- * @ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of
- * enumeration.
- *
- * Enumeration used by interface #AtspiAccessible to specify the role
- * of an #AtspiAccessible object.
- *
- */
-typedef enum {
- ATSPI_ROLE_INVALID,
- ATSPI_ROLE_ACCELERATOR_LABEL,
- ATSPI_ROLE_ALERT,
- ATSPI_ROLE_ANIMATION,
- ATSPI_ROLE_ARROW,
- ATSPI_ROLE_CALENDAR,
- ATSPI_ROLE_CANVAS,
- ATSPI_ROLE_CHECK_BOX,
- ATSPI_ROLE_CHECK_MENU_ITEM,
- ATSPI_ROLE_COLOR_CHOOSER,
- ATSPI_ROLE_COLUMN_HEADER,
- ATSPI_ROLE_COMBO_BOX,
- ATSPI_ROLE_DATE_EDITOR,
- ATSPI_ROLE_DESKTOP_ICON,
- ATSPI_ROLE_DESKTOP_FRAME,
- ATSPI_ROLE_DIAL,
- ATSPI_ROLE_DIALOG,
- ATSPI_ROLE_DIRECTORY_PANE,
- ATSPI_ROLE_DRAWING_AREA,
- ATSPI_ROLE_FILE_CHOOSER,
- ATSPI_ROLE_FILLER,
- ATSPI_ROLE_FOCUS_TRAVERSABLE,
- ATSPI_ROLE_FONT_CHOOSER,
- ATSPI_ROLE_FRAME,
- ATSPI_ROLE_GLASS_PANE,
- ATSPI_ROLE_HTML_CONTAINER,
- ATSPI_ROLE_ICON,
- ATSPI_ROLE_IMAGE,
- ATSPI_ROLE_INTERNAL_FRAME,
- ATSPI_ROLE_LABEL,
- ATSPI_ROLE_LAYERED_PANE,
- ATSPI_ROLE_LIST,
- ATSPI_ROLE_LIST_ITEM,
- ATSPI_ROLE_MENU,
- ATSPI_ROLE_MENU_BAR,
- ATSPI_ROLE_MENU_ITEM,
- ATSPI_ROLE_OPTION_PANE,
- ATSPI_ROLE_PAGE_TAB,
- ATSPI_ROLE_PAGE_TAB_LIST,
- ATSPI_ROLE_PANEL,
- ATSPI_ROLE_PASSWORD_TEXT,
- ATSPI_ROLE_POPUP_MENU,
- ATSPI_ROLE_PROGRESS_BAR,
- ATSPI_ROLE_PUSH_BUTTON,
- ATSPI_ROLE_RADIO_BUTTON,
- ATSPI_ROLE_RADIO_MENU_ITEM,
- ATSPI_ROLE_ROOT_PANE,
- ATSPI_ROLE_ROW_HEADER,
- ATSPI_ROLE_SCROLL_BAR,
- ATSPI_ROLE_SCROLL_PANE,
- ATSPI_ROLE_SEPARATOR,
- ATSPI_ROLE_SLIDER,
- ATSPI_ROLE_SPIN_BUTTON,
- ATSPI_ROLE_SPLIT_PANE,
- ATSPI_ROLE_STATUS_BAR,
- ATSPI_ROLE_TABLE,
- ATSPI_ROLE_TABLE_CELL,
- ATSPI_ROLE_TABLE_COLUMN_HEADER,
- ATSPI_ROLE_TABLE_ROW_HEADER,
- ATSPI_ROLE_TEAROFF_MENU_ITEM,
- ATSPI_ROLE_TERMINAL,
- ATSPI_ROLE_TEXT,
- ATSPI_ROLE_TOGGLE_BUTTON,
- ATSPI_ROLE_TOOL_BAR,
- ATSPI_ROLE_TOOL_TIP,
- ATSPI_ROLE_TREE,
- ATSPI_ROLE_TREE_TABLE,
- ATSPI_ROLE_UNKNOWN,
- ATSPI_ROLE_VIEWPORT,
- ATSPI_ROLE_WINDOW,
- ATSPI_ROLE_EXTENDED,
- ATSPI_ROLE_HEADER,
- ATSPI_ROLE_FOOTER,
- ATSPI_ROLE_PARAGRAPH,
- ATSPI_ROLE_RULER,
- ATSPI_ROLE_APPLICATION,
- ATSPI_ROLE_AUTOCOMPLETE,
- ATSPI_ROLE_EDITBAR,
- ATSPI_ROLE_EMBEDDED,
- ATSPI_ROLE_ENTRY,
- ATSPI_ROLE_CHART,
- ATSPI_ROLE_CAPTION,
- ATSPI_ROLE_DOCUMENT_FRAME,
- ATSPI_ROLE_HEADING,
- ATSPI_ROLE_PAGE,
- ATSPI_ROLE_SECTION,
- ATSPI_ROLE_REDUNDANT_OBJECT,
- ATSPI_ROLE_FORM,
- ATSPI_ROLE_LINK,
- ATSPI_ROLE_INPUT_METHOD_WINDOW,
- ATSPI_ROLE_TABLE_ROW,
- ATSPI_ROLE_TREE_ITEM,
- ATSPI_ROLE_DOCUMENT_SPREADSHEET,
- ATSPI_ROLE_DOCUMENT_PRESENTATION,
- ATSPI_ROLE_DOCUMENT_TEXT,
- ATSPI_ROLE_DOCUMENT_WEB,
- ATSPI_ROLE_DOCUMENT_EMAIL,
- ATSPI_ROLE_COMMENT,
- ATSPI_ROLE_LIST_BOX,
- ATSPI_ROLE_GROUPING,
- ATSPI_ROLE_IMAGE_MAP,
- ATSPI_ROLE_NOTIFICATION,
- ATSPI_ROLE_INFO_BAR,
- ATSPI_ROLE_LEVEL_BAR,
- ATSPI_ROLE_TITLE_BAR,
- ATSPI_ROLE_BLOCK_QUOTE,
- ATSPI_ROLE_AUDIO,
- ATSPI_ROLE_VIDEO,
- ATSPI_ROLE_DEFINITION,
- ATSPI_ROLE_ARTICLE,
- ATSPI_ROLE_LANDMARK,
- ATSPI_ROLE_LOG,
- ATSPI_ROLE_MARQUEE,
- ATSPI_ROLE_MATH,
- ATSPI_ROLE_RATING,
- ATSPI_ROLE_TIMER,
- ATSPI_ROLE_LAST_DEFINED,
-} AtspiRole;
-
-/**
- * ATSPI_ROLE_COUNT:
- *
- * One higher than the highest valid value of #AtspiRole.
- */
-#define ATSPI_ROLE_COUNT (90+1)
-
-typedef enum
-{
- ATSPI_CACHE_NONE = 0,
- ATSPI_CACHE_PARENT = 1 << 0,
- ATSPI_CACHE_CHILDREN = 1 << 1,
- ATSPI_CACHE_NAME = 1 << 2,
- ATSPI_CACHE_DESCRIPTION = 1 << 3,
- ATSPI_CACHE_STATES = 1 << 4,
- ATSPI_CACHE_ROLE = 1 << 5,
- ATSPI_CACHE_INTERFACES = 1 << 6,
- ATSPI_CACHE_ATTRIBUTES = 1 << 7,
- ATSPI_CACHE_ALL = 0x3fffffff,
- ATSPI_CACHE_DEFAULT = ATSPI_CACHE_PARENT | ATSPI_CACHE_CHILDREN | ATSPI_CACHE_NAME | ATSPI_CACHE_DESCRIPTION | ATSPI_CACHE_STATES | ATSPI_CACHE_ROLE | ATSPI_CACHE_INTERFACES,
- ATSPI_CACHE_UNDEFINED = 0x40000000,
-} AtspiCache;
-
-#define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry"
-#define ATSPI_DBUS_PATH_REGISTRY "/org/a11y/atspi/registry"
-#define ATSPI_DBUS_INTERFACE_REGISTRY "org.a11y.atspi.Registry"
-
-#define ATSPI_DBUS_PATH_NULL "/org/a11y/atspi/null"
-#define ATSPI_DBUS_PATH_ROOT "/org/a11y/atspi/accessible/root"
-
-#define ATSPI_DBUS_PATH_DEC "/org/a11y/atspi/registry/deviceeventcontroller"
-#define ATSPI_DBUS_INTERFACE_DEC "org.a11y.atspi.DeviceEventController"
-#define ATSPI_DBUS_INTERFACE_DEVICE_EVENT_LISTENER "org.a11y.atspi.DeviceEventListener"
-
-#define ATSPI_DBUS_INTERFACE_CACHE "org.a11y.atspi.Cache"
-#define ATSPI_DBUS_INTERFACE_ACCESSIBLE "org.a11y.atspi.Accessible"
-#define ATSPI_DBUS_INTERFACE_ACTION "org.a11y.atspi.Action"
-#define ATSPI_DBUS_INTERFACE_APPLICATION "org.a11y.atspi.Application"
-#define ATSPI_DBUS_INTERFACE_COLLECTION "org.a11y.atspi.Collection"
-#define ATSPI_DBUS_INTERFACE_COMPONENT "org.a11y.atspi.Component"
-#define ATSPI_DBUS_INTERFACE_DOCUMENT "org.a11y.atspi.Document"
-#define ATSPI_DBUS_INTERFACE_EDITABLE_TEXT "org.a11y.atspi.EditableText"
-#define ATSPI_DBUS_INTERFACE_EVENT_KEYBOARD "org.a11y.atspi.Event.Keyboard"
-#define ATSPI_DBUS_INTERFACE_EVENT_MOUSE "org.a11y.atspi.Event.Mouse"
-#define ATSPI_DBUS_INTERFACE_EVENT_OBJECT "org.a11y.atspi.Event.Object"
-#define ATSPI_DBUS_INTERFACE_HYPERLINK "org.a11y.atspi.Hyperlink"
-#define ATSPI_DBUS_INTERFACE_HYPERTEXT "org.a11y.atspi.Hypertext"
-#define ATSPI_DBUS_INTERFACE_IMAGE "org.a11y.atspi.Image"
-#define ATSPI_DBUS_INTERFACE_SELECTION "org.a11y.atspi.Selection"
-#define ATSPI_DBUS_INTERFACE_TABLE "org.a11y.atspi.Table"
-#define ATSPI_DBUS_INTERFACE_TABLE_CELL "org.a11y.atspi.TableCell"
-#define ATSPI_DBUS_INTERFACE_TEXT "org.a11y.atspi.Text"
-#define ATSPI_DBUS_INTERFACE_VALUE "org.a11y.atspi.Value"
-#define ATSPI_DBUS_INTERFACE_SOCKET "org.a11y.atspi.Socket"
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _ATSPI_CONSTANTS_H_ */
diff --git a/src/3rdparty/atspi2/atspi2.pri b/src/3rdparty/atspi2/atspi2.pri
deleted file mode 100644
index 5a6dc6d839..0000000000
--- a/src/3rdparty/atspi2/atspi2.pri
+++ /dev/null
@@ -1,10 +0,0 @@
-
-DBUS_ADAPTORS = $$PWD/xml/Cache.xml $$PWD/xml/DeviceEventController.xml
-QDBUSXML2CPP_ADAPTOR_HEADER_FLAGS = -i struct_marshallers_p.h
-
-DBUS_INTERFACES = $$PWD/xml/Socket.xml $$PWD/xml/Bus.xml
-QDBUSXML2CPP_INTERFACE_HEADER_FLAGS = -i struct_marshallers_p.h
-
-INCLUDEPATH += $$PWD
-HEADERS += $$PWD/atspi/atspi-constants.h
-
diff --git a/src/3rdparty/atspi2/qt_attribution.json b/src/3rdparty/atspi2/qt_attribution.json
deleted file mode 100644
index ed2ef85158..0000000000
--- a/src/3rdparty/atspi2/qt_attribution.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "Id": "atspi2",
- "Name": "at-spi2 (Assistive Technology Service Provider Interface)",
- "QDocModule": "qtgui",
- "QtUsage": "Optionally ysed on Linux for accessibility. Configure without dbus (QT_CONFIG-=accessibility-atspi-bridge) to avoid.",
-
- "License": "GNU Library General Public License v2 or later",
- "LicenseId": "LGPL-2.0+",
- "LicenseFile": "LICENSE",
- "Copyright": "Copyright 2010, 2011 Novell, Inc., Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany."
-}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java
index 7d26b8fa04..e6814c202d 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java
@@ -107,13 +107,14 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener
private int m_id;
private int m_attr;
private Activity m_activity;
- private int m_posX;
- private int m_posY;
+ private int m_posX = 0;
+ private int m_posY = 0;
private int m_lastX;
private int m_lastY;
int tolerance;
+ private boolean m_rtl;
- public CursorHandle(Activity activity, View layout, int id, int attr) {
+ public CursorHandle(Activity activity, View layout, int id, int attr, boolean rtl) {
m_activity = activity;
m_id = id;
m_attr = attr;
@@ -122,6 +123,7 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
tolerance = Math.round(2 * metrics.density);
m_lastX = m_lastY = -1 - tolerance;
+ m_rtl = rtl;
}
private boolean initOverlay(){
@@ -160,9 +162,9 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener
if (m_id == QtNative.IdCursorHandle) {
x2 -= m_cursorView.getWidth() / 2 ;
- } else if (m_id == QtNative.IdLeftHandle) {
+ } else if ((m_id == QtNative.IdLeftHandle && !m_rtl) || (m_id == QtNative.IdRightHandle && m_rtl)) {
x2 -= m_cursorView.getWidth() * 3 / 4;
- } else if (m_id == QtNative.IdRightHandle) {
+ } else {
x2 -= m_cursorView.getWidth() / 4;
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index 5975d838ce..720a35902b 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -493,7 +493,7 @@ public class QtActivityDelegate
be adjusted.
mode is one of QAndroidInputContext::CursorHandleShowMode
*/
- public void updateHandles(int mode, int x1, int y1, int x2, int y2)
+ public void updateHandles(int mode, int x1, int y1, int x2, int y2, boolean rtl)
{
if (mode == CursorHandleNotShown) {
if (m_cursorHandle != null)
@@ -501,6 +501,8 @@ public class QtActivityDelegate
if (m_rightSelectionHandle != null) {
m_rightSelectionHandle.hide();
m_leftSelectionHandle.hide();
+ m_rightSelectionHandle = null;
+ m_leftSelectionHandle = null;
}
if (m_editMenu != null)
m_editMenu.hide();
@@ -509,19 +511,25 @@ public class QtActivityDelegate
} else if (mode == CursorHandleShowNormal || mode == CursorHandleShowPopup) {
if (m_cursorHandle == null) {
m_cursorHandle = new CursorHandle(m_activity, m_layout, QtNative.IdCursorHandle,
- android.R.attr.textSelectHandle);
+ android.R.attr.textSelectHandle, false);
}
m_cursorHandle.setPosition(x1, y1);
if (m_rightSelectionHandle != null) {
m_rightSelectionHandle.hide();
m_leftSelectionHandle.hide();
+ m_rightSelectionHandle = null;
+ m_leftSelectionHandle = null;
}
} else if (mode == CursorHandleShowSelection) {
if (m_rightSelectionHandle == null) {
m_leftSelectionHandle = new CursorHandle(m_activity, m_layout, QtNative.IdLeftHandle,
- android.R.attr.textSelectHandleLeft);
+ !rtl ? android.R.attr.textSelectHandleLeft :
+ android.R.attr.textSelectHandleRight,
+ rtl);
m_rightSelectionHandle = new CursorHandle(m_activity, m_layout, QtNative.IdRightHandle,
- android.R.attr.textSelectHandleRight);
+ !rtl ? android.R.attr.textSelectHandleRight :
+ android.R.attr.textSelectHandleLeft,
+ rtl);
}
m_leftSelectionHandle.setPosition(x1,y1);
m_rightSelectionHandle.setPosition(x2,y2);
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 1d3d329043..76dffbd213 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -61,6 +61,7 @@ import android.view.KeyEvent;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
+import android.view.InputDevice;
import java.lang.reflect.Method;
import java.security.KeyStore;
@@ -470,6 +471,17 @@ public class QtNative
}
}
+ static public void sendGenericMotionEvent(MotionEvent event, int id)
+ {
+ if (event.getActionMasked() != MotionEvent.ACTION_SCROLL
+ || (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != InputDevice.SOURCE_CLASS_POINTER) {
+ return;
+ }
+
+ mouseWheel(id, (int) event.getX(), (int) event.getY(),
+ event.getAxisValue(MotionEvent.AXIS_HSCROLL), event.getAxisValue(MotionEvent.AXIS_VSCROLL));
+ }
+
public static Context getContext() {
if (m_activity != null)
return m_activity;
@@ -516,12 +528,13 @@ public class QtNative
final int x1,
final int y1,
final int x2,
- final int y2)
+ final int y2,
+ final boolean rtl)
{
runAction(new Runnable() {
@Override
public void run() {
- m_activityDelegate.updateHandles(mode, x1, y1, x2, y2);
+ m_activityDelegate.updateHandles(mode, x1, y1, x2, y2, rtl);
}
});
}
@@ -800,6 +813,7 @@ public class QtNative
public static native void mouseDown(int winId, int x, int y);
public static native void mouseUp(int winId, int x, int y);
public static native void mouseMove(int winId, int x, int y);
+ public static native void mouseWheel(int winId, int x, int y, float hdelta, float vdelta);
public static native void touchBegin(int winId);
public static native void touchAdd(int winId, int pointerId, int action, boolean primary, int x, int y, float major, float minor, float rotation, float pressure);
public static native void touchEnd(int winId, int action);
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
index 4d8abb2117..e994002dd3 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
@@ -112,4 +112,11 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback
QtNative.sendTrackballEvent(event, getId());
return true;
}
+
+ @Override
+ public boolean onGenericMotionEvent(MotionEvent event)
+ {
+ QtNative.sendGenericMotionEvent(event, getId());
+ return true;
+ }
}
diff --git a/src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch b/src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch
new file mode 100644
index 0000000000..ee847d3d9a
--- /dev/null
+++ b/src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch
@@ -0,0 +1,110 @@
+From c30bdc7d961ff09d74117e038c1bb9f06ad49738 Mon Sep 17 00:00:00 2001
+From: Oliver Wolff <oliver.wolff@qt.io>
+Date: Wed, 7 Jun 2017 10:07:43 +0200
+Subject: [PATCH] ANGLE: Fix crash with ltcg on Visual Studio 2015 Update 3
+
+Release builds of applications that used Qt configured with "link time
+code generation" crashed (memory access violation), when calling
+GetInternalFormatInfo in Context::initCaps.
+
+It looks like this is a compiler problem that can be avoided by not
+using a reference for the return value.
+
+Task-number: QTBUG-55718
+Change-Id: Ic1fb95d7b518a49859f41c819e860864387a8d3c
+---
+ src/3rdparty/angle/src/libANGLE/formatutils.cpp | 2 +-
+ src/3rdparty/angle/src/libANGLE/formatutils.h | 2 +-
+ src/3rdparty/angle/src/libANGLE/validationES3.cpp | 18 +++++++++---------
+ 3 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.cpp b/src/3rdparty/angle/src/libANGLE/formatutils.cpp
+index 3a4df12..f8b9a8b 100644
+--- a/src/3rdparty/angle/src/libANGLE/formatutils.cpp
++++ b/src/3rdparty/angle/src/libANGLE/formatutils.cpp
+@@ -652,7 +652,7 @@ const Type &GetTypeInfo(GLenum type)
+ }
+ }
+
+-const InternalFormat &GetInternalFormatInfo(GLenum internalFormat)
++const InternalFormat GetInternalFormatInfo(GLenum internalFormat)
+ {
+ const InternalFormatInfoMap &formatMap = GetInternalFormatMap();
+ InternalFormatInfoMap::const_iterator iter = formatMap.find(internalFormat);
+diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.h b/src/3rdparty/angle/src/libANGLE/formatutils.h
+index 6863e4d..2165e6b 100644
+--- a/src/3rdparty/angle/src/libANGLE/formatutils.h
++++ b/src/3rdparty/angle/src/libANGLE/formatutils.h
+@@ -79,7 +79,7 @@ struct InternalFormat
+ GLint skipRows,
+ GLint skipPixels) const;
+ };
+-const InternalFormat &GetInternalFormatInfo(GLenum internalFormat);
++const InternalFormat GetInternalFormatInfo(GLenum internalFormat);
+
+ GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type);
+
+diff --git a/src/3rdparty/angle/src/libANGLE/validationES3.cpp b/src/3rdparty/angle/src/libANGLE/validationES3.cpp
+index e08e5d2..2db64ec 100644
+--- a/src/3rdparty/angle/src/libANGLE/validationES3.cpp
++++ b/src/3rdparty/angle/src/libANGLE/validationES3.cpp
+@@ -775,20 +775,20 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
+ // with the values of the source buffer's [channel sizes]. Table 3.17 is used if the
+ // FRAMEBUFFER_ATTACHMENT_ENCODING is LINEAR and table 3.18 is used if the FRAMEBUFFER_ATTACHMENT_ENCODING
+ // is SRGB.
+- const InternalFormat *sourceEffectiveFormat = NULL;
++ InternalFormat sourceEffectiveFormat;
+ if (readBufferHandle != 0)
+ {
+ // Not the default framebuffer, therefore the read buffer must be a user-created texture or renderbuffer
+ if (framebufferInternalFormatInfo.pixelBytes > 0)
+ {
+- sourceEffectiveFormat = &framebufferInternalFormatInfo;
++ sourceEffectiveFormat = framebufferInternalFormatInfo;
+ }
+ else
+ {
+ // Renderbuffers cannot be created with an unsized internal format, so this must be an unsized-format
+ // texture. We can use the same table we use when creating textures to get its effective sized format.
+ GLenum sizedInternalFormat = GetSizedInternalFormat(framebufferInternalFormatInfo.format, framebufferInternalFormatInfo.type);
+- sourceEffectiveFormat = &GetInternalFormatInfo(sizedInternalFormat);
++ sourceEffectiveFormat = GetInternalFormatInfo(sizedInternalFormat);
+ }
+ }
+ else
+@@ -800,7 +800,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
+ GLenum effectiveFormat;
+ if (GetEffectiveInternalFormat(framebufferInternalFormatInfo, textureInternalFormatInfo, &effectiveFormat))
+ {
+- sourceEffectiveFormat = &GetInternalFormatInfo(effectiveFormat);
++ sourceEffectiveFormat = GetInternalFormatInfo(effectiveFormat);
+ }
+ else
+ {
+@@ -816,7 +816,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
+ (framebufferInternalFormatInfo.blueBits >= 1 && framebufferInternalFormatInfo.blueBits <= 8) &&
+ (framebufferInternalFormatInfo.alphaBits >= 1 && framebufferInternalFormatInfo.alphaBits <= 8))
+ {
+- sourceEffectiveFormat = &GetInternalFormatInfo(GL_SRGB8_ALPHA8);
++ sourceEffectiveFormat = GetInternalFormatInfo(GL_SRGB8_ALPHA8);
+ }
+ else
+ {
+@@ -834,10 +834,10 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen
+ {
+ // Section 3.8.5 of the GLES 3.0.3 spec, pg 139, requires that, if the destination format is sized,
+ // component sizes of the source and destination formats must exactly match
+- if (textureInternalFormatInfo.redBits != sourceEffectiveFormat->redBits ||
+- textureInternalFormatInfo.greenBits != sourceEffectiveFormat->greenBits ||
+- textureInternalFormatInfo.blueBits != sourceEffectiveFormat->blueBits ||
+- textureInternalFormatInfo.alphaBits != sourceEffectiveFormat->alphaBits)
++ if (textureInternalFormatInfo.redBits != sourceEffectiveFormat.redBits ||
++ textureInternalFormatInfo.greenBits != sourceEffectiveFormat.greenBits ||
++ textureInternalFormatInfo.blueBits != sourceEffectiveFormat.blueBits ||
++ textureInternalFormatInfo.alphaBits != sourceEffectiveFormat.alphaBits)
+ {
+ return false;
+ }
+--
+2.5.3.windows.1
+
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index 0e9830c5e2..7fca3137eb 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -84,6 +84,14 @@
"-ldl"
]
},
+ "librt": {
+ "label": "clock_gettime()",
+ "test": "unix/clock-gettime",
+ "sources": [
+ "",
+ "-lrt"
+ ]
+ },
"pcre2": {
"label": "PCRE2",
"test": "unix/pcre2",
@@ -119,15 +127,11 @@
"type": "compile",
"test": "common/atomicfptr"
},
- "clock-gettime": {
- "label": "clock_gettime()",
- "type": "compile",
- "test": "unix/clock-gettime"
- },
"clock-monotonic": {
"label": "POSIX monotonic clock",
"type": "compile",
- "test": "unix/clock-monotonic"
+ "test": "unix/clock-monotonic",
+ "use": "librt"
},
"cloexec": {
"label": "O_CLOEXEC",
@@ -214,7 +218,7 @@
"features": {
"clock-gettime": {
"label": "clock_gettime()",
- "condition": "tests.clock-gettime",
+ "condition": "config.unix && libs.librt",
"output": [ "privateFeature" ]
},
"clock-monotonic": {
diff --git a/src/corelib/doc/src/json.qdoc b/src/corelib/doc/src/json.qdoc
index a32772f910..4c7e62a10a 100644
--- a/src/corelib/doc/src/json.qdoc
+++ b/src/corelib/doc/src/json.qdoc
@@ -45,7 +45,7 @@
access.
More details about the JSON data format can be found at \l{http://json.org}{json.org}
- and in \l{http://tools.ietf.org/html/rfc4627}{RFC-4627}.
+ and in \l{https://tools.ietf.org/html/rfc7159}{RFC-7159}.
\tableofcontents
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index b95cdaa014..a087452d06 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -29,7 +29,6 @@ HEADERS += \
SOURCES += \
global/archdetect.cpp \
global/qglobal.cpp \
- global/qglobalstatic.cpp \
global/qlibraryinfo.cpp \
global/qmalloc.cpp \
global/qnumeric.cpp \
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index c221115e8f..9ffd164b61 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -1061,6 +1061,37 @@
#endif
/*
+ * SG10's SD-6 feature detection and some useful extensions from Clang and GCC
+ * https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
+ * http://clang.llvm.org/docs/LanguageExtensions.html#feature-checking-macros
+ */
+#ifdef __has_builtin
+# define QT_HAS_BUILTIN(x) __has_builtin(x)
+#else
+# define QT_HAS_BUILTIN(x) 0
+#endif
+#ifdef __has_attribute
+# define QT_HAS_ATTRIBUTE(x) __has_attribute(x)
+#else
+# define QT_HAS_ATTRIBUTE(x) 0
+#endif
+#ifdef __has_cpp_attribute
+# define QT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
+#else
+# define QT_HAS_CPP_ATTRIBUTE(x) 0
+#endif
+#ifdef __has_include
+# define QT_HAS_INCLUDE(x) __has_include(x)
+#else
+# define QT_HAS_INCLUDE(x) 0
+#endif
+#ifdef __has_include_next
+# define QT_HAS_INCLUDE_NEXT(x) __has_include_next(x)
+#else
+# define QT_HAS_INCLUDE_NEXT(x) 0
+#endif
+
+/*
* C++11 keywords and expressions
*/
#ifdef Q_COMPILER_NULLPTR
@@ -1141,6 +1172,11 @@
# define Q_DECL_ALIGN(n) alignas(n)
#endif
+#if QT_HAS_CPP_ATTRIBUTE(nodiscard) // P0188R1
+# undef Q_REQUIRED_RESULT
+# define Q_REQUIRED_RESULT [[nodiscard]]
+#endif
+
/*
* Fallback macros to certain compiler features
*/
@@ -1215,37 +1251,6 @@
#ifndef QT_MAKE_CHECKED_ARRAY_ITERATOR
# define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) (x)
#endif
-
-/*
- * SG10's SD-6 feature detection and some useful extensions from Clang and GCC
- * https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
- * http://clang.llvm.org/docs/LanguageExtensions.html#feature-checking-macros
- */
-#ifdef __has_builtin
-# define QT_HAS_BUILTIN(x) __has_builtin(x)
-#else
-# define QT_HAS_BUILTIN(x) 0
-#endif
-#ifdef __has_attribute
-# define QT_HAS_ATTRIBUTE(x) __has_attribute(x)
-#else
-# define QT_HAS_ATTRIBUTE(x) 0
-#endif
-#ifdef __has_cpp_attribute
-# define QT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
-#else
-# define QT_HAS_CPP_ATTRIBUTE(x) 0
-#endif
-#ifdef __has_include
-# define QT_HAS_INCLUDE(x) __has_include(x)
-#else
-# define QT_HAS_INCLUDE(x) 0
-#endif
-#ifdef __has_include_next
-# define QT_HAS_INCLUDE_NEXT(x) __has_include_next(x)
-#else
-# define QT_HAS_INCLUDE_NEXT(x) 0
-#endif
#ifdef __has_feature
# define QT_HAS_FEATURE(x) __has_feature(x)
#else
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 4c1b210489..9c05b9650c 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -85,12 +85,6 @@
# include <sys/systeminfo.h>
#endif
-#if defined(Q_OS_DARWIN)
-# include <mach/machine.h>
-# include <sys/sysctl.h>
-# include <sys/types.h>
-#endif
-
#ifdef Q_OS_UNIX
#include <sys/utsname.h>
#include <private/qcore_unix_p.h>
@@ -2057,6 +2051,8 @@ static const char *osVer_helper(QOperatingSystemVersion version = QOperatingSyst
return "El Capitan";
case 12:
return "Sierra";
+ case 13:
+ return "High Sierra";
}
}
// unknown, future version
@@ -2489,20 +2485,9 @@ QString QSysInfo::currentCpuArchitecture()
case PROCESSOR_ARCHITECTURE_IA64:
return QStringLiteral("ia64");
}
-#elif defined(Q_OS_DARWIN)
- cpu_type_t type;
- size_t size = sizeof(type);
- sysctlbyname("hw.cputype", &type, &size, NULL, 0);
- switch (type) {
- case CPU_TYPE_X86:
- return QStringLiteral("i386");
- case CPU_TYPE_X86_64:
- return QStringLiteral("x86_64");
- case CPU_TYPE_ARM:
- return QStringLiteral("arm");
- case CPU_TYPE_ARM64:
- return QStringLiteral("arm64");
- }
+#elif defined(Q_OS_DARWIN) && !defined(Q_OS_MACOS)
+ // iOS-based OSes do not return the architecture on uname(2)'s result.
+ return buildCpuArchitecture();
#elif defined(Q_OS_UNIX)
long ret = -1;
struct utsname u;
diff --git a/src/corelib/global/qglobalstatic.cpp b/src/corelib/global/qglobalstatic.qdoc
index d1c522a79a..8c34739d38 100644
--- a/src/corelib/global/qglobalstatic.cpp
+++ b/src/corelib/global/qglobalstatic.qdoc
@@ -37,8 +37,6 @@
**
****************************************************************************/
-#include "qglobalstatic.h"
-
/*!
\macro Q_GLOBAL_STATIC(Type, VariableName)
\since 5.1
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index a52f0de9f0..6602d53b08 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -274,7 +274,7 @@ Q_CORE_EXPORT bool qt_logging_to_console()
\sa QMessageLogContext, qDebug(), qInfo(), qWarning(), qCritical(), qFatal()
*/
-#ifdef Q_OS_WIN
+#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR)
static inline void convert_to_wchar_t_elided(wchar_t *d, size_t space, const char *s) Q_DECL_NOEXCEPT
{
size_t len = qstrlen(s);
diff --git a/src/corelib/global/qoperatingsystemversion.cpp b/src/corelib/global/qoperatingsystemversion.cpp
index bed08f0000..244f294312 100644
--- a/src/corelib/global/qoperatingsystemversion.cpp
+++ b/src/corelib/global/qoperatingsystemversion.cpp
@@ -413,6 +413,14 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSSierra =
QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 12);
/*!
+ \variable QOperatingSystemVersion::MacOSHighSierra
+ \brief a version corresponding to macOS High Sierra (version 10.13).
+ \since 5.9.1
+ */
+const QOperatingSystemVersion QOperatingSystemVersion::MacOSHighSierra =
+ QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 13);
+
+/*!
\variable QOperatingSystemVersion::AndroidJellyBean
\brief a version corresponding to Android Jelly Bean (version 4.1, API level 16).
\since 5.9
diff --git a/src/corelib/global/qoperatingsystemversion.h b/src/corelib/global/qoperatingsystemversion.h
index cc14d701e1..295365aad1 100644
--- a/src/corelib/global/qoperatingsystemversion.h
+++ b/src/corelib/global/qoperatingsystemversion.h
@@ -69,6 +69,7 @@ public:
static const QOperatingSystemVersion OSXYosemite;
static const QOperatingSystemVersion OSXElCapitan;
static const QOperatingSystemVersion MacOSSierra;
+ static const QOperatingSystemVersion MacOSHighSierra;
static const QOperatingSystemVersion AndroidJellyBean;
static const QOperatingSystemVersion AndroidJellyBean_MR1;
diff --git a/src/corelib/io/qloggingcategory.cpp b/src/corelib/io/qloggingcategory.cpp
index 967a614a2d..69af936bca 100644
--- a/src/corelib/io/qloggingcategory.cpp
+++ b/src/corelib/io/qloggingcategory.cpp
@@ -63,6 +63,7 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
\class QLoggingCategory
\inmodule QtCore
\since 5.2
+ \threadsafe
\brief The QLoggingCategory class represents a category, or 'area' in the
logging infrastructure.
@@ -95,6 +96,9 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
\li Category names starting with \c{qt} are reserved for Qt modules.
\endlist
+ QLoggingCategory objects implicitly defined by Q_LOGGING_CATEGORY()
+ are created on first use in a thread-safe manner.
+
\section1 Checking Category Configuration
QLoggingCategory provides \l isDebugEnabled(), \l isInfoEnabled(),
@@ -458,6 +462,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments are not processed if debug output for the category is not
enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qDebug()
*/
@@ -477,6 +483,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments might not be processed if debug output for the category is
not enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qDebug()
*/
@@ -499,6 +507,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments are not processed if debug output for the category is not
enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qInfo()
*/
@@ -518,6 +528,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments might not be processed if debug output for the category is
not enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qInfo()
*/
@@ -540,6 +552,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments are not processed if warning output for the category is not
enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qWarning()
*/
@@ -559,6 +573,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments might not be processed if warning output for the category is
not enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qWarning()
*/
@@ -581,6 +597,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments are not processed if critical output for the category is not
enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qCritical()
*/
@@ -600,6 +618,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\note Arguments might not be processed if critical output for the category
is not enabled, so do not rely on any side effects.
+ \note Using the macro is thread-safe.
+
\sa qCritical()
*/
/*!
@@ -624,7 +644,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
\a string identifier. By default, all message types are enabled.
Only one translation unit in a library or executable can define a category
- with a specific name.
+ with a specific name. The implicitly defined QLoggingCategory object is
+ created on first use, in a thread-safe manner.
This macro must be used outside of a class or method.
*/
@@ -640,7 +661,8 @@ void QLoggingCategory::setFilterRules(const QString &rules)
and more severe are enabled, types with a lower severity are disabled.
Only one translation unit in a library or executable can define a category
- with a specific name.
+ with a specific name. The implicitly defined QLoggingCategory object is
+ created on first use, in a thread-safe manner.
This macro must be used outside of a class or method. It is only defined
if variadic macros are supported.
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index a3343423db..9da0fe59b5 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -154,8 +154,8 @@ QT_BEGIN_NAMESPACE
QStringList QProcessEnvironmentPrivate::toList() const
{
QStringList result;
- result.reserve(hash.size());
- for (Hash::const_iterator it = hash.cbegin(), end = hash.cend(); it != end; ++it)
+ result.reserve(vars.size());
+ for (auto it = vars.cbegin(), end = vars.cend(); it != end; ++it)
result << nameToString(it.key()) + QLatin1Char('=') + valueToString(it.value());
return result;
}
@@ -181,9 +181,9 @@ QProcessEnvironment QProcessEnvironmentPrivate::fromList(const QStringList &list
QStringList QProcessEnvironmentPrivate::keys() const
{
QStringList result;
- result.reserve(hash.size());
- Hash::ConstIterator it = hash.constBegin(),
- end = hash.constEnd();
+ result.reserve(vars.size());
+ auto it = vars.constBegin();
+ const auto end = vars.constEnd();
for ( ; it != end; ++it)
result << nameToString(it.key());
return result;
@@ -191,14 +191,14 @@ QStringList QProcessEnvironmentPrivate::keys() const
void QProcessEnvironmentPrivate::insert(const QProcessEnvironmentPrivate &other)
{
- Hash::ConstIterator it = other.hash.constBegin(),
- end = other.hash.constEnd();
+ auto it = other.vars.constBegin();
+ const auto end = other.vars.constEnd();
for ( ; it != end; ++it)
- hash.insert(it.key(), it.value());
+ vars.insert(it.key(), it.value());
#ifdef Q_OS_UNIX
- QHash<QString, Key>::ConstIterator nit = other.nameMap.constBegin(),
- nend = other.nameMap.constEnd();
+ auto nit = other.nameMap.constBegin();
+ const auto nend = other.nameMap.constEnd();
for ( ; nit != nend; ++nit)
nameMap.insert(nit.key(), nit.value());
#endif
@@ -271,7 +271,7 @@ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const
if (d) {
if (other.d) {
QProcessEnvironmentPrivate::OrderedMutexLocker locker(d, other.d);
- return d->hash == other.d->hash;
+ return d->vars == other.d->vars;
} else {
return isEmpty();
}
@@ -289,7 +289,7 @@ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const
bool QProcessEnvironment::isEmpty() const
{
// Needs no locking, as no hash nodes are accessed
- return d ? d->hash.isEmpty() : true;
+ return d ? d->vars.isEmpty() : true;
}
/*!
@@ -301,7 +301,7 @@ bool QProcessEnvironment::isEmpty() const
void QProcessEnvironment::clear()
{
if (d)
- d->hash.clear();
+ d->vars.clear();
// Unix: Don't clear d->nameMap, as the environment is likely to be
// re-populated with the same keys again.
}
@@ -318,7 +318,7 @@ bool QProcessEnvironment::contains(const QString &name) const
if (!d)
return false;
QProcessEnvironmentPrivate::MutexLocker locker(d);
- return d->hash.contains(d->prepareName(name));
+ return d->vars.contains(d->prepareName(name));
}
/*!
@@ -337,7 +337,7 @@ void QProcessEnvironment::insert(const QString &name, const QString &value)
{
// our re-impl of detach() detaches from null
d.detach(); // detach before prepareName()
- d->hash.insert(d->prepareName(name), d->prepareValue(value));
+ d->vars.insert(d->prepareName(name), d->prepareValue(value));
}
/*!
@@ -352,7 +352,7 @@ void QProcessEnvironment::remove(const QString &name)
{
if (d) {
d.detach(); // detach before prepareName()
- d->hash.remove(d->prepareName(name));
+ d->vars.remove(d->prepareName(name));
}
}
@@ -369,8 +369,8 @@ QString QProcessEnvironment::value(const QString &name, const QString &defaultVa
return defaultValue;
QProcessEnvironmentPrivate::MutexLocker locker(d);
- QProcessEnvironmentPrivate::Hash::ConstIterator it = d->hash.constFind(d->prepareName(name));
- if (it == d->hash.constEnd())
+ const auto it = d->vars.constFind(d->prepareName(name));
+ if (it == d->vars.constEnd())
return defaultValue;
return d->valueToString(it.value());
diff --git a/src/corelib/io/qprocess_darwin.mm b/src/corelib/io/qprocess_darwin.mm
index dd7a8275b9..2c3c296cb4 100644
--- a/src/corelib/io/qprocess_darwin.mm
+++ b/src/corelib/io/qprocess_darwin.mm
@@ -48,7 +48,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment()
__block QProcessEnvironment env;
[[[NSProcessInfo processInfo] environment]
enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *__unused stop) {
- env.d->hash.insert(
+ env.d->vars.insert(
QProcessEnvironmentPrivate::Key(QString::fromNSString(name).toLocal8Bit()),
QProcessEnvironmentPrivate::Value(QString::fromNSString(value).toLocal8Bit()));
}];
diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h
index bea54f86da..deb29dca0a 100644
--- a/src/corelib/io/qprocess_p.h
+++ b/src/corelib/io/qprocess_p.h
@@ -55,6 +55,7 @@
#include "QtCore/qprocess.h"
#include "QtCore/qstringlist.h"
#include "QtCore/qhash.h"
+#include "QtCore/qmap.h"
#include "QtCore/qshareddata.h"
#include "private/qiodevice_p.h"
@@ -90,22 +91,19 @@ public:
QProcEnvKey(const QProcEnvKey &other) : QString(other) {}
bool operator==(const QProcEnvKey &other) const { return !compare(other, Qt::CaseInsensitive); }
};
-inline uint qHash(const QProcEnvKey &key) { return qHash(key.toCaseFolded()); }
-typedef QString QProcEnvValue;
-#else
-class QProcEnvKey
+inline bool operator<(const QProcEnvKey &a, const QProcEnvKey &b)
{
-public:
- QProcEnvKey() : hash(0) {}
- explicit QProcEnvKey(const QByteArray &other) : key(other), hash(qHash(key)) {}
- QProcEnvKey(const QProcEnvKey &other) { *this = other; }
- bool operator==(const QProcEnvKey &other) const { return key == other.key; }
+ // On windows use case-insensitive ordering because that is how Windows needs the environment
+ // block sorted (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682009(v=vs.85).aspx)
+ return a.compare(b, Qt::CaseInsensitive) < 0;
+}
- QByteArray key;
- uint hash;
-};
-inline uint qHash(const QProcEnvKey &key) Q_DECL_NOTHROW { return key.hash; }
+Q_DECLARE_TYPEINFO(QProcEnvKey, Q_MOVABLE_TYPE);
+
+typedef QString QProcEnvValue;
+#else
+using QProcEnvKey = QByteArray;
class QProcEnvValue
{
@@ -138,7 +136,6 @@ public:
};
Q_DECLARE_TYPEINFO(QProcEnvValue, Q_MOVABLE_TYPE);
#endif
-Q_DECLARE_TYPEINFO(QProcEnvKey, Q_MOVABLE_TYPE);
class QProcessEnvironmentPrivate: public QSharedData
{
@@ -161,13 +158,13 @@ public:
inline Key prepareName(const QString &name) const
{
Key &ent = nameMap[name];
- if (ent.key.isEmpty())
- ent = Key(name.toLocal8Bit());
+ if (ent.isEmpty())
+ ent = name.toLocal8Bit();
return ent;
}
inline QString nameToString(const Key &name) const
{
- const QString sname = QString::fromLocal8Bit(name.key);
+ const QString sname = QString::fromLocal8Bit(name);
nameMap[sname] = name;
return sname;
}
@@ -197,17 +194,17 @@ public:
// do not need a lock, as they detach objects (however, we need to
// ensure that they really detach before using prepareName()).
MutexLocker locker(&other);
- hash = other.hash;
+ vars = other.vars;
nameMap = other.nameMap;
// We need to detach our members, so that our mutex can protect them.
// As we are being detached, they likely would be detached a moment later anyway.
- hash.detach();
+ vars.detach();
nameMap.detach();
}
#endif
- typedef QHash<Key, Value> Hash;
- Hash hash;
+ using Map = QMap<Key, Value>;
+ Map vars;
#ifdef Q_OS_UNIX
typedef QHash<QString, Key> NameHash;
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 2b47f3e5b1..35bb44fed4 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -137,7 +137,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment()
QByteArray name(entry, equal - entry);
QByteArray value(equal + 1);
- env.d->hash.insert(QProcessEnvironmentPrivate::Key(name),
+ env.d->vars.insert(QProcessEnvironmentPrivate::Key(name),
QProcessEnvironmentPrivate::Value(value));
}
return env;
@@ -339,7 +339,7 @@ bool QProcessPrivate::openChannel(Channel &channel)
}
}
-static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environment, int *envc)
+static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Map &environment, int *envc)
{
*envc = 0;
if (environment.isEmpty())
@@ -349,10 +349,10 @@ static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environm
envp[environment.count()] = 0;
envp[environment.count() + 1] = 0;
- QProcessEnvironmentPrivate::Hash::ConstIterator it = environment.constBegin();
- const QProcessEnvironmentPrivate::Hash::ConstIterator end = environment.constEnd();
+ auto it = environment.constBegin();
+ const auto end = environment.constEnd();
for ( ; it != end; ++it) {
- QByteArray key = it.key().key;
+ QByteArray key = it.key();
QByteArray value = it.value().bytes();
key.reserve(key.length() + 1 + value.length());
key.append('=');
@@ -445,7 +445,7 @@ void QProcessPrivate::startProcess()
char **envp = 0;
if (environment.d.constData()) {
QProcessEnvironmentPrivate::MutexLocker locker(environment.d);
- envp = _q_dupEnvironment(environment.d.constData()->hash, &envc);
+ envp = _q_dupEnvironment(environment.d.constData()->vars, &envc);
}
// Encode the working directory if it's non-empty, otherwise just pass 0.
@@ -969,7 +969,7 @@ bool QProcessPrivate::startDetached(qint64 *pid)
char **envp = nullptr;
if (environment.d.constData()) {
QProcessEnvironmentPrivate::MutexLocker locker(environment.d);
- envp = _q_dupEnvironment(environment.d.constData()->hash, &envc);
+ envp = _q_dupEnvironment(environment.d.constData()->vars, &envc);
}
QByteArray tmp;
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp
index 0f6a61496d..2bbc4eddd0 100644
--- a/src/corelib/io/qprocess_win.cpp
+++ b/src/corelib/io/qprocess_win.cpp
@@ -75,7 +75,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment()
int nameLen = equal - entry;
QString name = QString::fromWCharArray(entry, nameLen);
QString value = QString::fromWCharArray(equal + 1, entryLen - nameLen - 1);
- env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), value);
+ env.d->vars.insert(QProcessEnvironmentPrivate::Key(name), value);
}
entry += entryLen + 1;
}
@@ -398,11 +398,11 @@ static QString qt_create_commandline(const QString &program, const QStringList &
return args;
}
-static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Hash &environment)
+static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Map &environment)
{
QByteArray envlist;
if (!environment.isEmpty()) {
- QProcessEnvironmentPrivate::Hash copy = environment;
+ QProcessEnvironmentPrivate::Map copy = environment;
// add PATH if necessary (for DLL loading)
QProcessEnvironmentPrivate::Key pathKey(QLatin1String("PATH"));
@@ -421,8 +421,8 @@ static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Hash &
}
int pos = 0;
- QProcessEnvironmentPrivate::Hash::ConstIterator it = copy.constBegin(),
- end = copy.constEnd();
+ auto it = copy.constBegin();
+ const auto end = copy.constEnd();
static const wchar_t equal = L'=';
static const wchar_t nul = L'\0';
@@ -507,7 +507,7 @@ void QProcessPrivate::startProcess()
const QString args = qt_create_commandline(program, arguments, nativeArguments);
QByteArray envlist;
if (environment.d.constData())
- envlist = qt_create_environment(environment.d.constData()->hash);
+ envlist = qt_create_environment(environment.d.constData()->vars);
#if defined QPROCESS_DEBUG
qDebug("Creating process");
@@ -891,7 +891,7 @@ bool QProcessPrivate::startDetached(qint64 *pid)
void *envPtr = nullptr;
QByteArray envlist;
if (environment.d.constData()) {
- envlist = qt_create_environment(environment.d.constData()->hash);
+ envlist = qt_create_environment(environment.d.constData()->vars);
envPtr = envlist.data();
}
diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h
index 0c78fadfc7..c012ec2662 100644
--- a/src/corelib/json/qjson_p.h
+++ b/src/corelib/json/qjson_p.h
@@ -243,7 +243,7 @@ public:
uint i = qFromLittleEndian(val);
i <<= 32 - width - pos;
int t = (int) i;
- t >>= pos;
+ t >>= 32 - width;
return t;
}
bool operator !() const {
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index 0e6ff17b8f..29bd5bbc6c 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -162,7 +162,7 @@ unix|integrity {
QMAKE_USE_PRIVATE += glib
}
- qtConfig(clock-gettime): include($$QT_SOURCE_TREE/config.tests/unix/clock-gettime/clock-gettime.pri)
+ qtConfig(clock-gettime): QMAKE_USE_PRIVATE += librt
!android {
SOURCES += kernel/qsharedmemory_posix.cpp \
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp
index 306c0845ef..dc60b0bc2b 100644
--- a/src/corelib/kernel/qjnihelpers.cpp
+++ b/src/corelib/kernel/qjnihelpers.cpp
@@ -80,13 +80,13 @@ class PermissionsResultClass : public QObject
Q_OBJECT
public:
PermissionsResultClass(const QtAndroidPrivate::PermissionsResultFunc &func) : m_func(func) {}
- Q_INVOKABLE void sendResult(const QtAndroidPrivate::PermissionsHash &result) { m_func(result); }
+ Q_INVOKABLE void sendResult(const QtAndroidPrivate::PermissionsHash &result) { m_func(result); delete this;}
private:
QtAndroidPrivate::PermissionsResultFunc m_func;
};
-typedef QHash<int, QSharedPointer<PermissionsResultClass>> PendingPermissionRequestsHash;
+typedef QHash<int, PermissionsResultClass*> PendingPermissionRequestsHash;
Q_GLOBAL_STATIC(PendingPermissionRequestsHash, g_pendingPermissionRequests);
static QBasicMutex g_pendingPermissionRequestsMutex;
static int nextRequestCode()
@@ -131,11 +131,11 @@ static void sendRequestPermissionsResult(JNIEnv *env, jobject /*obj*/, jint requ
// show an error or something ?
return;
}
- auto request = std::move(*it);
+ auto request = *it;
g_pendingPermissionRequests->erase(it);
locker.unlock();
- Qt::ConnectionType connection = QThread::currentThread() == request->thread() ? Qt::DirectConnection : Qt::BlockingQueuedConnection;
+ Qt::ConnectionType connection = QThread::currentThread() == request->thread() ? Qt::DirectConnection : Qt::QueuedConnection;
QtAndroidPrivate::PermissionsHash hash;
const int size = env->GetArrayLength(permissions);
std::unique_ptr<jint[]> results(new jint[size]);
@@ -147,7 +147,7 @@ static void sendRequestPermissionsResult(JNIEnv *env, jobject /*obj*/, jint requ
QtAndroidPrivate::PermissionsResult::Denied;
hash[permission] = value;
}
- QMetaObject::invokeMethod(request.data(), "sendResult", connection, Q_ARG(QtAndroidPrivate::PermissionsHash, hash));
+ QMetaObject::invokeMethod(request, "sendResult", connection, Q_ARG(QtAndroidPrivate::PermissionsHash, hash));
}
static jboolean dispatchGenericMotionEvent(JNIEnv *, jclass, jobject event)
@@ -410,6 +410,7 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env)
g_jNativeClass = static_cast<jclass>(env->NewGlobalRef(jQtNative));
env->DeleteLocalRef(jQtNative);
+ qRegisterMetaType<QtAndroidPrivate::PermissionsHash>();
return JNI_OK;
}
@@ -491,13 +492,13 @@ void QtAndroidPrivate::requestPermissions(JNIEnv *env, const QStringList &permis
const int requestCode = nextRequestCode();
if (!directCall) {
QMutexLocker locker(&g_pendingPermissionRequestsMutex);
- (*g_pendingPermissionRequests)[requestCode] = QSharedPointer<PermissionsResultClass>::create(callbackFunc);
+ (*g_pendingPermissionRequests)[requestCode] = new PermissionsResultClass(callbackFunc);
}
runOnAndroidThread([permissions, callbackFunc, requestCode, directCall] {
if (directCall) {
QMutexLocker locker(&g_pendingPermissionRequestsMutex);
- (*g_pendingPermissionRequests)[requestCode] = QSharedPointer<PermissionsResultClass>::create(callbackFunc);
+ (*g_pendingPermissionRequests)[requestCode] = new PermissionsResultClass(callbackFunc);
}
QJNIEnvironmentPrivate env;
diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h
index 9fa47d5302..7562d2c6f1 100644
--- a/src/corelib/kernel/qjnihelpers_p.h
+++ b/src/corelib/kernel/qjnihelpers_p.h
@@ -52,8 +52,10 @@
//
#include <jni.h>
-#include <QtCore/private/qglobal_p.h>
#include <functional>
+#include <QtCore/private/qglobal_p.h>
+#include <QHash>
+#include <QMetaType>
QT_BEGIN_NAMESPACE
@@ -117,7 +119,7 @@ namespace QtAndroidPrivate
Q_CORE_EXPORT void runOnAndroidThreadSync(const Runnable &runnable, JNIEnv *env, int timeoutMs = INT_MAX);
Q_CORE_EXPORT void runOnUiThread(QRunnable *runnable, JNIEnv *env);
Q_CORE_EXPORT void requestPermissions(JNIEnv *env, const QStringList &permissions, const PermissionsResultFunc &callbackFunc, bool directCall = false);
- Q_CORE_EXPORT QHash<QString, PermissionsResult> requestPermissionsSync(JNIEnv *env, const QStringList &permissions, int timeoutMs = INT_MAX);
+ Q_CORE_EXPORT PermissionsHash requestPermissionsSync(JNIEnv *env, const QStringList &permissions, int timeoutMs = INT_MAX);
Q_CORE_EXPORT PermissionsResult checkPermission(const QString &permission);
Q_CORE_EXPORT bool shouldShowRequestPermissionRationale(const QString &permission);
@@ -145,4 +147,6 @@ namespace QtAndroidPrivate
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QtAndroidPrivate::PermissionsHash)
+
#endif // QJNIHELPERS_H
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index 144216a6ef..32f4817ce6 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -249,7 +249,7 @@ public:
void chop(int n);
#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP) && !defined(Q_CLANG_QDOC)
-# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL)
+# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) && !QT_HAS_CPP_ATTRIBUTE(nodiscard)
// required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941
# pragma push_macro("Q_REQUIRED_RESULT")
# undef Q_REQUIRED_RESULT
diff --git a/src/corelib/tools/qcollator.cpp b/src/corelib/tools/qcollator.cpp
index e34d16079f..f1e3d6652d 100644
--- a/src/corelib/tools/qcollator.cpp
+++ b/src/corelib/tools/qcollator.cpp
@@ -254,7 +254,7 @@ bool QCollator::numericMode() const
The default is locale dependent.
- \note This method is not currently supported on Apple platforms or if Qt is configured to not use ICU on Linux.
+ \note This method is not currently supported if Qt is configured to not use ICU on Linux.
\sa ignorePunctuation()
*/
diff --git a/src/corelib/tools/qcollator_macx.cpp b/src/corelib/tools/qcollator_macx.cpp
index d468272430..9aa59a81dc 100644
--- a/src/corelib/tools/qcollator_macx.cpp
+++ b/src/corelib/tools/qcollator_macx.cpp
@@ -66,7 +66,7 @@ void QCollatorPrivate::init()
options |= kUCCollateCaseInsensitiveMask;
if (numericMode)
options |= kUCCollateDigitsAsNumberMask | kUCCollateDigitsOverrideMask;
- if (ignorePunctuation)
+ if (!ignorePunctuation)
options |= kUCCollatePunctuationSignificantMask;
OSStatus status = UCCreateCollator(
diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp
index d4edf459de..4c6f08c774 100644
--- a/src/corelib/tools/qsimd.cpp
+++ b/src/corelib/tools/qsimd.cpp
@@ -721,6 +721,14 @@ void qDumpCPUFeatures()
printf("%s%s", features_string + features_indices[i],
minFeature & (Q_UINT64_C(1) << i) ? "[required]" : "");
}
+ if ((features = (qCompilerCpuFeatures & ~features))) {
+ printf("\n!!!!!!!!!!!!!!!!!!!!\n!!! Missing required features:");
+ for (int i = 0; i < features_count; ++i) {
+ if (features & (Q_UINT64_C(1) << i))
+ printf("%s", features_string + features_indices[i]);
+ }
+ printf("\n!!! Applications will likely crash with \"Invalid Instruction\"\n!!!!!!!!!!!!!!!!!!!!");
+ }
puts("");
}
diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h
index 44f6f1cc91..3ef29f4823 100644
--- a/src/corelib/tools/qsimd_p.h
+++ b/src/corelib/tools/qsimd_p.h
@@ -232,7 +232,7 @@
#if defined(__SSE4_2__) || (defined(QT_COMPILER_SUPPORTS_SSE4_2) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
#include <nmmintrin.h>
-# if defined(__SSE4_2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS)
+# if defined(__SSE4_2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC))
// POPCNT instructions:
// All processors that support SSE4.2 support POPCNT
// (but neither MSVC nor the Intel compiler define this macro)
@@ -245,7 +245,7 @@
// immintrin.h is the ultimate header, we don't need anything else after this
#include <immintrin.h>
-# if defined(__AVX__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS)
+# if defined(__AVX__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC))
// AES, PCLMULQDQ instructions:
// All processors that support AVX support AES, PCLMULQDQ
// (but neither MSVC nor the Intel compiler define these macros)
@@ -253,7 +253,7 @@
# define __PCLMUL__ 1
# endif
-# if defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS)
+# if defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC))
// F16C & RDRAND instructions:
// All processors that support AVX2 support F16C & RDRAND:
// (but neither MSVC nor the Intel compiler define these macros)
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index d5301a396f..9d87cd1077 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -407,7 +407,7 @@ public:
Q_REQUIRED_RESULT QString rightJustified(int width, QChar fill = QLatin1Char(' '), bool trunc = false) const;
#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP) && !defined(Q_CLANG_QDOC)
-# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL)
+# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) && !QT_HAS_CPP_ATTRIBUTE(nodiscard)
// required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941
# pragma push_macro("Q_REQUIRED_RESULT")
# undef Q_REQUIRED_RESULT
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index 0b331be503..6a26993549 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -958,7 +958,13 @@ QDataStream &operator>>(QDataStream &ds, QTimeZone &tz)
int country;
QString comment;
ds >> ianaId >> utcOffset >> name >> abbreviation >> country >> comment;
- tz = QTimeZone(ianaId.toUtf8(), utcOffset, name, abbreviation, (QLocale::Country) country, comment);
+ // Try creating as a system timezone, which succeeds (producing a valid
+ // zone) iff ianaId is valid; we can then ignore the other data.
+ tz = QTimeZone(ianaId.toUtf8());
+ // If not, then construct a custom timezone using all the saved values:
+ if (!tz.isValid())
+ tz = QTimeZone(ianaId.toUtf8(), utcOffset, name, abbreviation,
+ QLocale::Country(country), comment);
} else {
tz = QTimeZone(ianaId.toUtf8());
}
diff --git a/src/gui/configure.json b/src/gui/configure.json
index 7c4ea48f2e..39216ae2b9 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -53,6 +53,12 @@
},
"libraries": {
+ "atspi": {
+ "label": "atspi",
+ "sources": [
+ { "type": "pkgConfig", "args": "atspi-2" }
+ ]
+ },
"bcm_host": {
"export": "",
"sources": [
@@ -445,7 +451,7 @@
"features": {
"accessibility-atspi-bridge": {
"label": "ATSPI Bridge",
- "condition": "features.accessibility && features.xcb && features.dbus",
+ "condition": "features.accessibility && features.xcb && features.dbus && config.atspi",
"output": [ "privateFeature", "feature" ]
},
"angle": {
@@ -1181,7 +1187,6 @@ QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your pla
"linuxfb", "vnc", "mirclient",
{
"type": "feature",
- "message": "INTEGRITY framebuffer",
"condition": "config.integrity",
"args": "integrityfb"
},
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp
index cd7c95b166..7a5a630495 100644
--- a/src/gui/image/qimagereader.cpp
+++ b/src/gui/image/qimagereader.cpp
@@ -1119,7 +1119,7 @@ QList<QByteArray> QImageReader::supportedSubTypes() const
if (!d->initHandler())
return QList<QByteArray>();
- if (!d->handler->supportsOption(QImageIOHandler::SupportedSubTypes))
+ if (d->handler->supportsOption(QImageIOHandler::SupportedSubTypes))
return d->handler->option(QImageIOHandler::SupportedSubTypes).value< QList<QByteArray> >();
return QList<QByteArray>();
}
diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp
index 399216d27c..771f0fe93d 100644
--- a/src/gui/kernel/qclipboard.cpp
+++ b/src/gui/kernel/qclipboard.cpp
@@ -137,6 +137,17 @@ QT_BEGIN_NAMESPACE
\endlist
+ \section1 Notes for Universal Windows Platform Users
+
+ \list
+
+ \li The Universal Windows Platform only allows to query the
+ clipboard in case the application is active and an application
+ window has focus. Accessing the clipboard data when in background
+ will fail due to access denial.
+
+ \endlist
+
\sa QGuiApplication
*/
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index b15ea78f7a..6d9f0b0417 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -1158,7 +1158,7 @@ int QKeySequencePrivate::decodeString(const QString &str, QKeySequence::Sequence
lastI = i + 1;
}
- int p = accel.lastIndexOf(QLatin1Char('+'), str.length() - 2); // -2 so that Ctrl++ works
+ int p = accel.lastIndexOf(QLatin1Char('+'), accel.length() - 2); // -2 so that Ctrl++ works
QStringRef accelRef(&accel);
if(p > 0)
accelRef = accelRef.mid(p + 1);
diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp
index e006fad437..336cb88444 100644
--- a/src/gui/painting/qplatformbackingstore.cpp
+++ b/src/gui/painting/qplatformbackingstore.cpp
@@ -254,6 +254,11 @@ static inline QRect deviceRect(const QRect &rect, QWindow *window)
return deviceRect;
}
+static inline QPoint deviceOffset(const QPoint &pt, QWindow *window)
+{
+ return pt * window->devicePixelRatio();
+}
+
static QRegion deviceRegion(const QRegion &region, QWindow *window, const QPoint &offset)
{
if (offset.isNull() && window->devicePixelRatio() <= 1)
@@ -348,6 +353,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &regi
d_ptr->blitter->bind();
const QRect deviceWindowRect = deviceRect(QRect(QPoint(), window->size()), window);
+ const QPoint deviceWindowOffset = deviceOffset(offset, window);
bool canUseSrgb = false;
// If there are any sRGB textures in the list, check if the destination
@@ -422,7 +428,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &regi
d_ptr->blitter->setRedBlueSwizzle(true);
// The backingstore is for the entire tlw.
// In case of native children offset tells the position relative to the tlw.
- const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(offset), d_ptr->textureSize.height());
+ const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(deviceWindowOffset), d_ptr->textureSize.height());
const QMatrix3x3 source = QOpenGLTextureBlitter::sourceTransform(srcRect,
d_ptr->textureSize,
origin);
diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp
index b8c0584a62..1b7061d050 100644
--- a/src/network/kernel/qhostaddress.cpp
+++ b/src/network/kernel/qhostaddress.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -393,7 +393,7 @@ void QNetmaskAddress::setPrefixLength(QAbstractSocket::NetworkLayerProtocol prot
/*! \enum QHostAddress::SpecialAddress
- \value Null The null address object. Equivalent to QHostAddress().
+ \value Null The null address object. Equivalent to QHostAddress(). See also QHostAddress::isNull().
\value LocalHost The IPv4 localhost address. Equivalent to QHostAddress("127.0.0.1").
\value LocalHostIPv6 The IPv6 localhost address. Equivalent to QHostAddress("::1").
\value Broadcast The IPv4 broadcast address. Equivalent to QHostAddress("255.255.255.255").
@@ -606,6 +606,14 @@ QHostAddress &QHostAddress::operator=(SpecialAddress address)
}
/*!
+ \fn void QHostAddress::swap(QHostAddress &other)
+ \since 5.6
+
+ Swaps this host address with \a other. This operation is very fast
+ and never fails.
+*/
+
+/*!
\fn bool QHostAddress::operator!=(const QHostAddress &other) const
\since 4.2
@@ -621,7 +629,9 @@ QHostAddress &QHostAddress::operator=(SpecialAddress address)
*/
/*!
- Sets the host address to 0.0.0.0.
+ Sets the host address to null.
+
+ \sa QHostAddress::Null
*/
void QHostAddress::clear()
{
@@ -982,9 +992,11 @@ bool QHostAddress::operator ==(SpecialAddress other) const
}
/*!
- Returns \c true if this host address is null (INADDR_ANY or in6addr_any).
- The default constructor creates a null address, and that address is
- not valid for any host or interface.
+ Returns \c true if this host address is not valid for any host or interface.
+
+ The default constructor creates a null address.
+
+ \sa QHostAddress::Null
*/
bool QHostAddress::isNull() const
{
diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp
index 0a9588deea..4216e2a16a 100644
--- a/src/network/ssl/qsslsocket_mac.cpp
+++ b/src/network/ssl/qsslsocket_mac.cpp
@@ -1223,8 +1223,10 @@ bool QSslSocketBackendPrivate::verifyPeerTrust()
QCFType<CFMutableArrayRef> certArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
for (const QSslCertificate &cert : qAsConst(configuration.caCertificates)) {
QCFType<CFDataRef> certData = cert.d->derData.toCFData();
- QCFType<SecCertificateRef> certRef = SecCertificateCreateWithData(NULL, certData);
- CFArrayAppendValue(certArray, certRef);
+ if (QCFType<SecCertificateRef> secRef = SecCertificateCreateWithData(NULL, certData))
+ CFArrayAppendValue(certArray, secRef);
+ else
+ qCWarning(lcSsl, "Failed to create SecCertificate from QSslCertificate");
}
SecTrustSetAnchorCertificates(trust, certArray);
diff --git a/src/3rdparty/atspi2/xml/Bus.xml b/src/platformsupport/linuxaccessibility/dbusxml/Bus.xml
index 5a33e335a1..5a33e335a1 100644
--- a/src/3rdparty/atspi2/xml/Bus.xml
+++ b/src/platformsupport/linuxaccessibility/dbusxml/Bus.xml
diff --git a/src/3rdparty/atspi2/xml/Cache.xml b/src/platformsupport/linuxaccessibility/dbusxml/Cache.xml
index 01c52810ac..01c52810ac 100644
--- a/src/3rdparty/atspi2/xml/Cache.xml
+++ b/src/platformsupport/linuxaccessibility/dbusxml/Cache.xml
diff --git a/src/3rdparty/atspi2/xml/DeviceEventController.xml b/src/platformsupport/linuxaccessibility/dbusxml/DeviceEventController.xml
index d4c26ef7e7..d4c26ef7e7 100644
--- a/src/3rdparty/atspi2/xml/DeviceEventController.xml
+++ b/src/platformsupport/linuxaccessibility/dbusxml/DeviceEventController.xml
diff --git a/src/3rdparty/atspi2/xml/Socket.xml b/src/platformsupport/linuxaccessibility/dbusxml/Socket.xml
index 75ec99f994..75ec99f994 100644
--- a/src/3rdparty/atspi2/xml/Socket.xml
+++ b/src/platformsupport/linuxaccessibility/dbusxml/Socket.xml
diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro
index 6d68909047..d6689c0fa3 100644
--- a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro
+++ b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro
@@ -7,7 +7,13 @@ CONFIG += static internal_module
DEFINES += QT_NO_CAST_FROM_ASCII
PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
-include(../../3rdparty/atspi2/atspi2.pri)
+DBUS_ADAPTORS = $$PWD/dbusxml/Cache.xml $$PWD/dbusxml/DeviceEventController.xml
+QDBUSXML2CPP_ADAPTOR_HEADER_FLAGS = -i struct_marshallers_p.h
+
+DBUS_INTERFACES = $$PWD/dbusxml/Socket.xml $$PWD/dbusxml/Bus.xml
+QDBUSXML2CPP_INTERFACE_HEADER_FLAGS = -i struct_marshallers_p.h
+
+QMAKE_USE += atspi/nolink
HEADERS += \
application_p.h \
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
index 30efa12124..54daa2c2de 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
@@ -358,6 +358,14 @@ void QKdeThemePrivate::refresh()
resources.fonts[QPlatformTheme::FixedFont] = fixedFont;
}
+ if (QFont *menuFont = kdeFont(readKdeSetting(QStringLiteral("menuFont"), kdeDirs, kdeVersion, kdeSettings))) {
+ resources.fonts[QPlatformTheme::MenuFont] = menuFont;
+ resources.fonts[QPlatformTheme::MenuBarFont] = new QFont(*menuFont);
+ }
+
+ if (QFont *toolBarFont = kdeFont(readKdeSetting(QStringLiteral("toolBarFont"), kdeDirs, kdeVersion, kdeSettings)))
+ resources.fonts[QPlatformTheme::ToolButtonFont] = toolBarFont;
+
qDeleteAll(kdeSettings);
}
diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp
index 8372bf6484..32630003d1 100644
--- a/src/plugins/platforms/android/androidjniinput.cpp
+++ b/src/plugins/platforms/android/androidjniinput.cpp
@@ -121,11 +121,11 @@ namespace QtAndroidInput
return m_softwareKeyboardRect;
}
- void updateHandles(int mode, QPoint cursor, QPoint anchor)
+ void updateHandles(int mode, QPoint cursor, QPoint anchor, bool rtl)
{
- QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "updateHandles", "(IIIII)V",
+ QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "updateHandles", "(IIIIIZ)V",
mode, cursor.x(), cursor.y(), anchor.x(),
- anchor.y());
+ anchor.y(), rtl);
}
static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y)
@@ -173,6 +173,25 @@ namespace QtAndroidInput
Qt::MouseButtons(Qt::LeftButton));
}
+ static void mouseWheel(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jfloat hdelta, jfloat vdelta)
+ {
+ if (m_ignoreMouseEvents)
+ return;
+
+ QPoint globalPos(x,y);
+ QWindow *tlw = m_mouseGrabber.data();
+ if (!tlw)
+ tlw = topLevelWindowAt(globalPos);
+ QPoint localPos = tlw ? (globalPos-tlw->position()) : globalPos;
+ QPoint angleDelta(hdelta * 120, vdelta * 120);
+
+ QWindowSystemInterface::handleWheelEvent(tlw,
+ localPos,
+ globalPos,
+ QPoint(),
+ angleDelta);
+ }
+
static void longPress(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y)
{
QAndroidInputContext *inputContext = QAndroidInputContext::androidInputContext();
@@ -824,6 +843,7 @@ namespace QtAndroidInput
{"mouseDown", "(III)V", (void *)mouseDown},
{"mouseUp", "(III)V", (void *)mouseUp},
{"mouseMove", "(III)V", (void *)mouseMove},
+ {"mouseWheel", "(IIIFF)V", (void *)mouseWheel},
{"longPress", "(III)V", (void *)longPress},
{"isTabletEventSupported", "()Z", (void *)isTabletEventSupported},
{"tabletEvent", "(IIJIIIFFF)V", (void *)tabletEvent},
diff --git a/src/plugins/platforms/android/androidjniinput.h b/src/plugins/platforms/android/androidjniinput.h
index af18a96dc1..c09b426f49 100644
--- a/src/plugins/platforms/android/androidjniinput.h
+++ b/src/plugins/platforms/android/androidjniinput.h
@@ -58,7 +58,7 @@ namespace QtAndroidInput
// Software keyboard support
// cursor/selection handles
- void updateHandles(int handleCount, QPoint cursor = QPoint(), QPoint anchor = QPoint());
+ void updateHandles(int handleCount, QPoint cursor = QPoint(), QPoint anchor = QPoint(), bool rtl = false);
bool registerNatives(JNIEnv *env);
}
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index e47dd91a3e..06bca0354d 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -102,13 +102,6 @@ static QList<QByteArray> m_applicationParams;
pthread_t m_qtAppThread = 0;
static sem_t m_exitSemaphore, m_terminateSemaphore;
-struct SurfaceData
-{
- ~SurfaceData() { delete surface; }
- QJNIObjectPrivate *surface = nullptr;
- AndroidSurfaceClient *client = nullptr;
-};
-
QHash<int, AndroidSurfaceClient *> m_surfaces;
static QMutex m_surfacesMutex;
@@ -142,6 +135,7 @@ namespace QtAndroid
// flush the pending state if necessary.
if (m_androidPlatformIntegration) {
flushPendingApplicationState();
+ m_androidPlatformIntegration->flushPendingUpdates();
} else {
QMutexLocker locker(&m_pendingAppStateMtx);
m_pendingApplicationState = -1;
@@ -627,6 +621,7 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/,
m_scaledDensity = scaledDensity;
m_density = density;
+ QMutexLocker lock(&m_surfacesMutex);
if (!m_androidPlatformIntegration) {
QAndroidPlatformIntegration::setDefaultDisplayMetrics(desktopWidthPixels,
desktopHeightPixels,
@@ -691,7 +686,6 @@ static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state
// Don't send timers and sockets events anymore if we are going to hide all windows
QAndroidEventDispatcherStopper::instance()->goingToStop(true);
- QCoreApplication::processEvents();
QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState(state));
if (state == Qt::ApplicationSuspended)
QAndroidEventDispatcherStopper::instance()->stopAll();
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp
index 4ab8a9d060..279cb338f4 100644
--- a/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -537,7 +537,7 @@ void QAndroidInputContext::updateSelectionHandles()
? QHighDpiScaling::factor(window)
: QHighDpiScaling::factor(QtAndroid::androidPlatformIntegration()->screen());
- QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled);
+ QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled | Qt::ImCurrentSelection);
QCoreApplication::sendEvent(m_focusObject, &query);
int cpos = query.value(Qt::ImCursorPosition).toInt();
int anchor = query.value(Qt::ImAnchorPosition).toInt();
@@ -563,7 +563,8 @@ void QAndroidInputContext::updateSelectionHandles()
QPoint leftPoint(leftRect.bottomLeft().toPoint() * pixelDensity);
QPoint righPoint(rightRect.bottomRight().toPoint() * pixelDensity);
- QtAndroidInput::updateHandles(CursorHandleShowSelection, leftPoint, righPoint);
+ QtAndroidInput::updateHandles(CursorHandleShowSelection, leftPoint, righPoint,
+ query.value(Qt::ImCurrentSelection).toString().isRightToLeft());
if (m_cursorHandleShown == CursorHandleShowPopup) {
// make sure the popup does not reappear when the selection menu closes
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp
index ec09965f45..3088546148 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp
@@ -433,6 +433,14 @@ void QAndroidPlatformIntegration::setScreenOrientation(Qt::ScreenOrientation cur
m_nativeOrientation = nativeOrientation;
}
+void QAndroidPlatformIntegration::flushPendingUpdates()
+{
+ m_primaryScreen->setPhysicalSize(QSize(m_defaultPhysicalSizeWidth,
+ m_defaultPhysicalSizeHeight));
+ m_primaryScreen->setSize(QSize(m_defaultScreenWidth, m_defaultScreenHeight));
+ m_primaryScreen->setAvailableGeometry(QRect(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight));
+}
+
#ifndef QT_NO_ACCESSIBILITY
QPlatformAccessibility *QAndroidPlatformIntegration::accessibility() const
{
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h
index 047eaf122e..c795c499bc 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.h
+++ b/src/plugins/platforms/android/qandroidplatformintegration.h
@@ -129,6 +129,8 @@ public:
QTouchDevice *touchDevice() const { return m_touchDevice; }
void setTouchDevice(QTouchDevice *touchDevice) { m_touchDevice = touchDevice; }
+ void flushPendingUpdates();
+
#if QT_CONFIG(vulkan)
QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const override;
#endif
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index f68d34ff9d..e42fbad00e 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -171,7 +171,10 @@ static QTouchDevice *touchDevice = 0;
- (void)dealloc
{
CGImageRelease(m_maskImage);
- [m_trackingArea release];
+ if (m_trackingArea) {
+ [self removeTrackingArea:m_trackingArea];
+ [m_trackingArea release];
+ }
m_maskImage = 0;
[m_inputSource release];
[[NSNotificationCenter defaultCenter] removeObserver:self];
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp
index 8a34f6974f..643ae877d0 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp
@@ -89,7 +89,8 @@ public:
if (FAILED(hr)) {
success = false;
- qWarning("%s: EndDraw failed: %#x, tag1: %lld, tag2: %lld", __FUNCTION__, hr, tag1, tag2);
+ qWarning("%s: EndDraw failed: %#lx, tag1: %lld, tag2: %lld",
+ __FUNCTION__, long(hr), tag1, tag2);
}
}
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
index d9c3d6ac14..9239facb0c 100644
--- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp
+++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
@@ -638,7 +638,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_background(IA2Color *backgr
/**************************************************************\
* IAccessibleEditableText *
**************************************************************/
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
/*!
\internal
@@ -681,7 +681,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::copyText(long startOffset, long
{
QAccessibleInterface *accessible = accessibleInterface();
accessibleDebugClientCalls(accessible);
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
const QString t = textForRange(startOffset, endOffset);
QGuiApplication::clipboard()->setText(t);
return S_OK;
@@ -717,7 +717,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::cutText(long startOffset, long
{
QAccessibleInterface *accessible = accessibleInterface();
accessibleDebugClientCalls(accessible);
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
const QString t = textForRange(startOffset, endOffset);
if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
editableTextIface->deleteText(startOffset, endOffset);
@@ -734,7 +734,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::pasteText(long offset)
{
QAccessibleInterface *accessible = accessibleInterface();
accessibleDebugClientCalls(accessible);
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
const QString txt = QGuiApplication::clipboard()->text();
if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
editableTextIface->insertText(offset, txt);
diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h
index 34fe114d0e..d9c342be27 100644
--- a/src/plugins/platforms/windows/qtwindowsglobal.h
+++ b/src/plugins/platforms/windows/qtwindowsglobal.h
@@ -263,12 +263,10 @@ inline QtWindows::WindowsEventType windowsEventType(UINT message, WPARAM wParamI
if ((wParamIn & 0xfff0) == SC_CONTEXTHELP)
return QtWindows::WhatsThisEvent;
break;
-#if !defined(QT_NO_SESSIONMANAGER)
case WM_QUERYENDSESSION:
return QtWindows::QueryEndSessionApplicationEvent;
case WM_ENDSESSION:
return QtWindows::EndSessionApplicationEvent;
-#endif
#if defined(WM_APPCOMMAND)
case WM_APPCOMMAND:
return QtWindows::AppCommandEvent;
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 7f5f9d0768..ddd779bbac 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -53,7 +53,7 @@
#ifndef QT_NO_ACCESSIBILITY
# include "accessible/qwindowsaccessibility.h"
#endif
-#if !defined(QT_NO_SESSIONMANAGER)
+#if QT_CONFIG(sessionmanager)
# include <private/qsessionmanager_p.h>
# include "qwindowssessionmanager.h"
#endif
@@ -249,7 +249,7 @@ struct QWindowsContextPrivate {
QWindowsMimeConverter m_mimeConverter;
QWindowsScreenManager m_screenManager;
QSharedPointer<QWindowCreationContext> m_creationContext;
-#if !defined(QT_NO_TABLETEVENT)
+#if QT_CONFIG(tabletevent)
QScopedPointer<QWindowsTabletSupport> m_tabletSupport;
#endif
const HRESULT m_oleInitializeResult;
@@ -290,7 +290,7 @@ QWindowsContext::QWindowsContext() :
const QByteArray bv = qgetenv("QT_QPA_VERBOSE");
if (!bv.isEmpty())
QLoggingCategory::setFilterRules(QString::fromLocal8Bit(bv));
-#if !defined(QT_NO_TABLETEVENT)
+#if QT_CONFIG(tabletevent)
d->m_tabletSupport.reset(QWindowsTabletSupport::create());
qCDebug(lcQpaTablet) << "Tablet support: " << (d->m_tabletSupport.isNull() ? QStringLiteral("None") : d->m_tabletSupport->description());
#endif
@@ -298,7 +298,7 @@ QWindowsContext::QWindowsContext() :
QWindowsContext::~QWindowsContext()
{
-#if !defined(QT_NO_TABLETEVENT)
+#if QT_CONFIG(tabletevent)
d->m_tabletSupport.reset(); // Destroy internal window before unregistering classes.
#endif
unregisterWindowClasses();
@@ -346,7 +346,7 @@ bool QWindowsContext::initTouch(unsigned integrationOptions)
void QWindowsContext::setTabletAbsoluteRange(int a)
{
-#if !defined(QT_NO_TABLETEVENT)
+#if QT_CONFIG(tabletevent)
if (!d->m_tabletSupport.isNull())
d->m_tabletSupport->setAbsoluteRange(a);
#else
@@ -720,7 +720,7 @@ QWindowsScreenManager &QWindowsContext::screenManager()
QWindowsTabletSupport *QWindowsContext::tabletSupport() const
{
-#if !defined(QT_NO_TABLETEVENT)
+#if QT_CONFIG(tabletevent)
return d->m_tabletSupport.data();
#else
return 0;
@@ -1128,7 +1128,7 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
platformWindow->clearFlag(QWindowsWindow::WithinDpiChanged);
return true;
}
-#if !defined(QT_NO_SESSIONMANAGER)
+#if QT_CONFIG(sessionmanager)
case QtWindows::QueryEndSessionApplicationEvent: {
QWindowsSessionManager *sessionManager = platformSessionManager();
if (sessionManager->isActive()) { // bogus message from windows
diff --git a/src/plugins/platforms/windows/qwindowscursor.cpp b/src/plugins/platforms/windows/qwindowscursor.cpp
index b9c320fd8f..e7ba08b719 100644
--- a/src/plugins/platforms/windows/qwindowscursor.cpp
+++ b/src/plugins/platforms/windows/qwindowscursor.cpp
@@ -56,7 +56,7 @@
static bool initResources()
{
-#if !defined (QT_NO_IMAGEFORMAT_PNG)
+#if QT_CONFIG(imageformat_png)
Q_INIT_RESOURCE(cursors);
#endif
return true;
@@ -203,7 +203,7 @@ static QSize systemCursorSize(const QPlatformScreen *screen = Q_NULLPTR)
return primaryScreenCursorSize;
}
-#if defined (QT_NO_IMAGEFORMAT_PNG)
+#if !QT_CONFIG(imageformat_png)
static inline QSize standardCursorSize() { return QSize(32, 32); }
diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp
index a326ccac3e..857db7a65c 100644
--- a/src/plugins/platforms/windows/qwindowsdrag.cpp
+++ b/src/plugins/platforms/windows/qwindowsdrag.cpp
@@ -40,7 +40,7 @@
#include "qwindowsdrag.h"
#include "qwindowscontext.h"
#include "qwindowsscreen.h"
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
# include "qwindowsclipboard.h"
#endif
#include "qwindowsintegration.h"
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index eb7ad5ecd8..a9143a3052 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -51,9 +51,9 @@
#ifndef QT_NO_FREETYPE
# include <QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h>
#endif
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
# include "qwindowsclipboard.h"
-# ifndef QT_NO_DRAGANDDROP
+# if QT_CONFIG(draganddrop)
# include "qwindowsdrag.h"
# endif
#endif
@@ -65,7 +65,7 @@
#include <qpa/qplatformnativeinterface.h>
#include <qpa/qwindowsysteminterface.h>
-#ifndef QT_NO_SESSIONMANAGER
+#if QT_CONFIG(sessionmanager)
# include "qwindowssessionmanager.h"
#endif
#include <QtGui/qtouchdevice.h>
@@ -139,9 +139,9 @@ struct QWindowsIntegrationPrivate
unsigned m_options = 0;
QWindowsContext m_context;
QPlatformFontDatabase *m_fontDatabase = nullptr;
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
QWindowsClipboard m_clipboard;
-# ifndef QT_NO_DRAGANDDROP
+# if QT_CONFIG(draganddrop)
QWindowsDrag m_drag;
# endif
#endif
@@ -258,7 +258,7 @@ QWindowsIntegration::QWindowsIntegration(const QStringList &paramList) :
d(new QWindowsIntegrationPrivate(paramList))
{
m_instance = this;
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
d->m_clipboard.registerViewer();
#endif
d->m_context.screenManager().handleScreenChanges();
@@ -557,12 +557,12 @@ QList<int> QWindowsIntegration::possibleKeys(const QKeyEvent *e) const
return d->m_context.possibleKeys(e);
}
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
QPlatformClipboard * QWindowsIntegration::clipboard() const
{
return &d->m_clipboard;
}
-# ifndef QT_NO_DRAGANDDROP
+# if QT_CONFIG(draganddrop)
QPlatformDrag *QWindowsIntegration::drag() const
{
return &d->m_drag;
@@ -587,7 +587,7 @@ unsigned QWindowsIntegration::options() const
return d->m_options;
}
-#if !defined(QT_NO_SESSIONMANAGER)
+#if QT_CONFIG(sessionmanager)
QPlatformSessionManager *QWindowsIntegration::createPlatformSessionManager(const QString &id, const QString &key) const
{
return new QWindowsSessionManager(id, key);
diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h
index 11320332bb..23f3d9ef4e 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.h
+++ b/src/plugins/platforms/windows/qwindowsintegration.h
@@ -83,9 +83,9 @@ public:
#endif
QAbstractEventDispatcher *createEventDispatcher() const override;
void initialize() override;
-#ifndef QT_NO_CLIPBOARD
+#if QT_CONFIG(clipboard)
QPlatformClipboard *clipboard() const override;
-# ifndef QT_NO_DRAGANDDROP
+# if QT_CONFIG(draganddrop)
QPlatformDrag *drag() const override;
# endif
#endif // !QT_NO_CLIPBOARD
@@ -111,7 +111,7 @@ public:
void beep() const override;
-#if !defined(QT_NO_SESSIONMANAGER)
+#if QT_CONFIG(sessionmanager)
QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const override;
#endif
diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp
index eb53dc921b..b892f1610d 100644
--- a/src/plugins/platforms/windows/qwindowsmime.cpp
+++ b/src/plugins/platforms/windows/qwindowsmime.cpp
@@ -1252,7 +1252,7 @@ bool QBuiltInMimes::convertFromMime(const FORMATETC &formatetc, const QMimeData
r[byteLength+1] = 0;
data = r;
} else {
-#ifndef QT_NO_DRAGANDDROP
+#if QT_CONFIG(draganddrop)
data = QInternalMimeData::renderDataHelper(outFormats.value(getCf(formatetc)), mimeData);
#endif //QT_NO_DRAGANDDROP
}
@@ -1352,7 +1352,7 @@ QLastResortMimes::QLastResortMimes()
bool QLastResortMimes::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
{
// really check
-#ifndef QT_NO_DRAGANDDROP
+#if QT_CONFIG(draganddrop)
return formatetc.tymed & TYMED_HGLOBAL
&& (formats.contains(formatetc.cfFormat)
&& QInternalMimeData::hasFormatHelper(formats.value(formatetc.cfFormat), mimeData));
@@ -1366,7 +1366,7 @@ bool QLastResortMimes::canConvertFromMime(const FORMATETC &formatetc, const QMim
bool QLastResortMimes::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const
{
-#ifndef QT_NO_DRAGANDDROP
+#if QT_CONFIG(draganddrop)
return canConvertFromMime(formatetc, mimeData)
&& setData(QInternalMimeData::renderDataHelper(formats.value(getCf(formatetc)), mimeData), pmedium);
#else
@@ -1467,7 +1467,7 @@ QString QLastResortMimes::mimeForFormat(const FORMATETC &formatetc) const
const QString clipFormat = QWindowsMimeConverter::clipboardFormatName(getCf(formatetc));
if (!clipFormat.isEmpty()) {
-#ifndef QT_NO_DRAGANDDROP
+#if QT_CONFIG(draganddrop)
if (QInternalMimeData::canReadData(clipFormat))
format = clipFormat;
else if((formatetc.cfFormat >= 0xC000)){
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 9ac31c45df..1bd7b06c8e 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -1195,7 +1195,7 @@ void QWindowsWindow::setDropSiteEnabled(bool dropEnabled)
if (isDropSiteEnabled() == dropEnabled)
return;
qCDebug(lcQpaMime) << __FUNCTION__ << window() << dropEnabled;
-#if !defined(QT_NO_CLIPBOARD) && !defined(QT_NO_DRAGANDDROP)
+#if QT_CONFIG(clipboard) && QT_CONFIG(draganddrop)
if (dropEnabled) {
Q_ASSERT(m_data.hwnd);
m_dropTarget = new QWindowsOleDropTarget(window());
diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri
index 933cd72a67..3ecd164c74 100644
--- a/src/plugins/platforms/windows/windows.pri
+++ b/src/plugins/platforms/windows/windows.pri
@@ -82,33 +82,28 @@ qtConfig(vulkan) {
HEADERS += $$PWD/qwindowsvulkaninstance.h
}
-!contains( DEFINES, QT_NO_CLIPBOARD ) {
+qtConfig(clipboard) {
SOURCES += $$PWD/qwindowsclipboard.cpp
HEADERS += $$PWD/qwindowsclipboard.h
-}
-
-# drag and drop on windows only works if a clipboard is available
-!contains( DEFINES, QT_NO_DRAGANDDROP ) {
- !win32:SOURCES += $$PWD/qwindowsdrag.cpp
- !win32:HEADERS += $$PWD/qwindowsdrag.h
- win32:!contains( DEFINES, QT_NO_CLIPBOARD ) {
+ # drag and drop on windows only works if a clipboard is available
+ qtConfig(draganddrop) {
HEADERS += $$PWD/qwindowsdrag.h
SOURCES += $$PWD/qwindowsdrag.cpp
}
}
-!contains( DEFINES, QT_NO_TABLETEVENT ) {
+qtConfig(tabletevent) {
INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/wintab
HEADERS += $$PWD/qwindowstabletsupport.h
SOURCES += $$PWD/qwindowstabletsupport.cpp
}
-!contains( DEFINES, QT_NO_SESSIONMANAGER ) {
+qtConfig(sessionmanager) {
SOURCES += $$PWD/qwindowssessionmanager.cpp
HEADERS += $$PWD/qwindowssessionmanager.h
}
-!contains( DEFINES, QT_NO_IMAGEFORMAT_PNG ):RESOURCES += $$PWD/cursors.qrc
+qtConfig(imageformat_png):RESOURCES += $$PWD/cursors.qrc
RESOURCES += $$PWD/openglblacklists.qrc
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index da7ce9bb17..94111559b4 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -249,25 +249,9 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
return xcbWindow;
}
-class QXcbForeignWindow : public QXcbWindow
-{
-public:
- QXcbForeignWindow(QWindow *window, WId nativeHandle)
- : QXcbWindow(window) { m_window = nativeHandle; }
- ~QXcbForeignWindow() {}
- bool isForeignWindow() const override { return true; }
-
-protected:
- // No-ops
- void create() override {}
- void destroy() override {}
-};
-
QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativeHandle) const
{
- QXcbWindow *xcbWindow = new QXcbForeignWindow(window, nativeHandle);
- xcbWindow->create();
- return xcbWindow;
+ return new QXcbForeignWindow(window, nativeHandle);
}
#ifndef QT_NO_OPENGL
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 0a4e3a5107..9921ed5da5 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -616,13 +616,17 @@ QXcbWindow::~QXcbWindow()
}
destroy();
+}
- if (isForeignWindow()) {
- if (connection()->mouseGrabber() == this)
- connection()->setMouseGrabber(Q_NULLPTR);
- if (connection()->mousePressWindow() == this)
- connection()->setMousePressWindow(Q_NULLPTR);
- }
+QXcbForeignWindow::~QXcbForeignWindow()
+{
+ // Clear window so that destroy() does not affect it
+ m_window = 0;
+
+ if (connection()->mouseGrabber() == this)
+ connection()->setMouseGrabber(nullptr);
+ if (connection()->mousePressWindow() == this)
+ connection()->setMousePressWindow(nullptr);
}
void QXcbWindow::destroy()
diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
index 5e09865d33..b5bf33520f 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.h
+++ b/src/plugins/platforms/xcb/qxcbwindow.h
@@ -280,6 +280,18 @@ protected:
xcb_cursor_t m_currentBitmapCursor = XCB_CURSOR_NONE;
};
+class QXcbForeignWindow : public QXcbWindow
+{
+public:
+ QXcbForeignWindow(QWindow *window, WId nativeHandle)
+ : QXcbWindow(window) { m_window = nativeHandle; }
+ ~QXcbForeignWindow();
+ bool isForeignWindow() const override { return true; }
+
+protected:
+ void create() override {} // No-op
+};
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QXcbWindow*)
diff --git a/src/plugins/sqldrivers/.qmake.conf b/src/plugins/sqldrivers/.qmake.conf
new file mode 100644
index 0000000000..15ba71a343
--- /dev/null
+++ b/src/plugins/sqldrivers/.qmake.conf
@@ -0,0 +1,19 @@
+# This file detaches this sub-tree from the rest of qtbase,
+# so it can be configured stand-alone.
+# Of course, under normal circumstances, this _is_ part of qtbase,
+# so we have to make some contortions to restore normality.
+
+isEmpty(_QMAKE_CONF_): return() # Pre-scan during spec loading.
+
+SQLDRV_SRC_TREE = $$dirname(_QMAKE_CONF_)
+QTBASE_SRC_TREE = $$section(SQLDRV_SRC_TREE, /, 0, -4)
+
+QTBASE_BLD_TREE = $$shadowed($$QTBASE_SRC_TREE)
+!isEmpty(QTBASE_BLD_TREE):exists($$QTBASE_BLD_TREE/.qmake.cache) {
+ # This tricks qt_build_config.prf and qt_build_paths.prf
+ _QMAKE_CONF_ = $$QTBASE_SRC_TREE/.qmake.conf
+} else {
+ CONFIG += sqldrivers_standalone
+}
+
+include($$QTBASE_SRC_TREE/.qmake.conf)
diff --git a/src/sql/configure.json b/src/plugins/sqldrivers/configure.json
index 49444c7e5f..5603ceb37b 100644
--- a/src/sql/configure.json
+++ b/src/plugins/sqldrivers/configure.json
@@ -1,9 +1,9 @@
{
- "module": "sql",
+ "module": "sqldrivers",
"depends": [
"core"
],
- "testDir": "../../config.tests",
+ "testDir": "../../../config.tests",
"commandline": {
"assignments": {
@@ -129,47 +129,42 @@
"sql-db2": {
"label": "DB2 (IBM)",
"condition": "libs.db2",
- "output": [ "publicFeature" ]
+ "output": [ "privateFeature" ]
},
"sql-ibase": {
"label": "InterBase",
"condition": "libs.ibase",
- "output": [ "publicFeature" ]
+ "output": [ "privateFeature" ]
},
"sql-mysql": {
"label": "MySql",
"condition": "libs.mysql",
- "output": [ "publicFeature" ]
- },
- "use_libmysqlclient_r": {
- "label": "MySql (threadsafe)",
- "condition": "features.sql-mysql && (libs.mysql.source == 0 || libs.mysql.source == 2)",
- "output": [ "privateConfig" ]
+ "output": [ "privateFeature" ]
},
"sql-oci": {
"label": "OCI (Oracle)",
"condition": "libs.oci",
- "output": [ "publicFeature" ]
+ "output": [ "privateFeature" ]
},
"sql-odbc": {
"label": "ODBC",
- "condition": "libs.odbc && features.datestring",
- "output": [ "publicFeature" ]
+ "condition": "features.datestring && libs.odbc",
+ "output": [ "privateFeature" ]
},
"sql-psql": {
"label": "PostgreSQL",
"condition": "libs.psql",
- "output": [ "publicFeature" ]
+ "output": [ "privateFeature" ]
},
"sql-sqlite2": {
"label": "SQLite2",
"condition": "libs.sqlite2",
- "output": [ "publicFeature" ]
+ "output": [ "privateFeature" ]
},
"sql-sqlite": {
"label": "SQLite",
"condition": "features.datestring",
- "output": [ "publicFeature" ]
+ "output": [ "privateFeature" ]
},
"system-sqlite": {
"label": " Using system provided SQLite",
@@ -179,8 +174,8 @@
},
"sql-tds": {
"label": "TDS (Sybase)",
- "condition": "libs.tds && features.datestring",
- "output": [ "publicFeature" ]
+ "condition": "features.datestring && libs.tds",
+ "output": [ "privateFeature" ]
}
},
diff --git a/src/sql/configure.pri b/src/plugins/sqldrivers/configure.pri
index 9fb957291f..9fb957291f 100644
--- a/src/sql/configure.pri
+++ b/src/plugins/sqldrivers/configure.pri
diff --git a/src/plugins/sqldrivers/qsqldriverbase.pri b/src/plugins/sqldrivers/qsqldriverbase.pri
index 512c046ec1..4b78fa9454 100644
--- a/src/plugins/sqldrivers/qsqldriverbase.pri
+++ b/src/plugins/sqldrivers/qsqldriverbase.pri
@@ -1,5 +1,8 @@
QT = core core-private sql-private
+# For QMAKE_USE in the parent projects.
+include($$shadowed($$PWD)/qtsqldrivers-config.pri)
+
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
diff --git a/src/plugins/sqldrivers/sqldrivers.pro b/src/plugins/sqldrivers/sqldrivers.pro
index 30fb6019ce..8a9ae46f82 100644
--- a/src/plugins/sqldrivers/sqldrivers.pro
+++ b/src/plugins/sqldrivers/sqldrivers.pro
@@ -1,5 +1,9 @@
TEMPLATE = subdirs
-QT_FOR_CONFIG += sql
+
+sqldrivers_standalone {
+ _QMAKE_CACHE_ = $$shadowed($$SQLDRV_SRC_TREE)/.qmake.conf
+ load(qt_configure)
+}
qtConfig(sql-psql) : SUBDIRS += psql
qtConfig(sql-mysql) : SUBDIRS += mysql
diff --git a/src/plugins/sqldrivers/sqlite/sqlite.pro b/src/plugins/sqldrivers/sqlite/sqlite.pro
index 1066bf7f51..d7e19f97b1 100644
--- a/src/plugins/sqldrivers/sqlite/sqlite.pro
+++ b/src/plugins/sqldrivers/sqlite/sqlite.pro
@@ -1,10 +1,11 @@
TARGET = qsqlite
-QT_FOR_CONFIG += sql-private
-
HEADERS += $$PWD/qsql_sqlite_p.h
SOURCES += $$PWD/qsql_sqlite.cpp $$PWD/smain.cpp
+include($$OUT_PWD/../qtsqldrivers-config.pri)
+QT_FOR_CONFIG += sqldrivers-private
+
qtConfig(system-sqlite) {
QMAKE_USE += sqlite
} else {
diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp
index 32c94639ab..9a06fb38d0 100644
--- a/src/tools/moc/preprocessor.cpp
+++ b/src/tools/moc/preprocessor.cpp
@@ -1109,19 +1109,18 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
}
case PP_DEFINE:
{
- next(IDENTIFIER);
+ next();
QByteArray name = lexem();
+ if (name.isEmpty() || !is_ident_start(name[0]))
+ error();
Macro macro;
macro.isVariadic = false;
- Token t = next();
- if (t == LPAREN) {
+ if (test(LPAREN)) {
// we have a function macro
macro.isFunction = true;
parseDefineArguments(&macro);
- } else if (t == PP_WHITESPACE){
- macro.isFunction = false;
} else {
- error("Moc: internal error");
+ macro.isFunction = false;
}
int start = index;
until(PP_NEWLINE);
@@ -1160,7 +1159,7 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
continue;
}
case PP_UNDEF: {
- next(IDENTIFIER);
+ next();
QByteArray name = lexem();
until(PP_NEWLINE);
macros.remove(name);
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 2fb44952be..ad9e040824 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -83,9 +83,10 @@ namespace {
int w = 0;
int h = 0;
if (const DomProperty *sh = properties.value(QLatin1String("sizeHint"))) {
- const DomSize *sizeHint = sh->elementSize();
- w = sizeHint->elementWidth();
- h = sizeHint->elementHeight();
+ if (const DomSize *sizeHint = sh->elementSize()) {
+ w = sizeHint->elementWidth();
+ h = sizeHint->elementHeight();
+ }
}
output << w << ", " << h << ", ";
diff --git a/src/widgets/dialogs/dialogs.pri b/src/widgets/dialogs/dialogs.pri
index 8614d2bcc6..c9438696fa 100644
--- a/src/widgets/dialogs/dialogs.pri
+++ b/src/widgets/dialogs/dialogs.pri
@@ -22,8 +22,7 @@ win32 {
SOURCES += dialogs/qwizard_win.cpp
}
-wince: FORMS += dialogs/qfiledialog_embedded.ui
-else: FORMS += dialogs/qfiledialog.ui
+FORMS += dialogs/qfiledialog.ui
INCLUDEPATH += $$PWD
SOURCES += \
diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp
index 8e74c659fa..60e1c43721 100644
--- a/src/widgets/dialogs/qdialog.cpp
+++ b/src/widgets/dialogs/qdialog.cpp
@@ -1049,7 +1049,7 @@ QSize QDialog::minimumSizeHint() const
\brief whether show() should pop up the dialog as modal or modeless
By default, this property is \c false and show() pops up the dialog
- as modeless. Setting his property to true is equivalent to setting
+ as modeless. Setting this property to true is equivalent to setting
QWidget::windowModality to Qt::ApplicationModal.
exec() ignores the value of this property and always pops up the
diff --git a/src/widgets/dialogs/qfiledialog_embedded.ui b/src/widgets/dialogs/qfiledialog_embedded.ui
deleted file mode 100644
index 933acdeaf2..0000000000
--- a/src/widgets/dialogs/qfiledialog_embedded.ui
+++ /dev/null
@@ -1,353 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWidgets module 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$
-**
-*********************************************************************</comment>
- <class>QFileDialog</class>
- <widget class="QDialog" name="QFileDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>240</width>
- <height>320</height>
- </rect>
- </property>
- <property name="sizeGripEnabled">
- <bool>true</bool>
- </property>
- <layout class="QVBoxLayout">
- <item>
- <widget class="QFileDialogComboBox" name="lookInCombo">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout">
- <item>
- <widget class="QToolButton" name="backButton">
- <property name="toolTip">
- <string>Back</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="forwardButton">
- <property name="toolTip">
- <string>Forward</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="toParentButton">
- <property name="toolTip">
- <string>Parent Directory</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="newFolderButton">
- <property name="toolTip">
- <string>Create New Folder</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="listModeButton">
- <property name="toolTip">
- <string>List View</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="detailModeButton">
- <property name="toolTip">
- <string>Detail View</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QSplitter" name="splitter">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="childrenCollapsible">
- <bool>false</bool>
- </property>
- <widget class="QSidebar" name="sidebar"/>
- <widget class="QFrame" name="frame">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QStackedWidget" name="stackedWidget">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="page">
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QFileDialogListView" name="listView"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_2">
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QFileDialogTreeView" name="treeView"/>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <layout class="QGridLayout">
- <item row="0" column="0">
- <widget class="QFileDialogLineEdit" name="fileNameEdit">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="0" column="1" rowspan="2">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QComboBox" name="fileTypeCombo">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QLabel" name="fileNameLabel">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="fileTypeLabel">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="text">
- <string>Files of type:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="lookInLabel">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="text">
- <string>Look in:</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>QFileDialogTreeView</class>
- <extends>QTreeView</extends>
- <header>private/qfiledialog_p.h</header>
- </customwidget>
- <customwidget>
- <class>QFileDialogListView</class>
- <extends>QListView</extends>
- <header>private/qfiledialog_p.h</header>
- </customwidget>
- <customwidget>
- <class>QSidebar</class>
- <extends>QListWidget</extends>
- <header>private/qsidebar_p.h</header>
- </customwidget>
- <customwidget>
- <class>QFileDialogLineEdit</class>
- <extends>QLineEdit</extends>
- <header>private/qfiledialog_p.h</header>
- </customwidget>
- <customwidget>
- <class>QFileDialogComboBox</class>
- <extends>QComboBox</extends>
- <header>private/qfiledialog_p.h</header>
- </customwidget>
- </customwidgets>
- <tabstops>
- <tabstop>lookInCombo</tabstop>
- <tabstop>backButton</tabstop>
- <tabstop>forwardButton</tabstop>
- <tabstop>toParentButton</tabstop>
- <tabstop>newFolderButton</tabstop>
- <tabstop>listModeButton</tabstop>
- <tabstop>detailModeButton</tabstop>
- <tabstop>sidebar</tabstop>
- <tabstop>listView</tabstop>
- <tabstop>fileNameEdit</tabstop>
- <tabstop>fileTypeCombo</tabstop>
- <tabstop>buttonBox</tabstop>
- <tabstop>treeView</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/widgets/doc/images/fusion-style.png b/src/widgets/doc/images/fusion-style.png
new file mode 100644
index 0000000000..753bb2806a
--- /dev/null
+++ b/src/widgets/doc/images/fusion-style.png
Binary files differ
diff --git a/src/widgets/doc/images/macos-lineedit.png b/src/widgets/doc/images/macos-lineedit.png
new file mode 100644
index 0000000000..765f30ab2f
--- /dev/null
+++ b/src/widgets/doc/images/macos-lineedit.png
Binary files differ
diff --git a/src/widgets/doc/images/macos-progressbar.png b/src/widgets/doc/images/macos-progressbar.png
new file mode 100644
index 0000000000..79be5f559c
--- /dev/null
+++ b/src/widgets/doc/images/macos-progressbar.png
Binary files differ
diff --git a/src/widgets/doc/images/macos-style.png b/src/widgets/doc/images/macos-style.png
new file mode 100644
index 0000000000..818e634632
--- /dev/null
+++ b/src/widgets/doc/images/macos-style.png
Binary files differ
diff --git a/src/widgets/doc/images/macos-style2.png b/src/widgets/doc/images/macos-style2.png
new file mode 100644
index 0000000000..728b407428
--- /dev/null
+++ b/src/widgets/doc/images/macos-style2.png
Binary files differ
diff --git a/src/widgets/doc/images/macos-tabwidget.png b/src/widgets/doc/images/macos-tabwidget.png
new file mode 100644
index 0000000000..d189dbae3c
--- /dev/null
+++ b/src/widgets/doc/images/macos-tabwidget.png
Binary files differ
diff --git a/src/widgets/doc/images/windows-style.png b/src/widgets/doc/images/windows-style.png
new file mode 100644
index 0000000000..f11a4510c3
--- /dev/null
+++ b/src/widgets/doc/images/windows-style.png
Binary files differ
diff --git a/src/widgets/doc/images/windows-style2.png b/src/widgets/doc/images/windows-style2.png
new file mode 100644
index 0000000000..168963cfde
--- /dev/null
+++ b/src/widgets/doc/images/windows-style2.png
Binary files differ
diff --git a/src/widgets/doc/images/windows-vista-style.png b/src/widgets/doc/images/windows-vista-style.png
new file mode 100644
index 0000000000..f28270007f
--- /dev/null
+++ b/src/widgets/doc/images/windows-vista-style.png
Binary files differ
diff --git a/src/widgets/doc/images/windows-xp-style.png b/src/widgets/doc/images/windows-xp-style.png
new file mode 100644
index 0000000000..7b323dd69b
--- /dev/null
+++ b/src/widgets/doc/images/windows-xp-style.png
Binary files differ
diff --git a/src/widgets/doc/src/qtwidgets-index.qdoc b/src/widgets/doc/src/qtwidgets-index.qdoc
index 55661f342b..6253ae8d7d 100644
--- a/src/widgets/doc/src/qtwidgets-index.qdoc
+++ b/src/widgets/doc/src/qtwidgets-index.qdoc
@@ -85,7 +85,7 @@ interfaces
\row
\li \image windowsvista-tabwidget.png
\li \image fusion-tabwidget.png
- \li \image macintosh-tabwidget.png
+ \li \image macos-tabwidget.png
\endtable
\l{Qt Style Sheets} are a powerful mechanism that allows you to customize the
diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc
deleted file mode 100644
index ca6de8fd5e..0000000000
--- a/src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** 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 Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page gallery-fusion.html
-
- \title Fusion Style Widget Gallery
- \ingroup gallery
-
- This page shows some of the widgets available in Qt
- when configured to use the "fusion" style.
-
-\section2 Buttons
-
-\table 100%
-\row
-\li \image fusion-pushbutton.png
- \caption The QPushButton widget provides a command button.
-\li \image fusion-toolbutton.png
- \caption The QToolButton class provides a quick-access button to commands
- or options, usually used inside a QToolBar.
-\endtable
-
-\table 100%
-\row
-\li \image fusion-checkbox.png
- \caption The QCheckBox widget provides a checkbox with a text label.
-\li \image fusion-radiobutton.png
- \caption The QRadioButton widget provides a radio button with a text or pixmap label.
-\endtable
-
-\section2 Containers
-
-\table 100%
-\row
-\li \image fusion-groupbox.png
- The QGroupBox widget provides a group box frame with a title.
-\li \image fusion-tabwidget.png
- The QTabWidget class provides a stack of tabbed widgets.
-\li \image fusion-frame.png
- The QFrame widget provides a simple decorated container for other widgets.
-\li \image fusion-toolbox.png
- The QToolBox class provides a column of tabbed widget items.
-\endtable
-
-\section2 Item Views
-
-\table 100%
-\row
-\li \image fusion-listview.png
- The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
-\li \image fusion-treeview.png
- The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
-\li \image fusion-tableview.png
- The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
-\li
-\endtable
-
-\section2 Display Widgets
-
-\table 100%
-\row
-\li \image fusion-progressbar.png
- The QProgressBar widget provides a horizontal progress bar.
-\li \image fusion-label.png
- The QLabel widget provides a text or image display.
-\li \image fusion-lcdnumber.png
- The QLCDNumber widget displays a number with LCD-like digits.
-\endtable
-
-\section2 Input Widgets
-
-\table 100%
-\row
-\li \image fusion-lineedit.png
- The QLineEdit widget is a one-line text editor.
-\li \image fusion-dateedit.png
- The QDateEdit class provides a widget for editing dates.
-\li \image fusion-timeedit.png
- The QTimeEdit class provides a widget for editing times.
-\li \image fusion-datetimeedit.png
- The QDateTimeEdit class provides a widget for editing dates and times.
-\endtable
-
-\table 100%
-\row
-\li \image fusion-slider.png
- The QSlider widget provides a vertical or horizontal slider.
-\li \image fusion-combobox.png
- The QComboBox widget is a combined button and pop-up list.
-\li \image fusion-spinbox.png
- The QSpinBox class provides a spin box widget.
-\endtable
-
-\table 100%
-\row
-\li \image fusion-fontcombobox.png
- The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
-\li \image fusion-doublespinbox.png
- The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
-\li \image fusion-horizontalscrollbar.png
- The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
-\endtable
-
-\table 100%
-\row
-\li \image fusion-dial.png
- The QDial class provides a rounded range control (like a speedometer or potentiometer).
-\li \image fusion-textedit.png
- The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
-\li \image fusion-calendarwidget.png
- The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
-\endtable
-*/
diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc
deleted file mode 100644
index 4d4e2b9a8d..0000000000
--- a/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** 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 Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page gallery-macintosh.html
-
- \title Macintosh Style Widget Gallery
- \ingroup gallery
-
- This page shows some of the widgets available in Qt
- when configured to use the "macintosh" style. This
- style is only available on Mac OSX, and provides
- native look'n'feel by integrating to the Mac OSX
- platform theme. Thus, the final appearance varies
- depending on the active Mac OSX theme.
-
-\section2 Buttons
-
-\table 100%
-\row
-\li \image macintosh-pushbutton.png
- \caption The QPushButton widget provides a command button.
-\li \image macintosh-toolbutton.png
- \caption The QToolButton class provides a quick-access button to commands
- or options, usually used inside a QToolBar.
-\endtable
-
-\table 100%
-\row
-\li \image macintosh-checkbox.png
- \caption The QCheckBox widget provides a checkbox with a text label.
-\li \image macintosh-radiobutton.png
- \caption The QRadioButton widget provides a radio button with a text or pixmap label.
-\endtable
-
-\section2 Containers
-
-\table 100%
-\row
-\li \image macintosh-groupbox.png
- The QGroupBox widget provides a group box frame with a title.
-\li \image macintosh-tabwidget.png
- The QTabWidget class provides a stack of tabbed widgets.
-\li \image macintosh-frame.png
- The QFrame widget provides a simple decorated container for other widgets.
-\li \image macintosh-toolbox.png
- The QToolBox class provides a column of tabbed widget items.
-\endtable
-
-\section2 Item Views
-
-\table 100%
-\row
-\li \image macintosh-listview.png
- The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
-\li \image macintosh-treeview.png
- The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
-\li \image macintosh-tableview.png
- The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
-\li
-\endtable
-
-\section2 Display Widgets
-
-\table 100%
-\row
-\li \image macintosh-progressbar.png
- The QProgressBar widget provides a horizontal progress bar.
-\li \image macintosh-label.png
- The QLabel widget provides a text or image display.
-\li \image macintosh-lcdnumber.png
- The QLCDNumber widget displays a number with LCD-like digits.
-\endtable
-
-\section2 Input Widgets
-
-\table 100%
-\row
-\li \image macintosh-lineedit.png
- The QLineEdit widget is a one-line text editor.
-\li \image macintosh-dateedit.png
- The QDateEdit class provides a widget for editing dates.
-\li \image macintosh-timeedit.png
- The QTimeEdit class provides a widget for editing times.
-\li \image macintosh-datetimeedit.png
- The QDateTimeEdit class provides a widget for editing dates and times.
-\endtable
-
-\table 100%
-\row
-\li \image macintosh-slider.png
- The QSlider widget provides a vertical or horizontal slider.
-\li \image macintosh-combobox.png
- The QComboBox widget is a combined button and pop-up list.
-\li \image macintosh-spinbox.png
- The QSpinBox class provides a spin box widget.
-\endtable
-
-\table 100%
-\row
-\li \image macintosh-fontcombobox.png
- The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
-\li \image macintosh-doublespinbox.png
- The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
-\li \image macintosh-horizontalscrollbar.png
- The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
-\endtable
-
-\table 100%
-\row
-\li \image macintosh-dial.png
- The QDial class provides a rounded range control (like a speedometer or potentiometer).
-\li \image macintosh-textedit.png
- The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
-\li \image macintosh-calendarwidget.png
- The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
-\endtable
-*/
diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc
deleted file mode 100644
index 40e41ff98a..0000000000
--- a/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** 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 Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page gallery-windows.html
-
- \title Windows Style Widget Gallery
- \ingroup gallery
-
- This page shows some of the widgets available in Qt
- when configured to use the "windows" style.
-
-\section2 Buttons
-
-\table 100%
-\row
-\li \image windows-pushbutton.png
- \caption The QPushButton widget provides a command button.
-\li \image windows-toolbutton.png
- \caption The QToolButton class provides a quick-access button to commands
- or options, usually used inside a QToolBar.
-\endtable
-
-\table 100%
-\row
-\li \image windows-checkbox.png
- \caption The QCheckBox widget provides a checkbox with a text label.
-\li \image windows-radiobutton.png
- \caption The QRadioButton widget provides a radio button with a text or pixmap label.
-\endtable
-
-\section2 Containers
-
-\table 100%
-\row
-\li \image windows-groupbox.png
- The QGroupBox widget provides a group box frame with a title.
-\li \image windows-tabwidget.png
- The QTabWidget class provides a stack of tabbed widgets.
-\li \image windows-frame.png
- The QFrame widget provides a simple decorated container for other widgets.
-\li \image windows-toolbox.png
- The QToolBox class provides a column of tabbed widget items.
-\endtable
-
-\section2 Item Views
-
-\table 100%
-\row
-\li \image windows-listview.png
- The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
-\li \image windows-treeview.png
- The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
-\li \image windows-tableview.png
- The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
-\li
-\endtable
-
-\section2 Display Widgets
-
-\table 100%
-\row
-\li \image windows-progressbar.png
- The QProgressBar widget provides a horizontal progress bar.
-\li \image windows-label.png
- The QLabel widget provides a text or image display.
-\li \image windows-lcdnumber.png
- The QLCDNumber widget displays a number with LCD-like digits.
-\endtable
-
-\section2 Input Widgets
-
-\table 100%
-\row
-\li \image windows-lineedit.png
- The QLineEdit widget is a one-line text editor.
-\li \image windows-dateedit.png
- The QDateEdit class provides a widget for editing dates.
-\li \image windows-timeedit.png
- The QTimeEdit class provides a widget for editing times.
-\li \image windows-datetimeedit.png
- The QDateTimeEdit class provides a widget for editing dates and times.
-\endtable
-
-\table 100%
-\row
-\li \image windows-slider.png
- The QSlider widget provides a vertical or horizontal slider.
-\li \image windows-combobox.png
- The QComboBox widget is a combined button and pop-up list.
-\li \image windows-spinbox.png
- The QSpinBox class provides a spin box widget.
-\endtable
-
-\table 100%
-\row
-\li \image windows-fontcombobox.png
- The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
-\li \image windows-doublespinbox.png
- The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
-\li \image windows-horizontalscrollbar.png
- The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
-\endtable
-
-\table 100%
-\row
-\li \image windows-dial.png
- The QDial class provides a rounded range control (like a speedometer or potentiometer).
-\li \image windows-textedit.png
- The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
-\li \image windows-calendarwidget.png
- The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
-\endtable
-*/
diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc
deleted file mode 100644
index 2347528a3c..0000000000
--- a/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** 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 Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page gallery-windowsvista.html
-
- \title Windows Vista Style Widget Gallery
- \ingroup gallery
-
- This page shows some of the widgets available in Qt
- when configured to use the "windowsvista" style. This
- style is only available on Windows Vista or later.
- This style provides native look'n'feel by integrating
- to the Windows platform theme. Thus, the final appearance
- varies depending on the active Windows theme.
-
-\section2 Buttons
-
-\table 100%
-\row
-\li \image windowsvista-pushbutton.png
- \caption The QPushButton widget provides a command button.
-\li \image windowsvista-toolbutton.png
- \caption The QToolButton class provides a quick-access button to commands
- or options, usually used inside a QToolBar.
-\endtable
-
-\table 100%
-\row
-\li \image windowsvista-checkbox.png
- \caption The QCheckBox widget provides a checkbox with a text label.
-\li \image windowsvista-radiobutton.png
- \caption The QRadioButton widget provides a radio button with a text or pixmap label.
-\endtable
-
-\section2 Containers
-
-\table 100%
-\row
-\li \image windowsvista-groupbox.png
- The QGroupBox widget provides a group box frame with a title.
-\li \image windowsvista-tabwidget.png
- The QTabWidget class provides a stack of tabbed widgets.
-\li \image windowsvista-frame.png
- The QFrame widget provides a simple decorated container for other widgets.
-\li \image windowsvista-toolbox.png
- The QToolBox class provides a column of tabbed widget items.
-\endtable
-
-\section2 Item Views
-
-\table 100%
-\row
-\li \image windowsvista-listview.png
- The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
-\li \image windowsvista-treeview.png
- The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
-\li \image windowsvista-tableview.png
- The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
-\li
-\endtable
-
-\section2 Display Widgets
-
-\table 100%
-\row
-\li \image windowsvista-progressbar.png
- The QProgressBar widget provides a horizontal progress bar.
-\li \image windowsvista-label.png
- The QLabel widget provides a text or image display.
-\li \image windowsvista-lcdnumber.png
- The QLCDNumber widget displays a number with LCD-like digits.
-\endtable
-
-\section2 Input Widgets
-
-\table 100%
-\row
-\li \image windowsvista-lineedit.png
- The QLineEdit widget is a one-line text editor.
-\li \image windowsvista-dateedit.png
- The QDateEdit class provides a widget for editing dates.
-\li \image windowsvista-timeedit.png
- The QTimeEdit class provides a widget for editing times.
-\li \image windowsvista-datetimeedit.png
- The QDateTimeEdit class provides a widget for editing dates and times.
-\endtable
-
-\table 100%
-\row
-\li \image windowsvista-slider.png
- The QSlider widget provides a vertical or horizontal slider.
-\li \image windowsvista-combobox.png
- The QComboBox widget is a combined button and pop-up list.
-\li \image windowsvista-spinbox.png
- The QSpinBox class provides a spin box widget.
-\endtable
-
-\table 100%
-\row
-\li \image windowsvista-fontcombobox.png
- The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
-\li \image windowsvista-doublespinbox.png
- The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
-\li \image windowsvista-horizontalscrollbar.png
- The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
-\endtable
-
-\table 100%
-\row
-\li \image windowsvista-dial.png
- The QDial class provides a rounded range control (like a speedometer or potentiometer).
-\li \image windowsvista-textedit.png
- The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
-\li \image windowsvista-calendarwidget.png
- The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
-\endtable
-*/
diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc
index f8b6584f19..a82462a432 100644
--- a/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc
+++ b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc
@@ -26,33 +26,67 @@
****************************************************************************/
/*!
- \group gallery
+ \page gallery.html
\title Qt Widget Gallery
\brief Qt widgets shown in different styles on various platforms.
Qt's support for widget styles and themes enables your application to fit in
- with the native desktop environment. Below, you can find links to the various
- widget styles that are supplied with Qt.
+ with the native desktop environment.
- \table
- \row
- \li \image windows-tabwidget.png Windows Style Widget Gallery
- \caption \l{Windows Style Widget Gallery}
+ The widgets examples show how some of the widgets available in Qt might
+ appear when configured to use the a particular style. Each style is only
+ available on the respective platfom, and provides native look and feel by
+ integrating to the platform theme. Thus, the final appearance varies
+ depending on the active theme.
- The Windows style is provided by QWindowsStyle.
- \li \image windowsvista-tabwidget.png Windows Vista Style Widget Gallery
- \caption \l{Windows Vista Style Widget Gallery}
+ \table
+ \row
+ \li The Windows style ("windows") is provided by QWindowsStyle.
+ \li \image windows-style.png Windows Style
+ \row
+ \li \image windows-vista-style.png Windows Vista Style
+ \li The Windows Vista style ("windowsvista") is provided by
+ QWindowsVistaStyle.
+ \row
+ \li The \macos style ("macintosh") is provided by QMacStyle.
+ \li \image macos-style.png \macos Style
+ \row
+ \li \image fusion-style.png Fusion Style
+ \li The Fusion style ("fusion") is provided by QFusionStyle.
+ \endtable
- The Windows Vista style is provided by QWindowsVistaStyle.
+ The Styles example displays the following widgets:
- \row
- \li \image macintosh-tabwidget.png Macintosh Style Widget Gallery
- \caption \l{Macintosh Style Widget Gallery}
+ \list
+ \li QCheckBox (1) provides a checkbox with a text label.
+ \li QRadioButton (2) provides a radio button with a text or pixmap
+ label.
+ \li QPushButton (3) provides a command button.
+ \li QTabWidget (4) provides a stack of tabbed widgets.
+ \li QTableWidget (5) provides a classic item-based table view.
+ \li QScrollBar (6) provides a vertical or horizontal scroll bar.
+ \li QProgressBar (7) provides a horizontal progress bar.
+ \li QDateTimeEdit (8) provides a widget for editing dates and times.
+ \li QSlider (9) provides a vertical or horizontal slider.
+ \li QDial (10) provides a rounded range control (like a speedometer
+ or potentiometer).
+ \endlist
- The Macintosh style is provided by QMacStyle.
- \li \image fusion-tabwidget.png Fusion Style Widget Gallery
- \caption \l{Fusion Style Widget Gallery}
+ The Calendar Widget example displays some additional widgets, here run on
+ Windows 10 and \macos:
- The Fusion style is provided by QFusionStyle.
- \endtable
+ \image windows-style2.png
+ \caption Calendar Widget example on Windows 10
+
+ \image macos-style2.png
+ \caption Calendar Widget example on \macos
+
+ \list
+ \li QGroupBox (1) provides a group box frame with a title.
+ \li QCalendarWidget (2) provides a monthly calendar widget
+ that can be used to select dates.
+ \li QLabel (3) provides a text or image display.
+ \li QDateEdit (4) provides a widget for editing dates.
+ \li QComboBox (5) provides a combined button and pop-up list.
+ \endlist
*/
diff --git a/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc b/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc
index 15af308cec..700a4479fd 100644
--- a/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc
+++ b/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc
@@ -45,21 +45,15 @@
\row
\li \image fusion-label.png
\li \image windowsvista-pushbutton.png
- \li \image macintosh-progressbar.png
+ \li \image macos-progressbar.png
\row
\li \image fusion-combobox.png
\li \image windowsvista-radiobutton.png
- \li \image macintosh-lineedit.png
+ \li \image macos-lineedit.png
\endtable
\annotatedlist basicwidgets
- \table
- \row
- \li \image windowsvista-tabwidget.png
- \li \image macintosh-groupbox.png
- \endtable
-
\section2 Advanced Widget Classes
diff --git a/src/widgets/itemviews/itemviews.pri b/src/widgets/itemviews/itemviews.pri
index d78bc4b40e..ed0e3fe072 100644
--- a/src/widgets/itemviews/itemviews.pri
+++ b/src/widgets/itemviews/itemviews.pri
@@ -28,9 +28,6 @@ HEADERS += \
itemviews/qitemeditorfactory_p.h \
itemviews/qtreewidgetitemiterator.h \
itemviews/qdatawidgetmapper.h \
- itemviews/qcolumnviewgrip_p.h \
- itemviews/qcolumnview.h \
- itemviews/qcolumnview_p.h \
itemviews/qstyleditemdelegate.h
SOURCES += \
@@ -49,11 +46,20 @@ SOURCES += \
itemviews/qitemeditorfactory.cpp \
itemviews/qtreewidgetitemiterator.cpp \
itemviews/qdatawidgetmapper.cpp \
- itemviews/qcolumnview.cpp \
- itemviews/qcolumnviewgrip.cpp \
itemviews/qstyleditemdelegate.cpp
}
+qtConfig(columnview) {
+ HEADERS += \
+ itemviews/qcolumnviewgrip_p.h \
+ itemviews/qcolumnview.h \
+ itemviews/qcolumnview_p.h
+
+ SOURCES += \
+ itemviews/qcolumnview.cpp \
+ itemviews/qcolumnviewgrip.cpp
+}
+
HEADERS += \
itemviews/qfileiconprovider.h \
itemviews/qfileiconprovider_p.h \
diff --git a/src/widgets/itemviews/qcolumnview.h b/src/widgets/itemviews/qcolumnview.h
index 7d5e2f5cd1..42eac7426a 100644
--- a/src/widgets/itemviews/qcolumnview.h
+++ b/src/widgets/itemviews/qcolumnview.h
@@ -43,10 +43,9 @@
#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qabstractitemview.h>
-QT_BEGIN_NAMESPACE
-
+QT_REQUIRE_CONFIG(columnview);
-#ifndef QT_NO_COLUMNVIEW
+QT_BEGIN_NAMESPACE
class QColumnViewPrivate;
@@ -109,8 +108,6 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_clicked(const QModelIndex &))
};
-#endif // QT_NO_COLUMNVIEW
-
QT_END_NAMESPACE
#endif // QCOLUMNVIEW_H
diff --git a/src/widgets/itemviews/qcolumnview_p.h b/src/widgets/itemviews/qcolumnview_p.h
index 7eff0f66cd..fa276075fe 100644
--- a/src/widgets/itemviews/qcolumnview_p.h
+++ b/src/widgets/itemviews/qcolumnview_p.h
@@ -54,8 +54,6 @@
#include <QtWidgets/private/qtwidgetsglobal_p.h>
#include "qcolumnview.h"
-#ifndef QT_NO_QCOLUMNVIEW
-
#include <private/qabstractitemview_p.h>
#include <QtCore/qabstractitemmodel.h>
@@ -67,6 +65,8 @@
#include <qevent.h>
#include <qscrollbar.h>
+QT_REQUIRE_CONFIG(columnview);
+
QT_BEGIN_NAMESPACE
class QColumnViewPreviewColumn : public QAbstractItemView {
@@ -190,9 +190,7 @@ public:
const QStyleOptionViewItem &option,
const QModelIndex &index) const Q_DECL_OVERRIDE;
};
-#endif // QT_NO_QCOLUMNVIEW
-
QT_END_NAMESPACE
-#endif //QCOLUMNVIEW_P_H
+#endif //QCOLUMNVIEW_P_H
diff --git a/src/widgets/itemviews/qcolumnviewgrip.cpp b/src/widgets/itemviews/qcolumnviewgrip.cpp
index f7d6e6d2b0..4a4237805f 100644
--- a/src/widgets/itemviews/qcolumnviewgrip.cpp
+++ b/src/widgets/itemviews/qcolumnviewgrip.cpp
@@ -37,8 +37,6 @@
**
****************************************************************************/
-#ifndef QT_NO_QCOLUMNVIEW
-
#include "qcolumnviewgrip_p.h"
#include <qstyleoption.h>
#include <qpainter.h>
@@ -190,5 +188,3 @@ originalXLocation(-1)
QT_END_NAMESPACE
#include "moc_qcolumnviewgrip_p.cpp"
-
-#endif // QT_NO_QCOLUMNVIEW
diff --git a/src/widgets/itemviews/qcolumnviewgrip_p.h b/src/widgets/itemviews/qcolumnviewgrip_p.h
index 3447f9f824..16c0aefada 100644
--- a/src/widgets/itemviews/qcolumnviewgrip_p.h
+++ b/src/widgets/itemviews/qcolumnviewgrip_p.h
@@ -54,7 +54,7 @@
#include <QtWidgets/private/qtwidgetsglobal_p.h>
#include <private/qwidget_p.h>
-#ifndef QT_NO_QCOLUMNVIEW
+QT_REQUIRE_CONFIG(columnview);
QT_BEGIN_NAMESPACE
@@ -98,6 +98,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_QCOLUMNVIEW
-
#endif //QCOLUMNVIEWGRIP_P_H
diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp
index c66a6d5673..868ac17b6f 100644
--- a/src/widgets/kernel/qformlayout.cpp
+++ b/src/widgets/kernel/qformlayout.cpp
@@ -1907,7 +1907,7 @@ void QFormLayout::getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) con
if (rowPtr)
*rowPtr = row;
- if (rolePtr && col != -1) {
+ if (rolePtr && row != -1) {
const bool spanning = col == 1 && d->m_matrix(row, col)->fullRow;
if (spanning) {
*rolePtr = SpanningRole;
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 370ae2aed1..b465ac36c7 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -5611,13 +5611,15 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
// punch a hole in the backingstore, so the texture will be visible.
if (!q->testAttribute(Qt::WA_AlwaysStackOnTop)) {
beginBackingStorePainting();
- QPainter p(q);
if (backingStore) {
+ QPainter p(q);
p.setCompositionMode(QPainter::CompositionMode_Source);
p.fillRect(q->rect(), Qt::transparent);
} else {
+ QImage img = grabFramebuffer();
+ QPainter p(q);
// We are not drawing to a backingstore: fall back to QImage
- p.drawImage(q->rect(), grabFramebuffer());
+ p.drawImage(q->rect(), img);
skipPaintEvent = true;
}
endBackingStorePainting();
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index 0c1cf0ec6e..7c6466f5da 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -608,7 +608,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
}
break;
#endif // QT_NO_LINEEDIT
-#ifndef QT_NO_COLUMNVIEW
+#if QT_CONFIG(columnview)
case PE_IndicatorColumnViewArrow: {
if (const QStyleOptionViewItem *viewOpt = qstyleoption_cast<const QStyleOptionViewItem *>(opt)) {
bool reverse = (viewOpt->direction == Qt::RightToLeft);
@@ -660,7 +660,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
p->restore();
}
break; }
-#endif //QT_NO_COLUMNVIEW
+#endif //QT_CONFIG(columnview)
case PE_IndicatorItemViewItemDrop: {
QRect rect = opt->rect;
if (opt->rect.height() == 0)
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 7e01f6f3d5..746dc20122 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -1978,7 +1978,7 @@ void QPlainTextEdit::paintEvent(QPaintEvent *e)
}
- if (!placeholderText().isEmpty() && document()->isEmpty()) {
+ if (!placeholderText().isEmpty() && document()->isEmpty() && layout->preeditAreaText().isEmpty()) {
Q_D(QPlainTextEdit);
QColor col = d->control->palette().text().color();
col.setAlpha(128);
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index 57af09fef5..e13ea83fd7 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -513,7 +513,8 @@ void QPushButton::focusOutEvent(QFocusEvent *e)
Ownership of the menu is \e not transferred to the push button.
\image fusion-pushbutton-menu.png Screenshot of a Fusion style push button with popup menu.
- A push button with popup menus shown in the \l{Fusion Style Widget Gallery}{Fusion widget style}.
+ A push button with popup menus shown in the \l{Qt Widget Gallery}
+ {Fusion widget style}.
\sa menu()
*/
diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp
index 82857c8805..f0ede5f2ff 100644
--- a/src/widgets/widgets/qsizegrip.cpp
+++ b/src/widgets/widgets/qsizegrip.cpp
@@ -197,7 +197,7 @@ Qt::Corner QSizeGripPrivate::corner() const
\table 50%
\row \li \inlineimage fusion-statusbar-sizegrip.png Screenshot of a Fusion style size grip
\li A size grip widget at the bottom-right corner of a main window, shown in the
- \l{Fusion Style Widget Gallery}{Fusion widget style}.
+ \l{Qt Widget Gallery}{Fusion widget style}.
\endtable
The QSizeGrip class inherits QWidget and reimplements the \l
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index d2bd7285ca..060d1f9a03 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -302,7 +302,7 @@ void QTabBar::initStyleOption(QStyleOptionTab *option, int tabIndex) const
\table 100%
\row \li \inlineimage fusion-tabbar.png Screenshot of a Fusion style tab bar
- \li A tab bar shown in the Fusion widget style.
+ \li A tab bar shown in the \l{Qt Widget Gallery}{Fusion widget style}.
\row \li \inlineimage fusion-tabbar-truncated.png Screenshot of a truncated Fusion tab bar
\li A truncated tab bar shown in the Fusion widget style.
\endtable
diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp
index 946620d61f..da948849f6 100644
--- a/tests/auto/corelib/io/qdir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp
@@ -2322,8 +2322,11 @@ void tst_QDir::cdBelowRoot()
void tst_QDir::emptyDir()
{
const QString tempDir = QDir::currentPath() + "/tmpdir/";
- QVERIFY(QDir().mkdir(tempDir));
- QVERIFY(QDir(tempDir).mkdir("emptyDirectory"));
+ QDir temp(tempDir);
+ if (!temp.exists()) {
+ QVERIFY(QDir().mkdir(tempDir));
+ }
+ QVERIFY(temp.mkdir("emptyDirectory"));
QDir testDir(tempDir + "emptyDirectory");
QVERIFY(testDir.isEmpty());
diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
index 6b1516600f..de6eb28503 100644
--- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
+++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
@@ -94,6 +94,7 @@ private slots:
void setEnvironment();
void setProcessEnvironment_data();
void setProcessEnvironment();
+ void environmentIsSorted();
void spaceInName();
void setStandardInputFile();
void setStandardOutputFile_data();
@@ -1734,6 +1735,47 @@ void tst_QProcess::setProcessEnvironment()
}
}
+void tst_QProcess::environmentIsSorted()
+{
+ QProcessEnvironment env;
+ env.insert(QLatin1String("a"), QLatin1String("foo_a"));
+ env.insert(QLatin1String("B"), QLatin1String("foo_B"));
+ env.insert(QLatin1String("c"), QLatin1String("foo_c"));
+ env.insert(QLatin1String("D"), QLatin1String("foo_D"));
+ env.insert(QLatin1String("e"), QLatin1String("foo_e"));
+ env.insert(QLatin1String("F"), QLatin1String("foo_F"));
+ env.insert(QLatin1String("Path"), QLatin1String("foo_Path"));
+ env.insert(QLatin1String("SystemRoot"), QLatin1String("foo_SystemRoot"));
+
+ const QStringList envlist = env.toStringList();
+
+#ifdef Q_OS_WIN32
+ // The environment block passed to CreateProcess "[Requires that] All strings in the
+ // environment block must be sorted alphabetically by name. The sort is case-insensitive,
+ // Unicode order, without regard to locale."
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms682009(v=vs.85).aspx
+ // So on Windows we sort that way.
+ const QStringList expected = { QLatin1String("a=foo_a"),
+ QLatin1String("B=foo_B"),
+ QLatin1String("c=foo_c"),
+ QLatin1String("D=foo_D"),
+ QLatin1String("e=foo_e"),
+ QLatin1String("F=foo_F"),
+ QLatin1String("Path=foo_Path"),
+ QLatin1String("SystemRoot=foo_SystemRoot") };
+#else
+ const QStringList expected = { QLatin1String("B=foo_B"),
+ QLatin1String("D=foo_D"),
+ QLatin1String("F=foo_F"),
+ QLatin1String("Path=foo_Path"),
+ QLatin1String("SystemRoot=foo_SystemRoot"),
+ QLatin1String("a=foo_a"),
+ QLatin1String("c=foo_c"),
+ QLatin1String("e=foo_e") };
+#endif
+ QCOMPARE(envlist, expected);
+}
+
void tst_QProcess::systemEnvironment()
{
QVERIFY(!QProcess::systemEnvironment().isEmpty());
diff --git a/tests/auto/corelib/io/qresourceengine/qresourceengine.pro b/tests/auto/corelib/io/qresourceengine/qresourceengine.pro
index a39de3c4d5..7676b04a03 100644
--- a/tests/auto/corelib/io/qresourceengine/qresourceengine.pro
+++ b/tests/auto/corelib/io/qresourceengine/qresourceengine.pro
@@ -1,13 +1,13 @@
CONFIG += testcase
TARGET = tst_qresourceengine
-load(resources)
+
QT = core testlib
SOURCES = tst_qresourceengine.cpp
RESOURCES += testqrc/test.qrc
runtime_resource.target = runtime_resource.rcc
runtime_resource.depends = $$PWD/testqrc/test.qrc
-runtime_resource.commands = $$QMAKE_RCC -root /runtime_resource/ -binary $${runtime_resource.depends} -o $${runtime_resource.target}
+runtime_resource.commands = $$[QT_INSTALL_BINS]/rcc -root /runtime_resource/ -binary $${runtime_resource.depends} -o $${runtime_resource.target}
QMAKE_EXTRA_TARGETS = runtime_resource
PRE_TARGETDEPS += $${runtime_resource.target}
QMAKE_DISTCLEAN += $${runtime_resource.target}
diff --git a/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST b/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST
index f6a49f032c..4cd3c2f0c8 100644
--- a/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST
+++ b/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST
@@ -1,2 +1,3 @@
[elapsed]
windows
+osx-10.12
diff --git a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
index 8833321b4f..3b25000b22 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
+++ b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
@@ -459,6 +459,8 @@ void tst_QSharedMemory::readOnly()
{
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
+#elif defined(Q_OS_MACOS)
+ QSKIP("QTBUG-59936: Times out on macOS", SkipAll);
#else
rememberKey("readonly_segfault");
// ### on windows disable the popup somehow
diff --git a/tests/auto/corelib/tools/qcollator/tst_qcollator.cpp b/tests/auto/corelib/tools/qcollator/tst_qcollator.cpp
index d09910fd5c..35a9af05f6 100644
--- a/tests/auto/corelib/tools/qcollator/tst_qcollator.cpp
+++ b/tests/auto/corelib/tools/qcollator/tst_qcollator.cpp
@@ -30,6 +30,7 @@
#include <qlocale.h>
#include <qcollator.h>
+#include <private/qglobal_p.h>
#include <cstring>
@@ -88,6 +89,8 @@ void tst_QCollator::compare_data()
QTest::addColumn<int>("result");
QTest::addColumn<int>("caseInsensitiveResult");
QTest::addColumn<bool>("numericMode");
+ QTest::addColumn<bool>("ignorePunctuation");
+ QTest::addColumn<int>("punctuationResult");
/*
A few tests below are commented out on the mac. It's unclear why they fail,
@@ -102,55 +105,72 @@ void tst_QCollator::compare_data()
comparison of Latin-1 values, although I'm not sure. So I
just test digits to make sure that it's not totally broken.
*/
- QTest::newRow("english1") << QString("en_US") << QString("5") << QString("4") << 1 << 1 << false;
- QTest::newRow("english2") << QString("en_US") << QString("4") << QString("6") << -1 << -1 << false;
- QTest::newRow("english3") << QString("en_US") << QString("5") << QString("6") << -1 << -1 << false;
- QTest::newRow("english4") << QString("en_US") << QString("a") << QString("b") << -1 << -1 << false;
- QTest::newRow("english5") << QString("en_US") << QString("test 9") << QString("test 19") << -1 << -1 << true;
+ QTest::newRow("english1") << QString("en_US") << QString("5") << QString("4") << 1 << 1 << false << false << 1;
+ QTest::newRow("english2") << QString("en_US") << QString("4") << QString("6") << -1 << -1 << false << false << -1;
+ QTest::newRow("english3") << QString("en_US") << QString("5") << QString("6") << -1 << -1 << false << false << -1;
+ QTest::newRow("english4") << QString("en_US") << QString("a") << QString("b") << -1 << -1 << false << false << -1;
+ QTest::newRow("english5") << QString("en_US") << QString("test 9") << QString("test 19") << -1 << -1 << true << false << -1;
+ QTest::newRow("english6") << QString("en_US") << QString("test 9") << QString("test_19") << -1 << -1 << true << true << -1;
+ QTest::newRow("english7") << QString("en_US") << QString("test_19") << QString("test 19") << 1 << 1 << true << false << 1;
+ QTest::newRow("english8") << QString("en_US") << QString("test.19") << QString("test,19") << 1 << 1 << true << true << 0;
/*
In Swedish, a with ring above (E5) comes before a with
diaresis (E4), which comes before o diaresis (F6), which
all come after z.
*/
- QTest::newRow("swedish1") << QString("sv_SE") << QString::fromLatin1("\xe5") << QString::fromLatin1("\xe4") << -1 << -1 << false;
- QTest::newRow("swedish2") << QString("sv_SE") << QString::fromLatin1("\xe4") << QString::fromLatin1("\xf6") << -1 << -1 << false;
- QTest::newRow("swedish3") << QString("sv_SE") << QString::fromLatin1("\xe5") << QString::fromLatin1("\xf6") << -1 << -1 << false;
- QTest::newRow("swedish4") << QString("sv_SE") << QString::fromLatin1("z") << QString::fromLatin1("\xe5") << -1 << -1 << false;
- QTest::newRow("swedish5") << QString("sv_SE") << QString("9") << QString("19") << -1 << -1 << true;
+ QTest::newRow("swedish1") << QString("sv_SE") << QString::fromLatin1("\xe5") << QString::fromLatin1("\xe4") << -1 << -1 << false << false << -1;
+ QTest::newRow("swedish2") << QString("sv_SE") << QString::fromLatin1("\xe4") << QString::fromLatin1("\xf6") << -1 << -1 << false << false << -1;
+ QTest::newRow("swedish3") << QString("sv_SE") << QString::fromLatin1("\xe5") << QString::fromLatin1("\xf6") << -1 << -1 << false << false << -1;
+ QTest::newRow("swedish4") << QString("sv_SE") << QString::fromLatin1("z") << QString::fromLatin1("\xe5") << -1 << -1 << false << false << -1;
+ QTest::newRow("swedish5") << QString("sv_SE") << QString("9") << QString("19") << -1 << -1 << true << false << -1;
+ QTest::newRow("swedish6") << QString("sv_SE") << QString("Test 9") << QString("Test_19") << -1 << -1 << true << true << -1;
+ QTest::newRow("swedish7") << QString("sv_SE") << QString("test_19") << QString("test 19") << 1 << 1 << true << false << 1;
+ QTest::newRow("swedish8") << QString("sv_SE") << QString("test.19") << QString("test,19") << 1 << 1 << true << true << 0;
+
/*
In Norwegian, ae (E6) comes before o with stroke (D8), which
comes before a with ring above (E5).
*/
- QTest::newRow("norwegian1") << QString("no_NO") << QString::fromLatin1("\xe6") << QString::fromLatin1("\xd8") << -1 << -1 << false;
- QTest::newRow("norwegian2") << QString("no_NO") << QString::fromLatin1("\xd8") << QString::fromLatin1("\xe5") << -1 << -1 << false;
- QTest::newRow("norwegian3") << QString("no_NO") << QString::fromLatin1("\xe6") << QString::fromLatin1("\xe5") << -1 << -1 << false;
- QTest::newRow("norwegian4") << QString("no_NO") << QString("9") << QString("19") << -1 << -1 << true;
+ QTest::newRow("norwegian1") << QString("no_NO") << QString::fromLatin1("\xe6") << QString::fromLatin1("\xd8") << -1 << -1 << false << false << -1;
+ QTest::newRow("norwegian2") << QString("no_NO") << QString::fromLatin1("\xd8") << QString::fromLatin1("\xe5") << -1 << -1 << false << false << -1;
+ QTest::newRow("norwegian3") << QString("no_NO") << QString::fromLatin1("\xe6") << QString::fromLatin1("\xe5") << -1 << -1 << false << false << -1;
+ QTest::newRow("norwegian4") << QString("no_NO") << QString("9") << QString("19") << -1 << -1 << true << false << -1;
+ QTest::newRow("norwegian5") << QString("no_NO") << QString("Test 9") << QString("Test_19") << -1 << -1 << true << true << -1;
+ QTest::newRow("norwegian6") << QString("no_NO") << QString("Test 9") << QString("Test_19") << -1 << -1 << true << true << -1;
+ QTest::newRow("norwegian7") << QString("no_NO") << QString("test_19") << QString("test 19") << 1 << 1 << true << false << 1;
+ QTest::newRow("norwegian8") << QString("no_NO") << QString("test.19") << QString("test,19") << 1 << 1 << true << true << 0;
/*
In German, z comes *after* a with diaresis (E4),
which comes before o diaresis (F6).
*/
- QTest::newRow("german1") << QString("de_DE") << QString::fromLatin1("a") << QString::fromLatin1("\xe4") << -1 << -1 << false;
- QTest::newRow("german2") << QString("de_DE") << QString::fromLatin1("b") << QString::fromLatin1("\xe4") << 1 << 1 << false;
- QTest::newRow("german3") << QString("de_DE") << QString::fromLatin1("z") << QString::fromLatin1("\xe4") << 1 << 1 << false;
- QTest::newRow("german4") << QString("de_DE") << QString::fromLatin1("\xe4") << QString::fromLatin1("\xf6") << -1 << -1 << false;
- QTest::newRow("german5") << QString("de_DE") << QString::fromLatin1("z") << QString::fromLatin1("\xf6") << 1 << 1 << false;
- QTest::newRow("german6") << QString("de_DE") << QString::fromLatin1("\xc0") << QString::fromLatin1("\xe0") << 1 << 0 << false;
- QTest::newRow("german7") << QString("de_DE") << QString::fromLatin1("\xd6") << QString::fromLatin1("\xf6") << 1 << 0 << false;
- QTest::newRow("german8") << QString("de_DE") << QString::fromLatin1("oe") << QString::fromLatin1("\xf6") << 1 << 1 << false;
- QTest::newRow("german9") << QString("de_DE") << QString("A") << QString("a") << 1 << 0 << false;
- QTest::newRow("german10") << QString("de_DE") << QString("9") << QString("19") << -1 << -1 << true;
+ QTest::newRow("german1") << QString("de_DE") << QString::fromLatin1("a") << QString::fromLatin1("\xe4") << -1 << -1 << false << false << -1;
+ QTest::newRow("german2") << QString("de_DE") << QString::fromLatin1("b") << QString::fromLatin1("\xe4") << 1 << 1 << false << false << 1;
+ QTest::newRow("german3") << QString("de_DE") << QString::fromLatin1("z") << QString::fromLatin1("\xe4") << 1 << 1 << false << false << 1;
+ QTest::newRow("german4") << QString("de_DE") << QString::fromLatin1("\xe4") << QString::fromLatin1("\xf6") << -1 << -1 << false << false << -1;
+ QTest::newRow("german5") << QString("de_DE") << QString::fromLatin1("z") << QString::fromLatin1("\xf6") << 1 << 1 << false << false << 1;
+ QTest::newRow("german6") << QString("de_DE") << QString::fromLatin1("\xc0") << QString::fromLatin1("\xe0") << 1 << 0 << false << false << 0;
+ QTest::newRow("german7") << QString("de_DE") << QString::fromLatin1("\xd6") << QString::fromLatin1("\xf6") << 1 << 0 << false << false << 0;
+ QTest::newRow("german8") << QString("de_DE") << QString::fromLatin1("oe") << QString::fromLatin1("\xf6") << 1 << 1 << false << false << 1;
+ QTest::newRow("german9") << QString("de_DE") << QString("A") << QString("a") << 1 << 0 << false << false << 0;
+ QTest::newRow("german10") << QString("de_DE") << QString("9") << QString("19") << -1 << -1 << true << false << -1;
+ QTest::newRow("german11") << QString("de_DE") << QString("Test 9") << QString("Test_19") << -1 << -1 << true << true << -1;
+ QTest::newRow("german12") << QString("de_DE") << QString("test_19") << QString("test 19") << 1 << 1 << true << false << 1;
+ QTest::newRow("german13") << QString("de_DE") << QString("test.19") << QString("test,19") << 1 << 1 << true << true << 0;
/*
French sorting of e and e with accent
*/
- QTest::newRow("french1") << QString("fr_FR") << QString::fromLatin1("\xe9") << QString::fromLatin1("e") << 1 << 1 << false;
- QTest::newRow("french2") << QString("fr_FR") << QString::fromLatin1("\xe9t") << QString::fromLatin1("et") << 1 << 1 << false;
- QTest::newRow("french3") << QString("fr_FR") << QString::fromLatin1("\xe9") << QString::fromLatin1("d") << 1 << 1 << false;
- QTest::newRow("french4") << QString("fr_FR") << QString::fromLatin1("\xe9") << QString::fromLatin1("f") << -1 << -1 << false;
- QTest::newRow("french5") << QString("fr_FR") << QString("9") << QString("19") << -1 << -1 << true;
+ QTest::newRow("french1") << QString("fr_FR") << QString::fromLatin1("\xe9") << QString::fromLatin1("e") << 1 << 1 << false << false << 1;
+ QTest::newRow("french2") << QString("fr_FR") << QString::fromLatin1("\xe9t") << QString::fromLatin1("et") << 1 << 1 << false << false << 1;
+ QTest::newRow("french3") << QString("fr_FR") << QString::fromLatin1("\xe9") << QString::fromLatin1("d") << 1 << 1 << false << false << 1;
+ QTest::newRow("french4") << QString("fr_FR") << QString::fromLatin1("\xe9") << QString::fromLatin1("f") << -1 << -1 << false << false << -1;
+ QTest::newRow("french5") << QString("fr_FR") << QString("9") << QString("19") << -1 << -1 << true << false << -1;
+ QTest::newRow("french6") << QString("fr_FR") << QString("Test 9") << QString("Test_19") << -1 << -1 << true << true << -1;
+ QTest::newRow("french7") << QString("fr_FR") << QString("test_19") << QString("test 19") << 1 << 1 << true << false << 1;
+ QTest::newRow("french8") << QString("fr_FR") << QString("test.19") << QString("test,19") << 1 << 1 << true << true << 0;
}
@@ -162,6 +182,8 @@ void tst_QCollator::compare()
QFETCH(int, result);
QFETCH(int, caseInsensitiveResult);
QFETCH(bool, numericMode);
+ QFETCH(bool, ignorePunctuation);
+ QFETCH(int, punctuationResult);
QCollator collator(locale);
@@ -176,6 +198,10 @@ void tst_QCollator::compare()
QCOMPARE(collator.compare(s1, s2), result);
collator.setCaseSensitivity(Qt::CaseInsensitive);
QCOMPARE(collator.compare(s1, s2), caseInsensitiveResult);
+#if !QT_CONFIG(iconv)
+ collator.setIgnorePunctuation(ignorePunctuation);
+ QCOMPARE(collator.compare(s1, s2), punctuationResult);
+#endif
}
diff --git a/tests/auto/corelib/tools/qtimeline/BLACKLIST b/tests/auto/corelib/tools/qtimeline/BLACKLIST
index b5861756d8..74f84a4a6d 100644
--- a/tests/auto/corelib/tools/qtimeline/BLACKLIST
+++ b/tests/auto/corelib/tools/qtimeline/BLACKLIST
@@ -1,4 +1,7 @@
[interpolation]
windows
+osx-10.12
[duration]
windows
+[frameRate]
+osx-10.12
diff --git a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
index 2cebe1fb6f..714eb8a22a 100644
--- a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
+++ b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
@@ -299,7 +299,7 @@ void tst_QTimeZone::nullTest()
void tst_QTimeZone::dataStreamTest()
{
- // Test the OffsetFromUtc backend serialization
+ // Test the OffsetFromUtc backend serialization. First with a custom timezone:
QTimeZone tz1("QST", 123456, "Qt Standard Time", "QST", QLocale::Norway, "Qt Testing");
QByteArray tmp;
{
@@ -321,6 +321,20 @@ void tst_QTimeZone::dataStreamTest()
QString("Qt Standard Time"));
QCOMPARE(tz2.offsetFromUtc(QDateTime::currentDateTime()), 123456);
+ // And then with a standard IANA timezone (QTBUG-60595):
+ tz1 = QTimeZone("UTC");
+ QCOMPARE(tz1.isValid(), true);
+ {
+ QDataStream ds(&tmp, QIODevice::WriteOnly);
+ ds << tz1;
+ }
+ {
+ QDataStream ds(&tmp, QIODevice::ReadOnly);
+ ds >> tz2;
+ }
+ QCOMPARE(tz2.isValid(), true);
+ QCOMPARE(tz2.id(), tz1.id());
+
// Test the system backend serialization
tz1 = QTimeZone("Pacific/Auckland");
diff --git a/tests/auto/gui/image/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro
index f5570c2497..b3c60bf32b 100644
--- a/tests/auto/gui/image/qicon/qicon.pro
+++ b/tests/auto/gui/image/qicon/qicon.pro
@@ -4,6 +4,6 @@ TARGET = tst_qicon
QT += testlib
qtHaveModule(widgets): QT += widgets
SOURCES += tst_qicon.cpp
-RESOURCES = tst_qicon.qrc
+RESOURCES = tst_qicon.qrc tst_qicon.cpp
TESTDATA += icons/* second_icons/* *.png *.svg *.svgz
diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp
index 571a3c6984..bf8f7ade9e 100644
--- a/tests/auto/gui/image/qicon/tst_qicon.cpp
+++ b/tests/auto/gui/image/qicon/tst_qicon.cpp
@@ -83,7 +83,7 @@ bool tst_QIcon::haveImageFormat(QByteArray const& desiredFormat)
tst_QIcon::tst_QIcon()
: m_pngImageFileName(QFINDTESTDATA("image.png"))
, m_pngRectFileName(QFINDTESTDATA("rect.png"))
- , m_sourceFileName(QFINDTESTDATA(__FILE__))
+ , m_sourceFileName(":/tst_qicon.cpp")
{
}
diff --git a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
index 18649b3de5..574ad805ca 100644
--- a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
+++ b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
@@ -193,7 +193,7 @@ void tst_QImageReader::getSetCheck()
}
tst_QImageReader::tst_QImageReader() :
- m_temporaryDir(QStringLiteral("tst_qimagereaderXXXXXX"))
+ m_temporaryDir(QDir::tempPath() + QStringLiteral("/tst_qimagereaderXXXXXX"))
{
m_temporaryDir.setAutoRemove(true);
}
@@ -728,13 +728,15 @@ void tst_QImageReader::imageFormatBeforeRead()
SKIP_IF_UNSUPPORTED(format);
- QImageReader reader(fileName);
+ QImageReader reader(prefix + fileName);
+ QVERIFY(reader.canRead());
if (reader.supportsOption(QImageIOHandler::ImageFormat)) {
QImage::Format fileFormat = reader.imageFormat();
QCOMPARE(fileFormat, imageFormat);
QSize size = reader.size();
QImage image(size, fileFormat);
QVERIFY(reader.read(&image));
+ QEXPECT_FAIL("bmp-3", "Semi-transparent BMPs not predicted", Continue);
QCOMPARE(image.format(), fileFormat);
}
}
diff --git a/tests/auto/gui/kernel/qguieventloop/BLACKLIST b/tests/auto/gui/kernel/qguieventloop/BLACKLIST
new file mode 100644
index 0000000000..d55c67998d
--- /dev/null
+++ b/tests/auto/gui/kernel/qguieventloop/BLACKLIST
@@ -0,0 +1,2 @@
+[processEvents]
+osx-10.12
diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
index cd1de209da..c4432c83ee 100644
--- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -938,9 +938,16 @@ void tst_QTcpServer::linkLocal()
//Windows preallocates link local addresses to interfaces that are down.
//These may or may not work depending on network driver (they do not work for the Bluetooth PAN driver)
if (iface.flags() & QNetworkInterface::IsUp) {
+#if defined(Q_OS_WIN)
// Do not connect to the Teredo Tunneling interface on Windows Xp.
if (iface.humanReadableName() == QString("Teredo Tunneling Pseudo-Interface"))
continue;
+#elif defined(Q_OS_DARWIN)
+ // Do not add "utun" interfaces on macOS: nothing ever gets received
+ // (we don't know why)
+ if (iface.name().startsWith("utun"))
+ continue;
+#endif
foreach (QNetworkAddressEntry addressEntry, iface.addressEntries()) {
QHostAddress addr = addressEntry.ip();
if (addr.isInSubnet(localMaskv4, 16)) {
diff --git a/tests/auto/network/socket/qudpsocket/BLACKLIST b/tests/auto/network/socket/qudpsocket/BLACKLIST
index 6669b094ce..cf25c96fd8 100644
--- a/tests/auto/network/socket/qudpsocket/BLACKLIST
+++ b/tests/auto/network/socket/qudpsocket/BLACKLIST
@@ -25,4 +25,5 @@ osx
osx
[zeroLengthDatagram]
osx
-
+[linkLocalIPv6]
+redhatenterpriselinuxworkstation-6.6
diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
index b476fdd334..43d0781083 100644
--- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
+++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
@@ -1638,9 +1638,16 @@ void tst_QUdpSocket::linkLocalIPv4()
//Windows preallocates link local addresses to interfaces that are down.
//These may or may not work depending on network driver (they do not work for the Bluetooth PAN driver)
if (iface.flags() & QNetworkInterface::IsUp) {
+#if defined(Q_OS_WIN)
// Do not add the Teredo Tunneling Pseudo Interface on Windows.
if (iface.humanReadableName().contains("Teredo"))
continue;
+#elif defined(Q_OS_DARWIN)
+ // Do not add "utun" interfaces on macOS: nothing ever gets received
+ // (we don't know why)
+ if (iface.name().startsWith("utun"))
+ continue;
+#endif
foreach (QNetworkAddressEntry addr, iface.addressEntries()) {
if (addr.ip().isInSubnet(localMask, 16)) {
addresses << addr.ip();
diff --git a/tests/auto/tools/moc/parse-defines.h b/tests/auto/tools/moc/parse-defines.h
index 6100bf67ad..7b0fa29d7c 100644
--- a/tests/auto/tools/moc/parse-defines.h
+++ b/tests/auto/tools/moc/parse-defines.h
@@ -146,6 +146,15 @@ signals:
#undef QString
+#ifdef Q_MOC_RUN
+// Normaly, redefining keywords is forbidden, but we should not abort parsing
+#define and &&
+#define and_eq &=
+#define bitand &
+#define true 1
+#undef true
+#endif
+
PD_END_NAMESPACE
#endif
diff --git a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui
index ace2ab8f44..960a9dac17 100644
--- a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui
+++ b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui
@@ -6,7 +6,7 @@
<x>0</x>
<y>0</y>
<width>416</width>
- <height>488</height>
+ <height>515</height>
</rect>
</property>
<property name="windowTitle" >
@@ -16,44 +16,24 @@
<property name="margin" >
<number>0</number>
</property>
- <item row="0" column="0" colspan="2" >
- <layout class="QHBoxLayout" name="horizontalLayout_4" >
- <item>
- <widget class="QComboBox" name="unit" />
- </item>
- <item>
- <spacer name="horizontalSpacer_3" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="1" column="0" colspan="2" >
- <widget class="QGroupBox" name="groupBox_2" >
- <property name="title" >
+ <item row="1" column="0" colspan="2">
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
<string>Paper</string>
</property>
- <layout class="QGridLayout" name="gridLayout_2" >
- <item row="0" column="0" >
- <widget class="QLabel" name="pageSizeLabel" >
- <property name="text" >
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="pageSizeLabel">
+ <property name="text">
<string>Page size:</string>
</property>
- <property name="buddy" >
- <cstring>paperSize</cstring>
+ <property name="buddy">
+ <cstring>pageSizeCombo</cstring>
</property>
</widget>
</item>
<item row="0" column="1" >
- <widget class="QComboBox" name="paperSize" />
+ <widget class="QComboBox" name="pageSizeCombo" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="widthLabel" >
@@ -61,14 +41,14 @@
<string>Width:</string>
</property>
<property name="buddy" >
- <cstring>paperWidth</cstring>
+ <cstring>pageWidth</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<layout class="QHBoxLayout" name="horizontalLayout_3" >
<item>
- <widget class="QDoubleSpinBox" name="paperWidth" >
+ <widget class="QDoubleSpinBox" name="pageWidth" >
<property name="maximum" >
<double>9999.989999999999782</double>
</property>
@@ -80,12 +60,12 @@
<string>Height:</string>
</property>
<property name="buddy" >
- <cstring>paperHeight</cstring>
+ <cstring>pageHeight</cstring>
</property>
</widget>
</item>
<item>
- <widget class="QDoubleSpinBox" name="paperHeight" >
+ <widget class="QDoubleSpinBox" name="pageHeight" >
<property name="maximum" >
<double>9999.989999999999782</double>
</property>
@@ -122,9 +102,32 @@
</layout>
</widget>
</item>
- <item row="2" column="0" >
- <widget class="QGroupBox" name="groupBox_3" >
- <property name="title" >
+ <item row="0" column="0" colspan="2">
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QComboBox" name="unitCombo"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="1" rowspan="2">
+ <widget class="QWidget" name="preview" native="true"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
<string>Orientation</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
@@ -175,12 +178,9 @@
</layout>
</widget>
</item>
- <item rowspan="2" row="2" column="1" >
- <widget class="QWidget" native="1" name="preview" />
- </item>
- <item row="3" column="0" >
- <widget class="QGroupBox" name="groupBox" >
- <property name="title" >
+ <item row="3" column="0">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
<string>Margins</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2" >
@@ -280,9 +280,25 @@
</item>
</layout>
</item>
- <item row="2" column="1" >
- <widget class="QDoubleSpinBox" name="bottomMargin" >
- <property name="toolTip" >
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="1">
+ <widget class="QDoubleSpinBox" name="bottomMargin">
+ <property name="toolTip">
<string>bottom margin</string>
</property>
<property name="accessibleName" >
@@ -296,28 +312,15 @@
</property>
</widget>
</item>
- <item row="0" column="2" >
- <spacer name="horizontalSpacer_2" >
- <property name="orientation" >
+ <item row="0" column="0">
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="0" >
- <spacer name="horizontalSpacer_5" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType" >
+ <property name="sizeHint" stdset="0">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0" >
@@ -333,15 +336,57 @@
</layout>
</widget>
</item>
- <item row="4" column="0" >
- <spacer name="verticalSpacer" >
- <property name="orientation" >
+ <item row="5" column="0" colspan="2">
+ <widget class="QGroupBox" name="pagesPerSheetButtonGroup">
+ <property name="title">
+ <string>Page Layout</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="1">
+ <widget class="QComboBox" name="pagesPerSheetCombo"/>
+ </item>
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Page order:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="pagesPerSheetLayoutCombo"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Pages per sheet:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
- <height>0</height>
+ <height>40</height>
</size>
</property>
</spacer>
diff --git a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
index 0c6fc92ea2..d75f7f1146 100644
--- a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
@@ -1,7 +1,7 @@
/********************************************************************************
** Form generated from reading UI file 'qpagesetupwidget.ui'
**
-** Created by: Qt User Interface Compiler version 5.0.0
+** Created by: Qt User Interface Compiler version 5.9.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
@@ -31,21 +31,22 @@ class Ui_QPageSetupWidget
{
public:
QGridLayout *gridLayout_3;
- QHBoxLayout *horizontalLayout_4;
- QComboBox *unit;
- QSpacerItem *horizontalSpacer_3;
QGroupBox *groupBox_2;
QGridLayout *gridLayout_2;
QLabel *pageSizeLabel;
- QComboBox *paperSize;
+ QComboBox *pageSizeCombo;
QLabel *widthLabel;
QHBoxLayout *horizontalLayout_3;
- QDoubleSpinBox *paperWidth;
+ QDoubleSpinBox *pageWidth;
QLabel *heightLabel;
- QDoubleSpinBox *paperHeight;
+ QDoubleSpinBox *pageHeight;
QLabel *paperSourceLabel;
QComboBox *paperSource;
QSpacerItem *horizontalSpacer_4;
+ QHBoxLayout *horizontalLayout_4;
+ QComboBox *unitCombo;
+ QSpacerItem *horizontalSpacer_3;
+ QWidget *preview;
QGroupBox *groupBox_3;
QVBoxLayout *verticalLayout;
QRadioButton *portrait;
@@ -53,7 +54,6 @@ public:
QRadioButton *reverseLandscape;
QRadioButton *reversePortrait;
QSpacerItem *verticalSpacer_5;
- QWidget *preview;
QGroupBox *groupBox;
QHBoxLayout *horizontalLayout_2;
QGridLayout *gridLayout;
@@ -64,33 +64,26 @@ public:
QSpacerItem *horizontalSpacer;
QDoubleSpinBox *rightMargin;
QSpacerItem *horizontalSpacer_8;
- QDoubleSpinBox *bottomMargin;
QSpacerItem *horizontalSpacer_2;
+ QDoubleSpinBox *bottomMargin;
QSpacerItem *horizontalSpacer_5;
+ QGroupBox *pagesPerSheetButtonGroup;
+ QGridLayout *gridLayout_4;
+ QComboBox *pagesPerSheetCombo;
+ QSpacerItem *horizontalSpacer_6;
+ QLabel *label;
+ QComboBox *pagesPerSheetLayoutCombo;
+ QLabel *label_2;
QSpacerItem *verticalSpacer;
void setupUi(QWidget *QPageSetupWidget)
{
if (QPageSetupWidget->objectName().isEmpty())
QPageSetupWidget->setObjectName(QStringLiteral("QPageSetupWidget"));
- QPageSetupWidget->resize(416, 488);
+ QPageSetupWidget->resize(416, 515);
gridLayout_3 = new QGridLayout(QPageSetupWidget);
gridLayout_3->setContentsMargins(0, 0, 0, 0);
gridLayout_3->setObjectName(QStringLiteral("gridLayout_3"));
- horizontalLayout_4 = new QHBoxLayout();
- horizontalLayout_4->setObjectName(QStringLiteral("horizontalLayout_4"));
- unit = new QComboBox(QPageSetupWidget);
- unit->setObjectName(QStringLiteral("unit"));
-
- horizontalLayout_4->addWidget(unit);
-
- horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-
- horizontalLayout_4->addItem(horizontalSpacer_3);
-
-
- gridLayout_3->addLayout(horizontalLayout_4, 0, 0, 1, 2);
-
groupBox_2 = new QGroupBox(QPageSetupWidget);
groupBox_2->setObjectName(QStringLiteral("groupBox_2"));
gridLayout_2 = new QGridLayout(groupBox_2);
@@ -100,10 +93,10 @@ public:
gridLayout_2->addWidget(pageSizeLabel, 0, 0, 1, 1);
- paperSize = new QComboBox(groupBox_2);
- paperSize->setObjectName(QStringLiteral("paperSize"));
+ pageSizeCombo = new QComboBox(groupBox_2);
+ pageSizeCombo->setObjectName(QStringLiteral("pageSizeCombo"));
- gridLayout_2->addWidget(paperSize, 0, 1, 1, 1);
+ gridLayout_2->addWidget(pageSizeCombo, 0, 1, 1, 1);
widthLabel = new QLabel(groupBox_2);
widthLabel->setObjectName(QStringLiteral("widthLabel"));
@@ -112,22 +105,22 @@ public:
horizontalLayout_3 = new QHBoxLayout();
horizontalLayout_3->setObjectName(QStringLiteral("horizontalLayout_3"));
- paperWidth = new QDoubleSpinBox(groupBox_2);
- paperWidth->setObjectName(QStringLiteral("paperWidth"));
- paperWidth->setMaximum(9999.99);
+ pageWidth = new QDoubleSpinBox(groupBox_2);
+ pageWidth->setObjectName(QStringLiteral("pageWidth"));
+ pageWidth->setMaximum(9999.99);
- horizontalLayout_3->addWidget(paperWidth);
+ horizontalLayout_3->addWidget(pageWidth);
heightLabel = new QLabel(groupBox_2);
heightLabel->setObjectName(QStringLiteral("heightLabel"));
horizontalLayout_3->addWidget(heightLabel);
- paperHeight = new QDoubleSpinBox(groupBox_2);
- paperHeight->setObjectName(QStringLiteral("paperHeight"));
- paperHeight->setMaximum(9999.99);
+ pageHeight = new QDoubleSpinBox(groupBox_2);
+ pageHeight->setObjectName(QStringLiteral("pageHeight"));
+ pageHeight->setMaximum(9999.99);
- horizontalLayout_3->addWidget(paperHeight);
+ horizontalLayout_3->addWidget(pageHeight);
gridLayout_2->addLayout(horizontalLayout_3, 1, 1, 1, 1);
@@ -149,6 +142,25 @@ public:
gridLayout_3->addWidget(groupBox_2, 1, 0, 1, 2);
+ horizontalLayout_4 = new QHBoxLayout();
+ horizontalLayout_4->setObjectName(QStringLiteral("horizontalLayout_4"));
+ unitCombo = new QComboBox(QPageSetupWidget);
+ unitCombo->setObjectName(QStringLiteral("unitCombo"));
+
+ horizontalLayout_4->addWidget(unitCombo);
+
+ horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_4->addItem(horizontalSpacer_3);
+
+
+ gridLayout_3->addLayout(horizontalLayout_4, 0, 0, 1, 2);
+
+ preview = new QWidget(QPageSetupWidget);
+ preview->setObjectName(QStringLiteral("preview"));
+
+ gridLayout_3->addWidget(preview, 2, 1, 2, 1);
+
groupBox_3 = new QGroupBox(QPageSetupWidget);
groupBox_3->setObjectName(QStringLiteral("groupBox_3"));
verticalLayout = new QVBoxLayout(groupBox_3);
@@ -181,11 +193,6 @@ public:
gridLayout_3->addWidget(groupBox_3, 2, 0, 1, 1);
- preview = new QWidget(QPageSetupWidget);
- preview->setObjectName(QStringLiteral("preview"));
-
- gridLayout_3->addWidget(preview, 2, 1, 2, 1);
-
groupBox = new QGroupBox(QPageSetupWidget);
groupBox->setObjectName(QStringLiteral("groupBox"));
horizontalLayout_2 = new QHBoxLayout(groupBox);
@@ -230,6 +237,10 @@ public:
gridLayout->addLayout(horizontalLayout, 1, 0, 1, 3);
+ horizontalSpacer_2 = new QSpacerItem(0, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+
+ gridLayout->addItem(horizontalSpacer_2, 0, 2, 1, 1);
+
bottomMargin = new QDoubleSpinBox(groupBox);
bottomMargin->setObjectName(QStringLiteral("bottomMargin"));
bottomMargin->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
@@ -237,10 +248,6 @@ public:
gridLayout->addWidget(bottomMargin, 2, 1, 1, 1);
- horizontalSpacer_2 = new QSpacerItem(0, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-
- gridLayout->addItem(horizontalSpacer_2, 0, 2, 1, 1);
-
horizontalSpacer_5 = new QSpacerItem(0, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
gridLayout->addItem(horizontalSpacer_5, 0, 0, 1, 1);
@@ -251,14 +258,45 @@ public:
gridLayout_3->addWidget(groupBox, 3, 0, 1, 1);
- verticalSpacer = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ pagesPerSheetButtonGroup = new QGroupBox(QPageSetupWidget);
+ pagesPerSheetButtonGroup->setObjectName(QStringLiteral("pagesPerSheetButtonGroup"));
+ gridLayout_4 = new QGridLayout(pagesPerSheetButtonGroup);
+ gridLayout_4->setObjectName(QStringLiteral("gridLayout_4"));
+ pagesPerSheetCombo = new QComboBox(pagesPerSheetButtonGroup);
+ pagesPerSheetCombo->setObjectName(QStringLiteral("pagesPerSheetCombo"));
+
+ gridLayout_4->addWidget(pagesPerSheetCombo, 0, 1, 1, 1);
+
+ horizontalSpacer_6 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ gridLayout_4->addItem(horizontalSpacer_6, 0, 2, 1, 1);
+
+ label = new QLabel(pagesPerSheetButtonGroup);
+ label->setObjectName(QStringLiteral("label"));
+
+ gridLayout_4->addWidget(label, 1, 0, 1, 1);
+
+ pagesPerSheetLayoutCombo = new QComboBox(pagesPerSheetButtonGroup);
+ pagesPerSheetLayoutCombo->setObjectName(QStringLiteral("pagesPerSheetLayoutCombo"));
+
+ gridLayout_4->addWidget(pagesPerSheetLayoutCombo, 1, 1, 1, 1);
+
+ label_2 = new QLabel(pagesPerSheetButtonGroup);
+ label_2->setObjectName(QStringLiteral("label_2"));
+
+ gridLayout_4->addWidget(label_2, 0, 0, 1, 1);
+
+
+ gridLayout_3->addWidget(pagesPerSheetButtonGroup, 5, 0, 1, 2);
+
+ verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
- gridLayout_3->addItem(verticalSpacer, 4, 0, 1, 1);
+ gridLayout_3->addItem(verticalSpacer, 6, 0, 1, 1);
#ifndef QT_NO_SHORTCUT
- pageSizeLabel->setBuddy(paperSize);
- widthLabel->setBuddy(paperWidth);
- heightLabel->setBuddy(paperHeight);
+ pageSizeLabel->setBuddy(pageSizeCombo);
+ widthLabel->setBuddy(pageWidth);
+ heightLabel->setBuddy(pageHeight);
paperSourceLabel->setBuddy(paperSource);
#endif // QT_NO_SHORTCUT
@@ -305,6 +343,9 @@ public:
#ifndef QT_NO_ACCESSIBILITY
bottomMargin->setAccessibleName(QApplication::translate("QPageSetupWidget", "bottom margin", Q_NULLPTR));
#endif // QT_NO_ACCESSIBILITY
+ pagesPerSheetButtonGroup->setTitle(QApplication::translate("QPageSetupWidget", "Page Layout", Q_NULLPTR));
+ label->setText(QApplication::translate("QPageSetupWidget", "Page order:", Q_NULLPTR));
+ label_2->setText(QApplication::translate("QPageSetupWidget", "Pages per sheet:", Q_NULLPTR));
} // retranslateUi
};
diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST
index 46791ff884..01c8e783ad 100644
--- a/tests/auto/widgets/kernel/qwidget/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST
@@ -7,7 +7,7 @@ ubuntu-14.04
ubuntu-16.04
b2qt
[restoreVersion1Geometry]
-ubuntu-14.04
+xcb
osx
[updateWhileMinimized]
ubuntu-14.04
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 1f4d2e262d..d9bb3b28d7 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -3197,9 +3197,6 @@ void tst_QWidget::restoreVersion1Geometry()
widget.showNormal();
QTest::qWait(10);
- if (m_platform == QStringLiteral("xcb"))
- QSKIP("QTBUG-26421");
-
if (expectedWindowState != Qt::WindowNoState) {
// restoring from maximized or fullscreen, we can only restore to the normal geometry
QTRY_COMPARE(widget.geometry(), expectedNormalGeometry);
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
index d8c70a0cc1..693b0b8aee 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
+++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
@@ -817,22 +817,45 @@ static bool testForColors(const QImage& image, const QColor& color, bool ensureP
return false;
}
-static const QList<QWidget*> sample_widgets() // returning const to avoid detaching when passing to range-for
+class TestDialog : public QDialog {
+public:
+ explicit TestDialog(const QString &styleSheet);
+
+ QWidgetList widgets() const { return m_widgets; }
+ QLineEdit *focusDummy() const { return m_focusDummy; }
+
+private:
+ void addWidget(QWidget *w)
+ {
+ w->setStyleSheet(m_styleSheet);
+ m_layout->addWidget(w);
+ m_widgets.append(w);
+ }
+
+ const QString m_styleSheet;
+ QVBoxLayout* m_layout;
+ QLineEdit *m_focusDummy;
+ QWidgetList m_widgets;
+};
+
+TestDialog::TestDialog(const QString &styleSheet) :
+ m_styleSheet(styleSheet),
+ m_layout(new QVBoxLayout(this)),
+ m_focusDummy(new QLineEdit)
{
- QList<QWidget *> widgets;
- widgets << new QPushButton("TESTING TESTING");
- widgets << new QLineEdit("TESTING TESTING");
- widgets << new QLabel("TESTING TESTING");
+ m_layout->addWidget(m_focusDummy); // Avoids initial focus.
+ addWidget(new QPushButton("TESTING TESTING"));
+ addWidget(new QLineEdit("TESTING TESTING"));
+ addWidget(new QLabel("TESTING TESTING"));
QSpinBox *spinbox = new QSpinBox;
spinbox->setMaximum(1000000000);
spinbox->setValue(123456789);
- widgets << spinbox;
+ addWidget(spinbox);
QComboBox *combobox = new QComboBox;
combobox->setEditable(true);
combobox->addItems(QStringList() << "TESTING TESTING");
- widgets << combobox;
- widgets << new QLabel("<b>TESTING TESTING</b>");
- return widgets;
+ addWidget(spinbox);
+ addWidget(new QLabel("<b>TESTING TESTING</b>"));
}
void tst_QStyleSheetStyle::focusColors()
@@ -852,28 +875,21 @@ void tst_QStyleSheetStyle::focusColors()
"That doesn't mean that the feature doesn't work in practice.");
#endif
+ TestDialog frame(QStringLiteral("*:focus { border:none; background: #e8ff66; color: #ff0084 }"));
+ frame.setWindowTitle(QTest::currentTestFunction());
- for (QWidget *widget : sample_widgets()) {
- QDialog frame;
- QLayout* layout = new QGridLayout;
-
- QLineEdit* dummy = new QLineEdit; // Avoids initial focus.
-
- widget->setStyleSheet("*:focus { border:none; background: #e8ff66; color: #ff0084 }");
+ centerOnScreen(&frame);
+ frame.show();
- layout->addWidget(dummy);
- layout->addWidget(widget);
- frame.setLayout(layout);
+ QApplication::setActiveWindow(&frame);
+ QVERIFY(QTest::qWaitForWindowActive(&frame));
- centerOnScreen(&frame);
- frame.show();
- QApplication::setActiveWindow(&frame);
- QVERIFY(QTest::qWaitForWindowActive(&frame));
+ for (QWidget *widget : frame.widgets()) {
widget->setFocus();
QApplication::processEvents();
- QImage image(frame.width(), frame.height(), QImage::Format_ARGB32);
- frame.render(&image);
+ QImage image(widget->width(), widget->height(), QImage::Format_ARGB32);
+ widget->render(&image);
if (image.depth() < 24)
QSKIP("Test doesn't support color depth < 24");
@@ -896,32 +912,35 @@ void tst_QStyleSheetStyle::hoverColors()
#ifdef Q_OS_OSX
QSKIP("This test is fragile on Mac, most likely due to QTBUG-33959.");
#endif
+ TestDialog frame(QStringLiteral("*:hover { border:none; background: #e8ff66; color: #ff0084 }"));
+ frame.setWindowTitle(QTest::currentTestFunction());
- for (QWidget *widget : sample_widgets()) {
- //without Qt::X11BypassWindowManagerHint the window manager may move the window after we moved the cursor
- QDialog frame(0, Qt::X11BypassWindowManagerHint);
- QLayout* layout = new QGridLayout;
-
- QLineEdit* dummy = new QLineEdit;
+ centerOnScreen(&frame);
+ // Move the mouse cursor out of the way to suppress spontaneous QEvent::Enter
+ // events interfering with QApplicationPrivate::dispatchEnterLeave().
+ // Mouse events can then be sent directly to the QWindow instead of the
+ // QWidget, triggering the enter/leave handling within the dialog window,
+ // speeding up the test.
+ QCursor::setPos(frame.geometry().topLeft() - QPoint(100, 0));
+ frame.show();
- widget->setStyleSheet("*:hover { border:none; background: #e8ff66; color: #ff0084 }");
+ QApplication::setActiveWindow(&frame);
+ QVERIFY(QTest::qWaitForWindowActive(&frame));
- layout->addWidget(dummy);
- layout->addWidget(widget);
- frame.setLayout(layout);
+ QWindow *frameWindow = frame.windowHandle();
+ QVERIFY(frameWindow);
- centerOnScreen(&frame);
- frame.show();
+ const QPoint dummyPos = frame.focusDummy()->geometry().center();
+ QTest::mouseMove(frameWindow, dummyPos);
- QApplication::setActiveWindow(&frame);
- QVERIFY(QTest::qWaitForWindowActive(&frame));
+ for (QWidget *widget : frame.widgets()) {
//move the mouse inside the widget, it should be colored
- QTest::mouseMove ( widget, QPoint(6,6));
+ const QRect widgetGeometry = widget->geometry();
+ QTest::mouseMove(frameWindow, widgetGeometry.center());
+ QTRY_VERIFY2(widget->testAttribute(Qt::WA_UnderMouse), widget->metaObject()->className());
- QTRY_VERIFY(widget->testAttribute(Qt::WA_UnderMouse));
-
- QImage image(frame.width(), frame.height(), QImage::Format_ARGB32);
- frame.render(&image);
+ QImage image(widgetGeometry.size(), QImage::Format_ARGB32);
+ widget->render(&image);
QVERIFY2(testForColors(image, QColor(0xe8, 0xff, 0x66)),
(QString::fromLatin1(widget->metaObject()->className())
@@ -931,10 +950,10 @@ void tst_QStyleSheetStyle::hoverColors()
+ " did not contain text color #ff0084").toLocal8Bit().constData());
//move the mouse outside the widget, it should NOT be colored
- QTest::mouseMove ( dummy, QPoint(5,5));
- QTest::qWait(60);
+ QTest::mouseMove(frameWindow, dummyPos);
+ QTRY_VERIFY2(frame.focusDummy()->testAttribute(Qt::WA_UnderMouse), "FocusDummy");
- frame.render(&image);
+ widget->render(&image);
QVERIFY2(!testForColors(image, QColor(0xe8, 0xff, 0x66)),
(QString::fromLatin1(widget->metaObject()->className())
@@ -944,10 +963,10 @@ void tst_QStyleSheetStyle::hoverColors()
+ " did contain text color #ff0084").toLocal8Bit().constData());
//move the mouse again inside the widget, it should be colored
- QTest::mouseMove (widget, QPoint(5,5));
- QTRY_VERIFY(widget->testAttribute(Qt::WA_UnderMouse));
+ QTest::mouseMove (frameWindow, widgetGeometry.center());
+ QTRY_VERIFY2(widget->testAttribute(Qt::WA_UnderMouse), widget->metaObject()->className());
- frame.render(&image);
+ widget->render(&image);
QVERIFY2(testForColors(image, QColor(0xe8, 0xff, 0x66)),
(QString::fromLatin1(widget->metaObject()->className())
diff --git a/tests/auto/widgets/widgets/qmdiarea/BLACKLIST b/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
index 63da2e3ae3..b1c8d7dfde 100644
--- a/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
@@ -3,3 +3,5 @@ osx
[tileSubWindows]
osx
xcb
+[resizeTimer]
+osx
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index 510576f6df..009a607818 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -237,6 +237,8 @@ void tst_QOpenGLWidget::painter()
glw->m_clear = true;
image = glw->grabFramebuffer();
QVERIFY(image.pixel(20, 10) == qRgb(0, 255, 0));
+
+ QPixmap pix = glw->grab(); // QTBUG-61036
}
void tst_QOpenGLWidget::reparentToAlreadyCreated()
diff --git a/tests/manual/dialogs/filedialogpanel.cpp b/tests/manual/dialogs/filedialogpanel.cpp
index ff935f5280..9e3c761cff 100644
--- a/tests/manual/dialogs/filedialogpanel.cpp
+++ b/tests/manual/dialogs/filedialogpanel.cpp
@@ -300,7 +300,7 @@ QFileDialog::Options FileDialogPanel::options() const
result |= QFileDialog::DontConfirmOverwrite;
if (!m_native->isChecked())
result |= QFileDialog::DontUseNativeDialog;
- if (!m_customDirIcons->isChecked())
+ if (m_customDirIcons->isChecked())
result |= QFileDialog::DontUseCustomDirectoryIcons;
return result;
}