Merge remote-tracking branch 'origin/5.9' into dev
Change-Id: I84097f8e7b3b2128028bd7693c913d6968b82bfe
This commit is contained in:
commit
71264bae08
@ -1,8 +1,10 @@
|
|||||||
Usage: configure [options] [assignments]
|
Usage: configure [options] [assignments]
|
||||||
|
|
||||||
Configure understands variable assignments like VAR=value on the command line.
|
Configure understands variable assignments like VAR=value on the command line.
|
||||||
These override any values possibly obtained from pkg-config. The variables
|
Each uppercased library name (obtainable with -list-libraries) supports the
|
||||||
are mentioned in the descriptions of the options they relate to.
|
suffixes _INCDIR, _LIBDIR, _PREFIX (INCDIR=PREFIX/include, LIBDIR=PREFIX/lib),
|
||||||
|
_LIBS, and - on Windows and Darwin - _LIBS_DEBUG and _LIBS_RELEASE. E.g.,
|
||||||
|
ICU_PREFIX=/opt/icu42 ICU_LIBS="-licui18n -licuuc -licudata".
|
||||||
|
|
||||||
It is also possible to manipulate any QMAKE_* variable, to amend the values
|
It is also possible to manipulate any QMAKE_* variable, to amend the values
|
||||||
from the mkspec for the build of Qt itself, e.g., QMAKE_CXXFLAGS+=-g3.
|
from the mkspec for the build of Qt itself, e.g., QMAKE_CXXFLAGS+=-g3.
|
||||||
@ -62,6 +64,13 @@ Configure meta:
|
|||||||
Use this after installing missing dependencies.
|
Use this after installing missing dependencies.
|
||||||
-recheck-all ......... Discard all cached configure test results.
|
-recheck-all ......... Discard all cached configure test results.
|
||||||
|
|
||||||
|
-feature-<feature> ... Enable <feature>
|
||||||
|
-no-feature-<feature> Disable <feature> [none]
|
||||||
|
-list-features ....... List available features. Note that some features
|
||||||
|
have dedicated command line options as well.
|
||||||
|
|
||||||
|
-list-libraries ...... List possible external dependencies.
|
||||||
|
|
||||||
Build options:
|
Build options:
|
||||||
|
|
||||||
-opensource .......... Build the Open-Source Edition of Qt
|
-opensource .......... Build the Open-Source Edition of Qt
|
||||||
@ -188,9 +197,6 @@ Component selection:
|
|||||||
[default on Android and Windows]
|
[default on Android and Windows]
|
||||||
-dbus-linked ......... Build Qt D-Bus and link to libdbus-1 [auto]
|
-dbus-linked ......... Build Qt D-Bus and link to libdbus-1 [auto]
|
||||||
-dbus-runtime ........ Build Qt D-Bus and dynamically load libdbus-1 [no]
|
-dbus-runtime ........ Build Qt D-Bus and dynamically load libdbus-1 [no]
|
||||||
DBUS_PATH= DBUS_HOST_PATH=
|
|
||||||
-feature-<feature> ... Enable <feature>. The available features are described
|
|
||||||
in src/corelib/global/qfeatures.txt. [all enabled]
|
|
||||||
-accessibility ....... Enable accessibility support [yes]
|
-accessibility ....... Enable accessibility support [yes]
|
||||||
Note: Disabling accessibility is not recommended.
|
Note: Disabling accessibility is not recommended.
|
||||||
-qml-debug ........... Enable QML debugging support [yes]
|
-qml-debug ........... Enable QML debugging support [yes]
|
||||||
@ -210,7 +216,6 @@ Core options:
|
|||||||
-pcre ................ Select used libpcre2 [system/qt]
|
-pcre ................ Select used libpcre2 [system/qt]
|
||||||
-pps ................. Enable PPS support [auto] (QNX only)
|
-pps ................. Enable PPS support [auto] (QNX only)
|
||||||
-zlib ................ Select used zlib [system/qt]
|
-zlib ................ Select used zlib [system/qt]
|
||||||
ZLIB_LIBS=
|
|
||||||
|
|
||||||
Logging backends:
|
Logging backends:
|
||||||
-journald .......... Enable journald support [no] (Unix only)
|
-journald .......... Enable journald support [no] (Unix only)
|
||||||
@ -223,8 +228,6 @@ Network options:
|
|||||||
-no-openssl .......... Do not use OpenSSL [default on Apple and WinRT]
|
-no-openssl .......... Do not use OpenSSL [default on Apple and WinRT]
|
||||||
-openssl-linked ...... Use OpenSSL and link to libssl [no]
|
-openssl-linked ...... Use OpenSSL and link to libssl [no]
|
||||||
-openssl-runtime ..... Use OpenSSL and dynamically load libssl [auto]
|
-openssl-runtime ..... Use OpenSSL and dynamically load libssl [auto]
|
||||||
OPENSSL_PATH= OPENSSL_LIBS=, and on Windows also
|
|
||||||
OPENSSL_LIBS_DEBUG= OPENSSL_LIBS_RELEASE=
|
|
||||||
-securetransport ..... Use SecureTransport [auto] (Apple only)
|
-securetransport ..... Use SecureTransport [auto] (Apple only)
|
||||||
|
|
||||||
-sctp ................ Enable SCTP support [no]
|
-sctp ................ Enable SCTP support [no]
|
||||||
@ -292,5 +295,4 @@ Database options:
|
|||||||
-sql-<driver> ........ Enable SQL <driver> plugin. Supported drivers:
|
-sql-<driver> ........ Enable SQL <driver> plugin. Supported drivers:
|
||||||
db2 ibase mysql oci odbc psql sqlite2 sqlite tds
|
db2 ibase mysql oci odbc psql sqlite2 sqlite tds
|
||||||
[all auto]
|
[all auto]
|
||||||
MYSQL_PATH= PSQL_LIBS= SYBASE= SYBASE_LIBS=
|
|
||||||
-sqlite .............. Select used sqlite3 [system/qt]
|
-sqlite .............. Select used sqlite3 [system/qt]
|
||||||
|
@ -20,8 +20,7 @@
|
|||||||
"commandline": {
|
"commandline": {
|
||||||
"assignments": {
|
"assignments": {
|
||||||
"DBUS_HOST_PATH": "host_dbus.prefix",
|
"DBUS_HOST_PATH": "host_dbus.prefix",
|
||||||
"DBUS_PATH": "dbus.prefix",
|
"DBUS_PATH": "dbus.prefix"
|
||||||
"ZLIB_LIBS": "zlib.libs"
|
|
||||||
},
|
},
|
||||||
"custom": "qmakeArgs",
|
"custom": "qmakeArgs",
|
||||||
"options": {
|
"options": {
|
||||||
@ -1016,7 +1015,10 @@
|
|||||||
},
|
},
|
||||||
"qml-debug": {
|
"qml-debug": {
|
||||||
"label": "QML debugging",
|
"label": "QML debugging",
|
||||||
"output": [ { "type": "publicQtConfig", "negative": true } ]
|
"output": [
|
||||||
|
"privateFeature",
|
||||||
|
{ "type": "publicQtConfig", "negative": true }
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"compile_examples": {
|
"compile_examples": {
|
||||||
"label": "Compile examples",
|
"label": "Compile examples",
|
||||||
|
@ -30,7 +30,6 @@ qtHaveModule(widgets) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
qtConfig(openssl): SUBDIRS += securesocketclient
|
qtConfig(openssl): SUBDIRS += securesocketclient
|
||||||
qtConfig(openssl-linked): SUBDIRS += securesocketclient
|
|
||||||
qtConfig(sctp): SUBDIRS += multistreamserver multistreamclient
|
qtConfig(sctp): SUBDIRS += multistreamserver multistreamclient
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ TabletCanvas::TabletCanvas()
|
|||||||
resize(500, 500);
|
resize(500, 500);
|
||||||
initPixmap();
|
initPixmap();
|
||||||
setAutoFillBackground(true);
|
setAutoFillBackground(true);
|
||||||
|
setAttribute(Qt::WA_TabletTracking);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabletCanvas::initPixmap()
|
void TabletCanvas::initPixmap()
|
||||||
|
@ -12,7 +12,10 @@
|
|||||||
"recheck": { "type": "void", "name": "cache_use", "value": "positive" },
|
"recheck": { "type": "void", "name": "cache_use", "value": "positive" },
|
||||||
"recheck-all": { "type": "void", "name": "cache_use", "value": "none" },
|
"recheck-all": { "type": "void", "name": "cache_use", "value": "none" },
|
||||||
|
|
||||||
"redo": { "type": "redo" }
|
"redo": { "type": "redo" },
|
||||||
|
|
||||||
|
"list-features": "void",
|
||||||
|
"list-libraries": "void"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ win32:count(MOC_INCLUDEPATH, 40, >) {
|
|||||||
# QNX's compiler sets "gcc" config, but does not support the -dM option;
|
# QNX's compiler sets "gcc" config, but does not support the -dM option;
|
||||||
# UIKit builds are always multi-arch due to simulator_and_device (unless
|
# UIKit builds are always multi-arch due to simulator_and_device (unless
|
||||||
# -sdk is used) so this feature cannot possibly work.
|
# -sdk is used) so this feature cannot possibly work.
|
||||||
if(gcc|intel_icl|msvc):!rim_qcc:!uikit:if(!macos|count(QMAKE_APPLE_DEVICE_ARCHS, 1)) {
|
if(gcc|intel_icl|msvc):!rim_qcc:!uikit:!no_moc_predefs:if(!macos|count(QMAKE_APPLE_DEVICE_ARCHS, 1)) {
|
||||||
moc_predefs.name = "Generate moc_predefs.h"
|
moc_predefs.name = "Generate moc_predefs.h"
|
||||||
moc_predefs.CONFIG = no_link
|
moc_predefs.CONFIG = no_link
|
||||||
gcc: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -dM -E -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
gcc: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -dM -E -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
||||||
|
@ -5,25 +5,19 @@ for(ever) {
|
|||||||
use = $$split(use, /)
|
use = $$split(use, /)
|
||||||
name = $$take_first(use)
|
name = $$take_first(use)
|
||||||
nu = $$upper($$name)
|
nu = $$upper($$name)
|
||||||
debug: \
|
!defined(QMAKE_LIBS_$$nu, var): \
|
||||||
libs = $$eval(QMAKE_LIBS_$${nu}_DEBUG)
|
|
||||||
else: \
|
|
||||||
libs = $$eval(QMAKE_LIBS_$${nu}_RELEASE)
|
|
||||||
libs += $$eval(QMAKE_LIBS_$$nu)
|
|
||||||
libdir = $$eval(QMAKE_LIBDIR_$$nu)
|
|
||||||
defines = $$eval(QMAKE_DEFINES_$${nu})
|
|
||||||
includes = $$eval(QMAKE_INCDIR_$${nu})
|
|
||||||
|
|
||||||
isEmpty(libs):isEmpty(defines):isEmpty(includes): \
|
|
||||||
error("Library '$$name' is not defined.")
|
error("Library '$$name' is not defined.")
|
||||||
|
|
||||||
!contains(use, nolink) {
|
!contains(use, nolink) {
|
||||||
QMAKE_LIBDIR += $$libdir
|
QMAKE_LIBDIR += $$eval(QMAKE_LIBDIR_$$nu)
|
||||||
LIBS$${suffix} += $$libs
|
debug: \
|
||||||
|
LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$$nu)
|
||||||
|
else: \
|
||||||
|
LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_RELEASE) $$eval(QMAKE_LIBS_$$nu)
|
||||||
}
|
}
|
||||||
!contains(use, linkonly) {
|
!contains(use, linkonly) {
|
||||||
DEFINES += $$defines
|
DEFINES += $$eval(QMAKE_DEFINES_$${nu})
|
||||||
INCLUDEPATH += $$includes
|
INCLUDEPATH += $$eval(QMAKE_INCDIR_$${nu})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
!isEmpty(suffix): break()
|
!isEmpty(suffix): break()
|
||||||
|
@ -401,6 +401,7 @@ defineReplace(qtConfPrepareArgs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defineTest(qtConfSetupLibraries) {
|
defineTest(qtConfSetupLibraries) {
|
||||||
|
asspfx = $${currentConfig}.commandline.assignments
|
||||||
for (l, $${currentConfig}.libraries._KEYS_) {
|
for (l, $${currentConfig}.libraries._KEYS_) {
|
||||||
lpfx = $${currentConfig}.libraries.$${l}
|
lpfx = $${currentConfig}.libraries.$${l}
|
||||||
# 'export' may be omitted, in which case it falls back to the library's name
|
# 'export' may be omitted, in which case it falls back to the library's name
|
||||||
@ -408,6 +409,15 @@ defineTest(qtConfSetupLibraries) {
|
|||||||
$${lpfx}.export = $$l
|
$${lpfx}.export = $$l
|
||||||
export($${lpfx}.export)
|
export($${lpfx}.export)
|
||||||
}
|
}
|
||||||
|
# 'export' may also be empty, but we need a derived identifier
|
||||||
|
alias = $$eval($${lpfx}.export)
|
||||||
|
isEmpty(alias): alias = $$l
|
||||||
|
$${lpfx}.alias = $$alias
|
||||||
|
export($${lpfx}.alias)
|
||||||
|
# make it easy to refer to the library by its export name.
|
||||||
|
$${currentConfig}.exports._KEYS_ += $$alias
|
||||||
|
$${currentConfig}.exports.$$alias += $$l
|
||||||
|
export($${currentConfig}.exports.$$alias)
|
||||||
isEmpty($${lpfx}.sources._KEYS_): \
|
isEmpty($${lpfx}.sources._KEYS_): \
|
||||||
error("Library $$l defines no sources")
|
error("Library $$l defines no sources")
|
||||||
for (s, $${lpfx}.sources._KEYS_) {
|
for (s, $${lpfx}.sources._KEYS_) {
|
||||||
@ -427,10 +437,33 @@ defineTest(qtConfSetupLibraries) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$${currentConfig}.exports._KEYS_ = $$unique($${currentConfig}.exports._KEYS_)
|
||||||
|
export($${currentConfig}.exports._KEYS_)
|
||||||
|
|
||||||
|
for (alias, $${currentConfig}.exports._KEYS_) {
|
||||||
|
ua = $$upper($$alias)
|
||||||
|
$${asspfx}._KEYS_ += \
|
||||||
|
$${ua}_PREFIX $${ua}_INCDIR $${ua}_LIBDIR \
|
||||||
|
$${ua}_LIBS $${ua}_LIBS_DEBUG $${ua}_LIBS_RELEASE
|
||||||
|
uapfx = $${asspfx}.$${ua}
|
||||||
|
$${uapfx}_PREFIX = $${alias}.prefix
|
||||||
|
$${uapfx}_INCDIR = $${alias}.incdir
|
||||||
|
$${uapfx}_LIBDIR = $${alias}.libdir
|
||||||
|
$${uapfx}_LIBS = $${alias}.libs
|
||||||
|
$${uapfx}_LIBS_DEBUG = $${alias}.libs.debug
|
||||||
|
$${uapfx}_LIBS_RELEASE = $${alias}.libs.release
|
||||||
|
export($${uapfx}_PREFIX)
|
||||||
|
export($${uapfx}_INCDIR)
|
||||||
|
export($${uapfx}_LIBDIR)
|
||||||
|
export($${uapfx}_LIBS)
|
||||||
|
export($${uapfx}_LIBS_DEBUG)
|
||||||
|
export($${uapfx}_LIBS_RELEASE)
|
||||||
|
}
|
||||||
|
export($${asspfx}._KEYS_)
|
||||||
|
|
||||||
# reverse mapping for assignments on command line.
|
# reverse mapping for assignments on command line.
|
||||||
for (a, $${currentConfig}.commandline.assignments._KEYS_) {
|
for (a, $${asspfx}._KEYS_) {
|
||||||
apfx = $${currentConfig}.commandline.assignments.$${a}
|
apfx = $${asspfx}.$${a}
|
||||||
ra = config.commandline.rev_assignments.$$eval($$apfx)
|
ra = config.commandline.rev_assignments.$$eval($$apfx)
|
||||||
$$ra = $$a
|
$$ra = $$a
|
||||||
export($$ra)
|
export($$ra)
|
||||||
@ -444,9 +477,13 @@ defineTest(qtConfLibrary_inline) {
|
|||||||
!defined($${1}.libs, var): \
|
!defined($${1}.libs, var): \
|
||||||
error("'inline' source in library '$$lib' does not specify 'libs'.")
|
error("'inline' source in library '$$lib' does not specify 'libs'.")
|
||||||
|
|
||||||
|
# if multiple libraries provide the same export, it makes sense
|
||||||
|
# to make them recognize the same input variables.
|
||||||
|
input = $$eval($${2}.alias)
|
||||||
|
|
||||||
# direct libs. overwrites inline libs.
|
# direct libs. overwrites inline libs.
|
||||||
defined(config.input.$${lib}.libs, var) {
|
defined(config.input.$${input}.libs, var) {
|
||||||
$${1}.libs = $$eval(config.input.$${lib}.libs)
|
$${1}.libs = $$eval(config.input.$${input}.libs)
|
||||||
export($${1}.libs)
|
export($${1}.libs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,7 +492,7 @@ defineTest(qtConfLibrary_inline) {
|
|||||||
any = false
|
any = false
|
||||||
all = true
|
all = true
|
||||||
for (b, $${1}.builds._KEYS_) {
|
for (b, $${1}.builds._KEYS_) {
|
||||||
iv = $${lib}.libs.$${b}
|
iv = $${input}.libs.$${b}
|
||||||
vars += $$eval(config.commandline.rev_assignments.$${iv})
|
vars += $$eval(config.commandline.rev_assignments.$${iv})
|
||||||
defined(config.input.$${iv}, var) {
|
defined(config.input.$${iv}, var) {
|
||||||
$${1}.builds.$${b}.libs = $$eval(config.input.$${iv})
|
$${1}.builds.$${b}.libs = $$eval(config.input.$${iv})
|
||||||
@ -471,7 +508,7 @@ defineTest(qtConfLibrary_inline) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# prefix. prepends to (possibly overwritten) inline libs.
|
# prefix. prepends to (possibly overwritten) inline libs.
|
||||||
prefix = $$val_escape(config.input.$${lib}.prefix)
|
prefix = $$val_escape(config.input.$${input}.prefix)
|
||||||
!isEmpty(prefix) {
|
!isEmpty(prefix) {
|
||||||
$${1}.includedir = $$prefix/include
|
$${1}.includedir = $$prefix/include
|
||||||
export($${1}.includedir)
|
export($${1}.includedir)
|
||||||
@ -479,6 +516,18 @@ defineTest(qtConfLibrary_inline) {
|
|||||||
export($${1}.libs)
|
export($${1}.libs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
incdir = $$val_escape(config.input.$${input}.incdir)
|
||||||
|
!isEmpty(incdir) {
|
||||||
|
$${1}.includedir = $$incdir
|
||||||
|
export($${1}.includedir)
|
||||||
|
}
|
||||||
|
|
||||||
|
libdir = $$val_escape(config.input.$${input}.libdir)
|
||||||
|
!isEmpty(libdir) {
|
||||||
|
$${1}.libs = "-L$$libdir $$eval($${1}.libs)"
|
||||||
|
export($${1}.libs)
|
||||||
|
}
|
||||||
|
|
||||||
return(true)
|
return(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -562,14 +611,20 @@ defineReplace(qtConfLibraryArgs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defineTest(qtConfExportLibrary) {
|
defineTest(qtConfExportLibrary) {
|
||||||
isEmpty(2): return()
|
lpfx = $${currentConfig}.libraries.$$1
|
||||||
!$$qtConfEvaluate($$eval($${1}.export)): return()
|
alias = $$eval($${lpfx}.alias)
|
||||||
|
$${currentConfig}.found.$$alias = $$1
|
||||||
|
export($${currentConfig}.found.$$alias)
|
||||||
|
name = $$eval($${lpfx}.export)
|
||||||
|
isEmpty(name): return()
|
||||||
|
spfx = $${lpfx}.sources.$$eval($${lpfx}.source)
|
||||||
|
!$$qtConfEvaluate($$eval($${spfx}.export)): return()
|
||||||
|
|
||||||
output = privatePro
|
output = privatePro
|
||||||
|
|
||||||
eval(libs = $$eval($${1}.libs))
|
eval(libs = $$eval($${spfx}.libs))
|
||||||
eval(cflags = $$eval($${1}.cflags))
|
eval(cflags = $$eval($${spfx}.cflags))
|
||||||
eval(includes = $$eval($${1}.includedir))
|
eval(includes = $$eval($${spfx}.includedir))
|
||||||
|
|
||||||
# Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff.
|
# Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff.
|
||||||
defines =
|
defines =
|
||||||
@ -588,30 +643,46 @@ defineTest(qtConfExportLibrary) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
!isEmpty(ignored): \
|
!isEmpty(ignored): \
|
||||||
qtConfAddNote("Dropped compiler flags '$$ignored' when detecting library '$$2'.")
|
qtConfAddNote("Dropped compiler flags '$$ignored' when detecting library '$$name'.")
|
||||||
|
|
||||||
NAME = $$upper($$2)
|
NAME = $$upper($$name)
|
||||||
!isEmpty(libs): qtConfOutputVar(assign, $$output, QMAKE_LIBS_$$NAME, $$libs)
|
# LIBS is emitted even if empty, as this allows the library to be "seen".
|
||||||
for (b, $${1}.builds._KEYS_): \
|
qtConfOutputVar(assign, $$output, QMAKE_LIBS_$$NAME, $$libs)
|
||||||
|
for (b, $${spfx}.builds._KEYS_): \
|
||||||
qtConfOutputVar(assign, $$output, QMAKE_LIBS_$${NAME}_$$upper($$b), \
|
qtConfOutputVar(assign, $$output, QMAKE_LIBS_$${NAME}_$$upper($$b), \
|
||||||
$$eval($${1}.builds.$${b}))
|
$$eval($${spfx}.builds.$${b}))
|
||||||
!isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines)
|
!isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines)
|
||||||
!isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
|
!isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
|
||||||
!isEmpty($${currentConfig}.module): \
|
!isEmpty($${currentConfig}.module): \
|
||||||
qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$2)
|
qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$name)
|
||||||
}
|
}
|
||||||
|
|
||||||
defineTest(qtConfHandleLibrary) {
|
defineTest(qtConfHandleLibrary) {
|
||||||
lpfx = $${currentConfig}.libraries.$$1
|
lpfx = $${currentConfig}.libraries.$$1
|
||||||
defined($${lpfx}.result, var): return()
|
defined($${lpfx}.result, var): return()
|
||||||
|
|
||||||
|
alias = $$eval($${lpfx}.alias)
|
||||||
|
!isEmpty($${currentConfig}.found.$$alias) {
|
||||||
|
# this happening indicates a logic error in the conditions
|
||||||
|
# of the feature(s) referring to this library.
|
||||||
|
# note that this does not look across module boundaries, as
|
||||||
|
# multiple modules may know the same libraries; de-duplication
|
||||||
|
# happens via the cache (obviously, this assumes identical
|
||||||
|
# definitions and logic).
|
||||||
|
error("A library exporting '$$alias' was already found.")
|
||||||
|
}
|
||||||
|
|
||||||
qtConfEnsureTestTypeDeps("library")
|
qtConfEnsureTestTypeDeps("library")
|
||||||
qtConfTestPrepare_compile($$lpfx)
|
!qtConfTestPrepare_compile($$lpfx) {
|
||||||
|
$${lpfx}.result = false
|
||||||
|
export($${lpfx}.result)
|
||||||
|
return()
|
||||||
|
}
|
||||||
use_args = $$eval($${lpfx}.literal_args)
|
use_args = $$eval($${lpfx}.literal_args)
|
||||||
|
|
||||||
qtConfLoadResult($${lpfx}, $$1) {
|
qtConfLoadResult($${lpfx}, $$1) {
|
||||||
$$eval($${lpfx}.result): \
|
$$eval($${lpfx}.result): \
|
||||||
qtConfExportLibrary($${lpfx}.sources.$$eval($${lpfx}.source), $$eval($${lpfx}.export))
|
qtConfExportLibrary($$1)
|
||||||
return()
|
return()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -634,14 +705,14 @@ defineTest(qtConfHandleLibrary) {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
!$${call}($$spfx) {
|
!$${call}($$spfx, $$lpfx) {
|
||||||
qtLog(" => source produced no result.")
|
qtLog(" => source produced no result.")
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
# if the library defines a test, use it to verify the source.
|
# if the library defines a test, use it to verify the source.
|
||||||
!isEmpty($${lpfx}.test) {
|
!isEmpty($${lpfx}.test) {
|
||||||
$${lpfx}.literal_args = $$use_args $$qtConfLibraryArgs($$spfx)
|
$${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) $$use_args
|
||||||
$${lpfx}.host = $$eval($${spfx}.host)
|
$${lpfx}.host = $$eval($${spfx}.host)
|
||||||
!qtConfTest_compile($$lpfx) {
|
!qtConfTest_compile($$lpfx) {
|
||||||
qtLog(" => source failed verification.")
|
qtLog(" => source failed verification.")
|
||||||
@ -657,11 +728,12 @@ defineTest(qtConfHandleLibrary) {
|
|||||||
for (b, $${spfx}.builds._KEYS_): \
|
for (b, $${spfx}.builds._KEYS_): \
|
||||||
$${lpfx}.cache += sources.$${s}.builds.$${b}
|
$${lpfx}.cache += sources.$${s}.builds.$${b}
|
||||||
|
|
||||||
# immediately output the library as well.
|
|
||||||
qtConfExportLibrary($${spfx}, $$eval($${lpfx}.export))
|
|
||||||
|
|
||||||
$${lpfx}.source = $$s
|
$${lpfx}.source = $$s
|
||||||
export($${lpfx}.source)
|
export($${lpfx}.source)
|
||||||
|
|
||||||
|
# immediately output the library as well.
|
||||||
|
qtConfExportLibrary($$1)
|
||||||
|
|
||||||
result = true
|
result = true
|
||||||
break()
|
break()
|
||||||
}
|
}
|
||||||
@ -679,27 +751,76 @@ defineTest(qtConfTest_library) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defineTest(qtConfTestPrepare_compile) {
|
defineTest(qtConfTestPrepare_compile) {
|
||||||
for (u, $$list($$eval($${1}.use))) {
|
!isEmpty($${1}.use._KEYS_) {
|
||||||
|
uses =
|
||||||
|
for (k, $${1}.use._KEYS_) {
|
||||||
|
use = $$eval($${1}.use.$${k}.lib)
|
||||||
|
isEmpty(use): \
|
||||||
|
error("'use' entry $$k in test $$1 lacks 'lib' field.")
|
||||||
|
!$$qtConfEvaluate($$eval($${1}.use.$${k}.condition)): \
|
||||||
|
next()
|
||||||
|
uses += $$use
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uses = $$split($${1}.use)
|
||||||
|
}
|
||||||
|
for (u, uses) {
|
||||||
libConfig =
|
libConfig =
|
||||||
contains($${currentConfig}.libraries._KEYS_, $$u) {
|
exports = $$eval($${currentConfig}.exports.$$u)
|
||||||
libConfig = $${currentConfig}
|
!isEmpty(exports) {
|
||||||
|
# using a local library by exported name.
|
||||||
|
ru = $$eval($${currentConfig}.found.$$u)
|
||||||
|
!isEmpty(ru) {
|
||||||
|
# if it was already found, all is good.
|
||||||
|
u = $$ru
|
||||||
|
} else: count(exports, 1) {
|
||||||
|
# otherwise, if there is only one option, ensure it's resolved.
|
||||||
|
u = $$exports
|
||||||
qtConfHandleLibrary($$u)
|
qtConfHandleLibrary($$u)
|
||||||
} else {
|
} else {
|
||||||
for (d, QMAKE_CONFIG_DEPS) {
|
# otherwise, verify that all options were resolved.
|
||||||
contains($${d}.libraries._KEYS_, $$u) {
|
for (x, exports) {
|
||||||
|
isEmpty($${currentConfig}.libraries.$${x}.result) {
|
||||||
|
# the higher-level logic is in the features, which we cannot
|
||||||
|
# infer from here. so the only option is failing.
|
||||||
|
error("Test $$1 refers to yet unresolved library export '$$u'")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(false)
|
||||||
|
}
|
||||||
|
libConfig = $$currentConfig
|
||||||
|
} else: contains($${currentConfig}.libraries._KEYS_, $$u) {
|
||||||
|
# using a local library by real name. this should be the exception.
|
||||||
|
qtConfHandleLibrary($$u)
|
||||||
|
libConfig = $$currentConfig
|
||||||
|
} else {
|
||||||
|
for (d, QMAKE_LIBRARY_DEPS) {
|
||||||
|
exports = $$eval($${d}.exports.$$u)
|
||||||
|
!isEmpty(exports) {
|
||||||
|
# using a foreign library by exported name.
|
||||||
|
# foreign libraries may be external (if they are from a different
|
||||||
|
# repository and the build is modular), and using these by real
|
||||||
|
# name is impossible. so for consistency, uses by real name are
|
||||||
|
# limited to local libraries.
|
||||||
|
ru = $$eval($${d}.found.$$u)
|
||||||
|
!isEmpty(ru) {
|
||||||
|
u = $$ru
|
||||||
libConfig = $$d
|
libConfig = $$d
|
||||||
break()
|
break()
|
||||||
}
|
}
|
||||||
|
for (x, exports) {
|
||||||
|
isEmpty($${d}.libraries.$${x}.result): \
|
||||||
|
error("Test $$1 refers to unresolved library export '$$u' in '$$d'")
|
||||||
|
}
|
||||||
|
return(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isEmpty(libConfig) {
|
isEmpty(libConfig) {
|
||||||
nu = $$upper($$u)
|
nu = $$upper($$u)
|
||||||
libs = $$eval(QMAKE_LIBS_$$nu) $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$${nu}_RELEASE)
|
!defined(QMAKE_LIBS_$$nu, var): \
|
||||||
defines = $$eval(QMAKE_DEFINES_$${nu})
|
|
||||||
includes = $$eval(QMAKE_INCDIR_$${nu})
|
|
||||||
|
|
||||||
isEmpty(libs):isEmpty(defines):isEmpty(includes): \
|
|
||||||
error("Test $$1 tries to use undeclared library '$$u'")
|
error("Test $$1 tries to use undeclared library '$$u'")
|
||||||
|
# using an external library by exported name.
|
||||||
$${1}.literal_args += $$system_quote(QMAKE_USE += $$u)
|
$${1}.literal_args += $$system_quote(QMAKE_USE += $$u)
|
||||||
} else {
|
} else {
|
||||||
lpfx = $${libConfig}.libraries.$${u}
|
lpfx = $${libConfig}.libraries.$${u}
|
||||||
@ -1252,14 +1373,14 @@ defineTest(qtConfProcessFeatures) {
|
|||||||
# reporting
|
# reporting
|
||||||
#
|
#
|
||||||
|
|
||||||
QT_CONF_REPORT_PADDING = "........................................"
|
defineReplace(qtConfPadCols) {
|
||||||
|
pad = $$num_add($$str_size($$2), -$$str_size($${1}))
|
||||||
|
lessThan(pad, 0): pad = 0
|
||||||
|
return("$$1 $$str_member($$2, 0, $$pad) $$3")
|
||||||
|
}
|
||||||
|
|
||||||
defineTest(qtConfReportPadded) {
|
defineTest(qtConfReportPadded) {
|
||||||
pad = $$num_add($$str_size($$QT_CONF_REPORT_PADDING), -$$str_size($${1}))
|
qtConfAddReport($$qtConfPadCols($$1, "........................................", $$2))
|
||||||
lessThan(pad, 0): pad = 0
|
|
||||||
str = "$$1 $$str_member($$QT_CONF_REPORT_PADDING, 0, $$pad)"
|
|
||||||
|
|
||||||
qtConfAddReport("$$str $${2}")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defineReplace(qtConfCollectFeatures) {
|
defineReplace(qtConfCollectFeatures) {
|
||||||
@ -1749,8 +1870,6 @@ for(ever) {
|
|||||||
jsonFile = $$thisDir/configure.json
|
jsonFile = $$thisDir/configure.json
|
||||||
priFile = $$thisDir/configure.pri
|
priFile = $$thisDir/configure.pri
|
||||||
|
|
||||||
allConfigs += $$currentConfig
|
|
||||||
|
|
||||||
# load configuration data
|
# load configuration data
|
||||||
configure_data = $$cat($$jsonFile, blob)
|
configure_data = $$cat($$jsonFile, blob)
|
||||||
!parseJson(configure_data, $$currentConfig): \
|
!parseJson(configure_data, $$currentConfig): \
|
||||||
@ -1758,25 +1877,88 @@ for(ever) {
|
|||||||
exists($$priFile): \
|
exists($$priFile): \
|
||||||
!include($$priFile): error()
|
!include($$priFile): error()
|
||||||
|
|
||||||
|
# only configs which contain more than just subconfigs are saved for later.
|
||||||
|
$${currentConfig}._KEYS_ -= subconfigs
|
||||||
|
!isEmpty($${currentConfig}._KEYS_) {
|
||||||
|
allConfigs += $$currentConfig
|
||||||
|
contains($${currentConfig}._KEYS_, libraries) {
|
||||||
|
qtConfSetupLibraries()
|
||||||
|
# this ensures that references in QMAKE_LIBRARY_DEPS are unique.
|
||||||
|
qtConfSetModuleName()
|
||||||
|
ex = $$eval(config.modules.$${currentModule})
|
||||||
|
!isEmpty(ex): \
|
||||||
|
error("Module $$currentModule is claimed by both $$currentConfig and $${ex}.")
|
||||||
|
config.modules.$${currentModule} = $$currentConfig
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# prepend all subconfigs to files to keep a depth first search order
|
# prepend all subconfigs to files to keep a depth first search order
|
||||||
subconfigs =
|
subconfigs =
|
||||||
for(n, $${currentConfig}.subconfigs._KEYS_) {
|
for(n, $${currentConfig}.subconfigs._KEYS_) {
|
||||||
subconfig = $$eval($${currentConfig}.subconfigs.$${n})
|
subconfig = $$eval($${currentConfig}.subconfigs.$${n})
|
||||||
name = $$basename(subconfig)
|
name = $$basename(subconfig)
|
||||||
|
ex = $$eval(config.$${name}.dir)
|
||||||
|
!isEmpty(ex): \
|
||||||
|
error("Basename clash between $$thisDir/$$subconfig and $${ex}.")
|
||||||
config.$${name}.dir = $$thisDir/$$subconfig
|
config.$${name}.dir = $$thisDir/$$subconfig
|
||||||
subconfigs += $$name
|
subconfigs += $$name
|
||||||
}
|
}
|
||||||
configsToProcess = $$subconfigs $$configsToProcess
|
configsToProcess = $$subconfigs $$configsToProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
for (currentConfig, allConfigs): \
|
|
||||||
qtConfSetupLibraries()
|
|
||||||
|
|
||||||
QMAKE_SAVED_ARGS = $$QMAKE_EXTRA_ARGS
|
QMAKE_SAVED_ARGS = $$QMAKE_EXTRA_ARGS
|
||||||
QMAKE_REDO_CONFIG = false
|
QMAKE_REDO_CONFIG = false
|
||||||
qtConfParseCommandLine()
|
qtConfParseCommandLine()
|
||||||
qtConfCheckErrors()
|
qtConfCheckErrors()
|
||||||
|
|
||||||
|
!isEmpty(config.input.list-features) {
|
||||||
|
all_ft =
|
||||||
|
for (currentConfig, allConfigs) {
|
||||||
|
for (k, $${currentConfig}.features._KEYS_) {
|
||||||
|
pp = $$eval($${currentConfig}.features.$${k}.purpose)
|
||||||
|
!isEmpty(pp) {
|
||||||
|
all_ft += $$qtConfPadCols($$k, ".......................", \
|
||||||
|
$$section(pp, $$escape_expand(\\n), 0, 0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
all_ft = $$sorted(all_ft)
|
||||||
|
logn()
|
||||||
|
for (ft, all_ft): \
|
||||||
|
logn($$ft)
|
||||||
|
error()
|
||||||
|
}
|
||||||
|
|
||||||
|
!isEmpty(config.input.list-libraries) {
|
||||||
|
logn()
|
||||||
|
for (currentConfig, allConfigs) {
|
||||||
|
!isEmpty($${currentConfig}.exports._KEYS_) {
|
||||||
|
!isEmpty($${currentConfig}.module): \
|
||||||
|
logn($$eval($${currentConfig}.module):)
|
||||||
|
else: \
|
||||||
|
logn($$section(currentConfig, ., -1):)
|
||||||
|
all_xp =
|
||||||
|
for (xport, $${currentConfig}.exports._KEYS_) {
|
||||||
|
libs = $$eval($${currentConfig}.exports.$$xport)
|
||||||
|
isEqual($${currentConfig}.libraries.$$first(libs).export, "") { # not isEmpty()!
|
||||||
|
!isEmpty(config.input.verbose): \
|
||||||
|
all_xp += "$$xport!"
|
||||||
|
} else {
|
||||||
|
out = "$$xport"
|
||||||
|
!isEmpty(config.input.verbose):!isEqual(xport, $$libs): \
|
||||||
|
out += "($$libs)"
|
||||||
|
all_xp += "$$out"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
all_xp = $$sorted(all_xp)
|
||||||
|
all_xp ~= s,^([^!]*)!$,(\\1),g
|
||||||
|
for (xp, all_xp): \
|
||||||
|
logn(" $$xp")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
error()
|
||||||
|
}
|
||||||
|
|
||||||
for (currentConfig, allConfigs) {
|
for (currentConfig, allConfigs) {
|
||||||
qtConfSetModuleName()
|
qtConfSetModuleName()
|
||||||
qtConfSetupModuleOutputs()
|
qtConfSetupModuleOutputs()
|
||||||
@ -1833,11 +2015,15 @@ for (currentConfig, allConfigs) {
|
|||||||
|
|
||||||
# correctly setup dependencies
|
# correctly setup dependencies
|
||||||
QMAKE_CONFIG_DEPS = global global_private
|
QMAKE_CONFIG_DEPS = global global_private
|
||||||
|
QMAKE_LIBRARY_DEPS = $$eval(config.modules.global)
|
||||||
!isEmpty($${currentConfig}.module) {
|
!isEmpty($${currentConfig}.module) {
|
||||||
for (d, $${currentConfig}.depends._KEYS_) {
|
for (d, $${currentConfig}.depends._KEYS_) {
|
||||||
dep = $$replace($${currentConfig}.depends.$$d, -private$, _private)
|
dep = $$replace($${currentConfig}.depends.$$d, -private$, _private)
|
||||||
dep *= $$replace(dep, _private$, )
|
gdep = $$replace(dep, _private$, )
|
||||||
|
dep *= $$gdep
|
||||||
QMAKE_CONFIG_DEPS += $$dep
|
QMAKE_CONFIG_DEPS += $$dep
|
||||||
|
!isEqual(gdep, $$dep): \ # libraries are in the private module.
|
||||||
|
QMAKE_LIBRARY_DEPS += $$eval(config.modules.$$gdep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ THE_TARGET = $$qt5LibraryTarget($$TARGET)
|
|||||||
darwin: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}_debug
|
darwin: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}_debug
|
||||||
MODULE_RELEASE_LIBS = -L$$DESTDIR -l$$TARGET
|
MODULE_RELEASE_LIBS = -L$$DESTDIR -l$$TARGET
|
||||||
MODULE_PRI_CONT += \
|
MODULE_PRI_CONT += \
|
||||||
|
"QMAKE_LIBS_$${ucmodule} =" \ # Needed for the module to be recognized.
|
||||||
"QMAKE_LIBS_$${ucmodule}_DEBUG = $$val_escape(MODULE_DEBUG_LIBS)" \
|
"QMAKE_LIBS_$${ucmodule}_DEBUG = $$val_escape(MODULE_DEBUG_LIBS)" \
|
||||||
"QMAKE_LIBS_$${ucmodule}_RELEASE = $$val_escape(MODULE_RELEASE_LIBS)"
|
"QMAKE_LIBS_$${ucmodule}_RELEASE = $$val_escape(MODULE_RELEASE_LIBS)"
|
||||||
} else {
|
} else {
|
||||||
|
@ -59,7 +59,7 @@ defineReplace(qtExportLibsForModule) {
|
|||||||
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \
|
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \
|
||||||
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
|
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
|
||||||
for (var, vars) {
|
for (var, vars) {
|
||||||
!isEmpty($$var): \
|
defined($$var, var): \
|
||||||
result += "$$var = $$val_escape($$var)"
|
result += "$$var = $$val_escape($$var)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ QMAKE_CFLAGS_APP = -fPIC
|
|||||||
QMAKE_CFLAGS_DEPS = -M
|
QMAKE_CFLAGS_DEPS = -M
|
||||||
QMAKE_CFLAGS_WARN_ON = -w1 -Wall -Wcheck -wd1572,873,2259,2261,3373
|
QMAKE_CFLAGS_WARN_ON = -w1 -Wall -Wcheck -wd1572,873,2259,2261,3373
|
||||||
QMAKE_CFLAGS_WARN_OFF = -w
|
QMAKE_CFLAGS_WARN_OFF = -w
|
||||||
QMAKE_CFLAGS_RELEASE = -O2 -ansi-alias -fstrict-aliasing
|
QMAKE_CFLAGS_RELEASE = -O2
|
||||||
QMAKE_CFLAGS_DEBUG = -O0 -g
|
QMAKE_CFLAGS_DEBUG = -O0 -g
|
||||||
QMAKE_CFLAGS_SHLIB = -fPIC
|
QMAKE_CFLAGS_SHLIB = -fPIC
|
||||||
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
||||||
|
@ -16,8 +16,8 @@ QMAKE_CFLAGS =
|
|||||||
QMAKE_CFLAGS_DEPS = -M
|
QMAKE_CFLAGS_DEPS = -M
|
||||||
QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125,2259,2261,3280,3373
|
QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125,2259,2261,3280,3373
|
||||||
QMAKE_CFLAGS_WARN_OFF = -w
|
QMAKE_CFLAGS_WARN_OFF = -w
|
||||||
QMAKE_CFLAGS_RELEASE =
|
QMAKE_CFLAGS_RELEASE = -O2
|
||||||
QMAKE_CFLAGS_DEBUG = -g
|
QMAKE_CFLAGS_DEBUG = -g -O0
|
||||||
QMAKE_CFLAGS_SHLIB = -fPIC
|
QMAKE_CFLAGS_SHLIB = -fPIC
|
||||||
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
||||||
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
|
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
|
||||||
|
32
src/3rdparty/pcre2/import_from_pcre2_tarball.sh
vendored
32
src/3rdparty/pcre2/import_from_pcre2_tarball.sh
vendored
@ -2,31 +2,37 @@
|
|||||||
#############################################################################
|
#############################################################################
|
||||||
##
|
##
|
||||||
## Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
|
## Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
|
||||||
## Contact: http://www.qt.io/licensing/
|
## Contact: https://www.qt.io/licensing/
|
||||||
##
|
##
|
||||||
## This file is the build configuration utility of the Qt Toolkit.
|
## This file is the build configuration utility of the Qt Toolkit.
|
||||||
##
|
##
|
||||||
## $QT_BEGIN_LICENSE:LGPL21$
|
## $QT_BEGIN_LICENSE:LGPL$
|
||||||
## Commercial License Usage
|
## Commercial License Usage
|
||||||
## Licensees holding valid commercial Qt licenses may use this file in
|
## Licensees holding valid commercial Qt licenses may use this file in
|
||||||
## accordance with the commercial license agreement provided with the
|
## accordance with the commercial license agreement provided with the
|
||||||
## Software or, alternatively, in accordance with the terms contained in
|
## Software or, alternatively, in accordance with the terms contained in
|
||||||
## a written agreement between you and The Qt Company. For licensing terms
|
## a written agreement between you and The Qt Company. For licensing terms
|
||||||
## and conditions see http://www.qt.io/terms-conditions. For further
|
## and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
## information use the contact form at http://www.qt.io/contact-us.
|
## information use the contact form at https://www.qt.io/contact-us.
|
||||||
##
|
##
|
||||||
## GNU Lesser General Public License Usage
|
## GNU Lesser General Public License Usage
|
||||||
## Alternatively, this file may be used under the terms of the GNU Lesser
|
## Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
## General Public License version 2.1 or version 3 as published by the Free
|
## General Public License version 3 as published by the Free Software
|
||||||
## Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
## Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
## LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
## packaging of this file. Please review the following information to
|
||||||
## following information to ensure the GNU Lesser General Public License
|
## ensure the GNU Lesser General Public License version 3 requirements
|
||||||
## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
##
|
##
|
||||||
## As a special exception, The Qt Company gives you certain additional
|
## GNU General Public License Usage
|
||||||
## rights. These rights are described in The Qt Company LGPL Exception
|
## Alternatively, this file may be used under the terms of the GNU
|
||||||
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
## 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$
|
## $QT_END_LICENSE$
|
||||||
##
|
##
|
||||||
|
@ -279,6 +279,9 @@ public class QtActivityDelegate
|
|||||||
|
|
||||||
if (m_softInputMode != 0) {
|
if (m_softInputMode != 0) {
|
||||||
m_activity.getWindow().setSoftInputMode(m_softInputMode);
|
m_activity.getWindow().setSoftInputMode(m_softInputMode);
|
||||||
|
final boolean softInputIsHidden = (m_softInputMode & WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) != 0;
|
||||||
|
if (softInputIsHidden)
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (height > visibleHeight)
|
if (height > visibleHeight)
|
||||||
m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
|
@ -192,6 +192,32 @@ QtConcurrent::ConstMemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func
|
|||||||
return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
|
return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
|
||||||
|
template <typename T, typename U>
|
||||||
|
QtConcurrent::FunctionWrapper1<T, U> createFunctionWrapper(T (*func)(U) noexcept)
|
||||||
|
{
|
||||||
|
return QtConcurrent::FunctionWrapper1<T, U>(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename C>
|
||||||
|
QtConcurrent::MemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func)() noexcept)
|
||||||
|
{
|
||||||
|
return QtConcurrent::MemberFunctionWrapper<T, C>(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename C, typename U>
|
||||||
|
QtConcurrent::MemberFunctionWrapper1<T, C, U> createFunctionWrapper(T (C::*func)(U) noexcept)
|
||||||
|
{
|
||||||
|
return QtConcurrent::MemberFunctionWrapper1<T, C, U>(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename C>
|
||||||
|
QtConcurrent::ConstMemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func)() const noexcept)
|
||||||
|
{
|
||||||
|
return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct PushBackWrapper
|
struct PushBackWrapper
|
||||||
{
|
{
|
||||||
typedef void result_type;
|
typedef void result_type;
|
||||||
@ -231,6 +257,20 @@ struct ReduceResultType<T(C::*)(U)>
|
|||||||
typedef C ResultType;
|
typedef C ResultType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
|
||||||
|
template <class U, class V>
|
||||||
|
struct ReduceResultType<void(*)(U&,V) noexcept>
|
||||||
|
{
|
||||||
|
typedef U ResultType;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T, class C, class U>
|
||||||
|
struct ReduceResultType<T(C::*)(U) noexcept>
|
||||||
|
{
|
||||||
|
typedef C ResultType;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
template <class InputSequence, class MapFunctor>
|
template <class InputSequence, class MapFunctor>
|
||||||
struct MapResultType
|
struct MapResultType
|
||||||
{
|
{
|
||||||
@ -249,6 +289,20 @@ struct MapResultType<void, T(C::*)() const>
|
|||||||
typedef T ResultType;
|
typedef T ResultType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
|
||||||
|
template <class U, class V>
|
||||||
|
struct MapResultType<void, U (*)(V) noexcept>
|
||||||
|
{
|
||||||
|
typedef U ResultType;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T, class C>
|
||||||
|
struct MapResultType<void, T(C::*)() const noexcept>
|
||||||
|
{
|
||||||
|
typedef T ResultType;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
|
#ifndef QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
|
||||||
|
|
||||||
template <template <typename> class InputSequence, typename MapFunctor, typename T>
|
template <template <typename> class InputSequence, typename MapFunctor, typename T>
|
||||||
@ -269,6 +323,21 @@ struct MapResultType<InputSequence<T>, U(C::*)() const>
|
|||||||
typedef InputSequence<U> ResultType;
|
typedef InputSequence<U> ResultType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
|
||||||
|
|
||||||
|
template <template <typename> class InputSequence, class T, class U, class V>
|
||||||
|
struct MapResultType<InputSequence<T>, U (*)(V) noexcept>
|
||||||
|
{
|
||||||
|
typedef InputSequence<U> ResultType;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <typename> class InputSequence, class T, class U, class C>
|
||||||
|
struct MapResultType<InputSequence<T>, U(C::*)() const noexcept>
|
||||||
|
{
|
||||||
|
typedef InputSequence<U> ResultType;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // QT_NO_TEMPLATE_TEMPLATE_PARAMETER
|
#endif // QT_NO_TEMPLATE_TEMPLATE_PARAMETER
|
||||||
|
|
||||||
template <class MapFunctor>
|
template <class MapFunctor>
|
||||||
@ -289,6 +358,21 @@ struct MapResultType<QStringList, U(C::*)() const>
|
|||||||
typedef QList<U> ResultType;
|
typedef QList<U> ResultType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
|
||||||
|
|
||||||
|
template <class U, class V>
|
||||||
|
struct MapResultType<QStringList, U (*)(V) noexcept>
|
||||||
|
{
|
||||||
|
typedef QList<U> ResultType;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class U, class C>
|
||||||
|
struct MapResultType<QStringList, U(C::*)() const noexcept>
|
||||||
|
{
|
||||||
|
typedef QList<U> ResultType;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace QtPrivate.
|
} // namespace QtPrivate.
|
||||||
|
|
||||||
#endif //Q_QDOC
|
#endif //Q_QDOC
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 Samuel Gaist <samuel.gaist@edeltech.ch>
|
** Copyright (C) 2016 Samuel Gaist <samuel.gaist@edeltech.ch>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 Samuel Gaist <samuel.gaist@edeltech.ch>
|
** Copyright (C) 2016 Samuel Gaist <samuel.gaist@edeltech.ch>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -55,6 +55,6 @@ QRect r2(QPoint(100, 200), QSize(11, 16));
|
|||||||
|
|
||||||
|
|
||||||
//! [1]
|
//! [1]
|
||||||
QRectF r1(100, 200, 11, 16);
|
QRectF r1(100.0, 200.1, 11.2, 16.3);
|
||||||
QRectF r2(QPoint(100, 200), QSize(11, 16));
|
QRectF r2(QPointF(100.0, 200.1), QSizeF(11.2, 16.3));
|
||||||
//! [1]
|
//! [1]
|
||||||
|
@ -80,6 +80,8 @@ gcc:ltcg {
|
|||||||
SOURCES += $$VERSIONTAGGING_SOURCES
|
SOURCES += $$VERSIONTAGGING_SOURCES
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# On AARCH64 the fp16 extension is mandatory, so we don't need the conversion tables.
|
||||||
|
!contains(QT_ARCH, "arm64") {
|
||||||
QMAKE_QFLOAT16_TABLES_GENERATE = global/qfloat16.h
|
QMAKE_QFLOAT16_TABLES_GENERATE = global/qfloat16.h
|
||||||
|
|
||||||
qtPrepareTool(QMAKE_QFLOAT16_TABLES, qfloat16-tables)
|
qtPrepareTool(QMAKE_QFLOAT16_TABLES, qfloat16-tables)
|
||||||
@ -90,3 +92,4 @@ qfloat16_tables.depends = $$QMAKE_QFLOAT16_TABLES
|
|||||||
qfloat16_tables.input = QMAKE_QFLOAT16_TABLES_GENERATE
|
qfloat16_tables.input = QMAKE_QFLOAT16_TABLES_GENERATE
|
||||||
qfloat16_tables.variable_out = SOURCES
|
qfloat16_tables.variable_out = SOURCES
|
||||||
QMAKE_EXTRA_COMPILERS += qfloat16_tables
|
QMAKE_EXTRA_COMPILERS += qfloat16_tables
|
||||||
|
}
|
||||||
|
@ -1,956 +0,0 @@
|
|||||||
# Generic entry format
|
|
||||||
#Feature: UPPERCASENAME (for the #define)
|
|
||||||
#Description: One sentence description of what this does.
|
|
||||||
#Section: Categorization
|
|
||||||
#Requires: UPPERCASENAME...
|
|
||||||
#Name: CamelCaseName (often a class name)
|
|
||||||
#SeeAlso: UPPERCASENAME... (currently unused)
|
|
||||||
|
|
||||||
# Kernel
|
|
||||||
|
|
||||||
Feature: PROPERTIES
|
|
||||||
Description: Supports scripting Qt-based applications.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: Properties
|
|
||||||
|
|
||||||
Feature: TEXTHTMLPARSER
|
|
||||||
Description: Parser for HTML
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: HtmlParser
|
|
||||||
|
|
||||||
Feature: TEXTODFWRITER
|
|
||||||
Description: Provides an ODF writer
|
|
||||||
Section: Kernel
|
|
||||||
Requires: XMLSTREAMWRITER
|
|
||||||
Name: OdfWriter
|
|
||||||
|
|
||||||
Feature: CSSPARSER
|
|
||||||
Description: Parser for Style Sheets
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: CssParser
|
|
||||||
|
|
||||||
Feature: REGULAREXPRESSION
|
|
||||||
Description: Perl-compatible regular expression APIs
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QRegularExpression
|
|
||||||
|
|
||||||
Feature: CONCURRENT
|
|
||||||
Description: Provides a high-level multi-threaded APIs
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QtConcurrent
|
|
||||||
|
|
||||||
Feature: DRAGANDDROP
|
|
||||||
Description: Supports the drag and drop mechansim.
|
|
||||||
Section: Kernel
|
|
||||||
Requires: IMAGEFORMAT_XPM
|
|
||||||
Name: Drag and drop
|
|
||||||
|
|
||||||
Feature: SESSIONMANAGER
|
|
||||||
Description: Supports session management.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: Session Manager
|
|
||||||
|
|
||||||
Feature: SHORTCUT
|
|
||||||
Description: Supports keyboard accelerators and shortcuts.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QShortcut
|
|
||||||
|
|
||||||
Feature: ACTION
|
|
||||||
Description: Supports widget actions.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QAction
|
|
||||||
|
|
||||||
Feature: CURSOR
|
|
||||||
Description: Supports mouse cursors.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QCursor
|
|
||||||
|
|
||||||
Feature: CLIPBOARD
|
|
||||||
Description: Supports cut and paste operations.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QClipboard
|
|
||||||
|
|
||||||
Feature: WHEELEVENT
|
|
||||||
Description: Supports wheel events.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QWheelEvent
|
|
||||||
|
|
||||||
Feature: TABLETEVENT
|
|
||||||
Description: Supports tablet events.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QTabletEvent
|
|
||||||
|
|
||||||
Feature: EFFECTS
|
|
||||||
Description: Supports special widget effects (e.g. fading and scrolling).
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: Effects
|
|
||||||
|
|
||||||
Feature: SHAREDMEMORY
|
|
||||||
Description: Provides access to a shared memory segment.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: QSharedMemory
|
|
||||||
|
|
||||||
Feature: SYSTEMSEMAPHORE
|
|
||||||
Description: Provides a general counting system semaphore.
|
|
||||||
Section: Kernel
|
|
||||||
Requires: SHAREDMEMORY
|
|
||||||
Name: QSystemSemaphore
|
|
||||||
|
|
||||||
Feature: XMLSTREAM
|
|
||||||
Description: Provides a simple streaming API for XML.
|
|
||||||
Section: Kernel
|
|
||||||
Requires:
|
|
||||||
Name: XML Streaming APIs
|
|
||||||
|
|
||||||
Feature: XMLSTREAMREADER
|
|
||||||
Description: Provides a well-formed XML parser with a simple streaming API.
|
|
||||||
Section: Kernel
|
|
||||||
Requires: XMLSTREAM
|
|
||||||
Name: QXmlStreamReader
|
|
||||||
|
|
||||||
Feature: XMLSTREAMWRITER
|
|
||||||
Description: Provides a XML writer with a simple streaming API.
|
|
||||||
Section: Kernel
|
|
||||||
Requires: XMLSTREAM
|
|
||||||
Name: QXmlStreamWriter
|
|
||||||
|
|
||||||
Feature: IM
|
|
||||||
Description: Inputmethods with QInputContext
|
|
||||||
Section: Kernel
|
|
||||||
Requires: LIBRARY
|
|
||||||
Name: QInputContext
|
|
||||||
|
|
||||||
# Data structures
|
|
||||||
|
|
||||||
Feature: TEXTDATE
|
|
||||||
Description: Supports month and day names in dates.
|
|
||||||
Section: Data structures
|
|
||||||
Requires:
|
|
||||||
Name: Text Date
|
|
||||||
|
|
||||||
Feature: DATESTRING
|
|
||||||
Description: Supports convertion between dates and strings.
|
|
||||||
Section: Data structures
|
|
||||||
Requires: TEXTDATE
|
|
||||||
Name: QDate/QTime/QDateTime
|
|
||||||
|
|
||||||
# File I/O
|
|
||||||
|
|
||||||
Feature: PROCESS
|
|
||||||
Description: Supports external process invocation.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QProcess
|
|
||||||
|
|
||||||
Feature: TEMPORARYFILE
|
|
||||||
Description: Provides an I/O device that operates on temporary files.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QTemporaryFile
|
|
||||||
|
|
||||||
Feature: LIBRARY
|
|
||||||
Description: Supports a shared library wrapper.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QLibrary
|
|
||||||
|
|
||||||
Feature: SETTINGS
|
|
||||||
Description: Supports persistent application settings.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QSettings
|
|
||||||
|
|
||||||
Feature: DOM
|
|
||||||
Description: Supports the Document Object Model.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: Document Object Model
|
|
||||||
|
|
||||||
Feature: FILESYSTEMMODEL
|
|
||||||
Description: Provides a data model for the local filesystem.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QFileSystemModel
|
|
||||||
|
|
||||||
Feature: FILESYSTEMWATCHER
|
|
||||||
Description: Provides an interface for monitoring files and directories for modications.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QFileSystemWatcher
|
|
||||||
|
|
||||||
Feature: FILESYSTEMITERATOR
|
|
||||||
Description: Provides fast file-system iteration.
|
|
||||||
Section: File I/O
|
|
||||||
Requires:
|
|
||||||
Name: QFileSystemIterator
|
|
||||||
|
|
||||||
# Widgets
|
|
||||||
|
|
||||||
Feature: TREEWIDGET
|
|
||||||
Description: Supports views using tree models.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TREEVIEW
|
|
||||||
Name: QTreeWidget
|
|
||||||
|
|
||||||
Feature: LISTWIDGET
|
|
||||||
Description: Supports item-based list widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: LISTVIEW
|
|
||||||
Name: QListWidget
|
|
||||||
|
|
||||||
Feature: TABLEWIDGET
|
|
||||||
Description: Supports item-based table views.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TABLEVIEW
|
|
||||||
Name: QTableWidget
|
|
||||||
|
|
||||||
Feature: DATETIMEEDIT
|
|
||||||
Description: Supports editing dates and times.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: CALENDARWIDGET DATESTRING
|
|
||||||
Name: QDateTimeEdit
|
|
||||||
|
|
||||||
Feature: STACKEDWIDGET
|
|
||||||
Description: Supports stacked widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QStackedWidget
|
|
||||||
|
|
||||||
Feature: TEXTBROWSER
|
|
||||||
Description: Supports HTML document browsing.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TEXTEDIT
|
|
||||||
Name: QTextBrowser
|
|
||||||
|
|
||||||
Feature: SPLASHSCREEN
|
|
||||||
Description: Supports splash screens that can be shown during application startup.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: Splash screen widget
|
|
||||||
|
|
||||||
Feature: SPLITTER
|
|
||||||
Description: Supports user controlled splitter widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: RUBBERBAND
|
|
||||||
Name: QSplitter
|
|
||||||
|
|
||||||
Feature: LCDNUMBER
|
|
||||||
Description: Supports LCD-like digits.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QLCDNumber
|
|
||||||
|
|
||||||
Feature: MENU
|
|
||||||
Description: Supports popup-menus.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: ACTION
|
|
||||||
Name: QMenu
|
|
||||||
|
|
||||||
Feature: LINEEDIT
|
|
||||||
Description: Supports single-line edits.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QLineEdit
|
|
||||||
|
|
||||||
Feature: SPINBOX
|
|
||||||
Description: Supports spin boxes handling integers and discrete sets of values.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SPINWIDGET LINEEDIT VALIDATOR
|
|
||||||
Name: QSpinBox
|
|
||||||
|
|
||||||
Feature: TABBAR
|
|
||||||
Description: Supports tab bars, e.g. for use in tabbed dialogs.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TOOLBUTTON
|
|
||||||
Name: QTabBar
|
|
||||||
|
|
||||||
Feature: TABWIDGET
|
|
||||||
Description: Supports stacking tabbed widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TABBAR STACKEDWIDGET
|
|
||||||
Name: QTabWidget
|
|
||||||
|
|
||||||
Feature: COMBOBOX
|
|
||||||
Description: Supports comboboxes presenting a list of options to the user.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: LINEEDIT STANDARDITEMMODEL LISTVIEW
|
|
||||||
Name: QComboBox
|
|
||||||
|
|
||||||
Feature: FONTCOMBOBOX
|
|
||||||
Description: Supports a combobox that lets the user select a font family.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: COMBOBOX STRINGLISTMODEL
|
|
||||||
Name: QFontComboBox
|
|
||||||
|
|
||||||
Feature: TOOLBUTTON
|
|
||||||
Description: Supports quick-access buttons to commands and options.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: ACTION
|
|
||||||
Name: QToolButton
|
|
||||||
|
|
||||||
Feature: TOOLBAR
|
|
||||||
Description: Supports movable panels containing a set of controls.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: MAINWINDOW
|
|
||||||
Name: QToolBar
|
|
||||||
|
|
||||||
Feature: TOOLBOX
|
|
||||||
Description: Supports columns of tabbed widget items.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TOOLBUTTON SCROLLAREA
|
|
||||||
Name: QToolBox
|
|
||||||
|
|
||||||
Feature: GROUPBOX
|
|
||||||
Description: Supports group box frames.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QGroupBox
|
|
||||||
|
|
||||||
Feature: BUTTONGROUP
|
|
||||||
Description: Supports organizing groups of button widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: GROUPBOX
|
|
||||||
Name: QButtonGroup
|
|
||||||
|
|
||||||
Feature: MAINWINDOW
|
|
||||||
Description: Supports main application windows.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: MENU RESIZEHANDLER TOOLBUTTON
|
|
||||||
Name: QMainWindow
|
|
||||||
|
|
||||||
Feature: DOCKWIDGET
|
|
||||||
Description: Supports docking widgets inside a QMainWindow or floated as a top-level window on the desktop.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: RUBBERBAND MAINWINDOW
|
|
||||||
Name: QDockwidget
|
|
||||||
|
|
||||||
Feature: MDIAREA
|
|
||||||
Description: Provides an area in which MDI windows are displayed.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SCROLLAREA
|
|
||||||
Name: QMdiArea
|
|
||||||
|
|
||||||
Feature: RESIZEHANDLER
|
|
||||||
Description: Supports an internal resize handler.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: Resize Handler
|
|
||||||
|
|
||||||
Feature: STATUSBAR
|
|
||||||
Description: Supports presentation of status information.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QStatusBar
|
|
||||||
|
|
||||||
Feature: MENUBAR
|
|
||||||
Description: Supports pull-down menu items.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: MENU TOOLBUTTON
|
|
||||||
Name: QMenuBar
|
|
||||||
|
|
||||||
Feature: CONTEXTMENU
|
|
||||||
Description: Supports pop-up menus on right mouse click
|
|
||||||
Section: Widgets
|
|
||||||
Requires: MENU
|
|
||||||
Name: Context menu
|
|
||||||
|
|
||||||
Feature: PROGRESSBAR
|
|
||||||
Description: Supports presentation of operation progress.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QProgressBar
|
|
||||||
|
|
||||||
Feature: SLIDER
|
|
||||||
Description: Supports sliders controlling a bounded value.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QSlider
|
|
||||||
|
|
||||||
Feature: SCROLLBAR
|
|
||||||
Description: Supports scrollbars allowing the user access parts of a document that is larger than the widget used to display it.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SLIDER
|
|
||||||
Name: QScrollBar
|
|
||||||
|
|
||||||
Feature: DIAL
|
|
||||||
Description: Supports rounded range control, e.g. like a speedometer.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SLIDER
|
|
||||||
Name: QDial
|
|
||||||
|
|
||||||
Feature: SCROLLAREA
|
|
||||||
Description: Supports scrolling views onto widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SCROLLBAR
|
|
||||||
Name: QScrollArea
|
|
||||||
|
|
||||||
Feature: GRAPHICSVIEW
|
|
||||||
Description: Supports the graphicsview classes.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SCROLLAREA
|
|
||||||
Name: QGraphicsView
|
|
||||||
|
|
||||||
Feature: GRAPHICSEFFECT
|
|
||||||
Description: Supports the graphicseffect classes.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: GRAPHICSVIEW
|
|
||||||
Name: QGraphicsEffect
|
|
||||||
|
|
||||||
Feature: SPINWIDGET
|
|
||||||
Description: Supports spinbox control widgets.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: Spin Widget
|
|
||||||
|
|
||||||
Feature: TEXTEDIT
|
|
||||||
Description: Supports rich text editing.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: SCROLLAREA PROPERTIES
|
|
||||||
Name: QTextEdit
|
|
||||||
|
|
||||||
Feature: SYNTAXHIGHLIGHTER
|
|
||||||
Description: Supports custom syntax highlighting.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TEXTEDIT
|
|
||||||
Name: QSyntaxHighlighter
|
|
||||||
|
|
||||||
Feature: RUBBERBAND
|
|
||||||
Description: Supports using rubberbands to indicate selections and boundaries.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QRubberBand
|
|
||||||
|
|
||||||
Feature: TOOLTIP
|
|
||||||
Description: Supports presentation of tooltips.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QToolTip
|
|
||||||
|
|
||||||
Feature: STATUSTIP
|
|
||||||
Description: Supports status tip functionality and events.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: Status Tip
|
|
||||||
|
|
||||||
Feature: WHATSTHIS
|
|
||||||
Description: Supports displaying "What's this" help.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TOOLBUTTON
|
|
||||||
Name: QWhatsThis
|
|
||||||
|
|
||||||
Feature: VALIDATOR
|
|
||||||
Description: Supports validation of input text.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QValidator
|
|
||||||
|
|
||||||
Feature: SIZEGRIP
|
|
||||||
Description: Supports corner-grips for resizing a top-level windows.
|
|
||||||
Section: Widgets
|
|
||||||
Requires:
|
|
||||||
Name: QSizeGrip
|
|
||||||
|
|
||||||
Feature: CALENDARWIDGET
|
|
||||||
Description: Provides a monthly based calendar widget allowing the user to select a date.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: TABLEVIEW MENU TEXTDATE SPINBOX TOOLBUTTON
|
|
||||||
Name: QCalendarWidget
|
|
||||||
|
|
||||||
Feature: PRINTPREVIEWWIDGET
|
|
||||||
Description: Provides a widget for previewing page layouts for printer output.
|
|
||||||
Section: Widgets
|
|
||||||
Requires: GRAPHICSVIEW PRINTER MAINWINDOW
|
|
||||||
Name: QPrintPreviewWidget
|
|
||||||
|
|
||||||
Feature: KEYSEQUENCEEDIT
|
|
||||||
Description: Provides a widget for editing QKeySequences
|
|
||||||
Section: Widgets
|
|
||||||
Requires: LINEEDIT SHORTCUT
|
|
||||||
Name: QKeySequenceEdit
|
|
||||||
|
|
||||||
# Dialogs
|
|
||||||
|
|
||||||
Feature: MESSAGEBOX
|
|
||||||
Description: Supports message boxes displaying
|
|
||||||
informative messages and simple questions.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires:
|
|
||||||
Name: QMessageBox
|
|
||||||
|
|
||||||
Feature: COLORDIALOG
|
|
||||||
Description: Supports a dialog widget for specifying colors.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: SPINBOX
|
|
||||||
Name: QColorDialog
|
|
||||||
|
|
||||||
Feature: FILEDIALOG
|
|
||||||
Description: Supports a dialog widget for selecting files or directories.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: FILESYSTEMMODEL TREEVIEW COMBOBOX TOOLBUTTON BUTTONGROUP TOOLTIP SPLITTER STACKEDWIDGET PROXYMODEL
|
|
||||||
Name: QFileDialog
|
|
||||||
|
|
||||||
Feature: FONTDIALOG
|
|
||||||
Description: Supports a dialog widget for selecting fonts.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: STRINGLISTMODEL COMBOBOX VALIDATOR GROUPBOX
|
|
||||||
Name: QFontDialog
|
|
||||||
|
|
||||||
Feature: PRINTDIALOG
|
|
||||||
Description: Supports a dialog widget for specifying printer configuration.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: PRINTER COMBOBOX BUTTONGROUP SPINBOX TABWIDGET
|
|
||||||
Name: QPrintDialog
|
|
||||||
|
|
||||||
Feature: PRINTPREVIEWDIALOG
|
|
||||||
Description: Provides a dialog for previewing and configuring page layouts for printer output.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: PRINTPREVIEWWIDGET PRINTDIALOG TOOLBAR
|
|
||||||
Name: QPrintPreviewDialog
|
|
||||||
|
|
||||||
Feature: PROGRESSDIALOG
|
|
||||||
Description: Supports feedback on the progress of a slow operation.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: PROGRESSBAR
|
|
||||||
Name: QProgressDialog
|
|
||||||
|
|
||||||
Feature: INPUTDIALOG
|
|
||||||
Description: Supports a simple convenience dialog to get a single value from the user.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: COMBOBOX SPINBOX STACKEDWIDGET
|
|
||||||
Name: QInputDialog
|
|
||||||
|
|
||||||
Feature: ERRORMESSAGE
|
|
||||||
Description: Supports an error message display dialog.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: TEXTEDIT
|
|
||||||
Name: QErrorMessage
|
|
||||||
|
|
||||||
Feature: WIZARD
|
|
||||||
Description: Provides a framework for wizards.
|
|
||||||
Section: Dialogs
|
|
||||||
Requires: PROPERTIES
|
|
||||||
Name: QWizard
|
|
||||||
|
|
||||||
# ItemViews
|
|
||||||
|
|
||||||
Feature: ITEMVIEWS
|
|
||||||
Description: Supports the model/view architecture managing the relationship between data and the way it is presented to the user.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: RUBBERBAND SCROLLAREA
|
|
||||||
Name: The Model/View Framework
|
|
||||||
|
|
||||||
Feature: DIRMODEL
|
|
||||||
Description: Supports a data model for the local filesystem.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS FILESYSTEMMODEL
|
|
||||||
Name: QDirModel
|
|
||||||
|
|
||||||
Feature: STANDARDITEMMODEL
|
|
||||||
Description: Supports a generic model for storing custom data.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS
|
|
||||||
Name: QStandardItemModel
|
|
||||||
|
|
||||||
Feature: PROXYMODEL
|
|
||||||
Description: Supports processing of data passed between another model and a view.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS
|
|
||||||
Name: QAbstractProxyModel
|
|
||||||
|
|
||||||
Feature: SORTFILTERPROXYMODEL
|
|
||||||
Description: Supports sorting and filtering of data passed between another model and a view.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: PROXYMODEL
|
|
||||||
Name: QSortFilterProxyModel
|
|
||||||
|
|
||||||
Feature: IDENTITYPROXYMODEL
|
|
||||||
Description: Supports proxying a source model unmodified.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: PROXYMODEL
|
|
||||||
Name: QIdentityProxyModel
|
|
||||||
|
|
||||||
Feature: STRINGLISTMODEL
|
|
||||||
Description: Supports a model that supplies strings to views.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS
|
|
||||||
Name: QStringListModel
|
|
||||||
|
|
||||||
Feature: LISTVIEW
|
|
||||||
Description: Supports a list or icon view onto a model.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS
|
|
||||||
Name: QListView
|
|
||||||
|
|
||||||
Feature: TABLEVIEW
|
|
||||||
Description: Supports a default model/view implementation of a table view.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS
|
|
||||||
Name: QTableView
|
|
||||||
|
|
||||||
Feature: TREEVIEW
|
|
||||||
Description: Supports a default model/view implementation of a tree view.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS
|
|
||||||
Name: QTreeView
|
|
||||||
|
|
||||||
Feature: DATAWIDGETMAPPER
|
|
||||||
Description: Provides mapping between a section of a data model to widgets.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: ITEMVIEWS PROPERTIES
|
|
||||||
Name: QDataWidgetMapper
|
|
||||||
|
|
||||||
Feature: COLUMNVIEW
|
|
||||||
Description: Provides a model/view implementation of a column view.
|
|
||||||
Section: ItemViews
|
|
||||||
Requires: LISTVIEW
|
|
||||||
Name: QColumnView
|
|
||||||
|
|
||||||
# Styles
|
|
||||||
|
|
||||||
Feature: STYLE_WINDOWS
|
|
||||||
Description: Supports a Microsoft Windows-like look and feel.
|
|
||||||
Section: Styles
|
|
||||||
Requires:
|
|
||||||
Name: QWindowsStyle
|
|
||||||
|
|
||||||
Feature: STYLE_FUSION
|
|
||||||
Description: Supports a modern platform independent widget style.
|
|
||||||
Section: Styles
|
|
||||||
Requires: IMAGEFORMAT_XPM
|
|
||||||
Name: QFusionStyle
|
|
||||||
|
|
||||||
Feature: STYLE_WINDOWSXP
|
|
||||||
Description: Supports a Microsoft WindowsXP-like look and feel.
|
|
||||||
Section: Styles
|
|
||||||
Requires: STYLE_WINDOWS
|
|
||||||
Name: QWindowsXPStyle
|
|
||||||
|
|
||||||
Feature: STYLE_WINDOWSVISTA
|
|
||||||
Description: Supports a Microsoft WindowsVista-like look and feel.
|
|
||||||
Section: Styles
|
|
||||||
Requires: STYLE_WINDOWSXP
|
|
||||||
Name: QWindowsVistaStyle
|
|
||||||
|
|
||||||
Feature: STYLE_WINDOWSCE
|
|
||||||
Description: WindowsCE look and feel
|
|
||||||
Section: Styles
|
|
||||||
Requires: STYLE_WINDOWS IMAGEFORMAT_XPM
|
|
||||||
Name: QWindowsCEStyle
|
|
||||||
|
|
||||||
Feature: STYLE_WINDOWSMOBILE
|
|
||||||
Description: WindowsMobile look and feel
|
|
||||||
Section: Styles
|
|
||||||
Requires: STYLE_WINDOWS IMAGEFORMAT_XPM
|
|
||||||
Name: QWindowsMobileStyle
|
|
||||||
|
|
||||||
Feature: STYLE_STYLESHEET
|
|
||||||
Description:
|
|
||||||
Section: Styles
|
|
||||||
Requires: STYLE_WINDOWS PROPERTIES CSSPARSER
|
|
||||||
Name: QStyleSheetStyle
|
|
||||||
|
|
||||||
# Images
|
|
||||||
|
|
||||||
Feature: IMAGEFORMATPLUGIN
|
|
||||||
Description: Supports writing an image format plugin.
|
|
||||||
Section: Images
|
|
||||||
Requires: LIBRARY
|
|
||||||
Name: QImageIOPlugin
|
|
||||||
|
|
||||||
Feature: MOVIE
|
|
||||||
Description: Supports animated images.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: QMovie
|
|
||||||
|
|
||||||
Feature: IMAGEFORMAT_BMP
|
|
||||||
Description: Supports Microsoft's Bitmap image file format.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: BMP Image Format
|
|
||||||
|
|
||||||
Feature: IMAGEFORMAT_PPM
|
|
||||||
Description: Supports the Portable Pixmap image file format.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: PPM Image Format
|
|
||||||
|
|
||||||
Feature: IMAGEFORMAT_XBM
|
|
||||||
Description: Supports the X11 Bitmap image file format.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: XBM Image Format
|
|
||||||
|
|
||||||
Feature: IMAGEFORMAT_XPM
|
|
||||||
Description: Supports the X11 Pixmap image file format.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: XPM Image Format
|
|
||||||
|
|
||||||
Feature: IMAGEFORMAT_PNG
|
|
||||||
Description: Supports the Portable Network Graphics image file format.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: PNG Image Format
|
|
||||||
|
|
||||||
Feature: IMAGEFORMAT_JPEG
|
|
||||||
Description: Supports the Joint Photographic Experts Group image file format.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: JPEG Image Format
|
|
||||||
|
|
||||||
Feature: IMAGE_HEURISTIC_MASK
|
|
||||||
Description: Supports creating a 1-bpp heuristic mask for images.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: QImage::createHeuristicMask()
|
|
||||||
|
|
||||||
Feature: IMAGE_TEXT
|
|
||||||
Description: Supports image file text strings.
|
|
||||||
Section: Images
|
|
||||||
Requires:
|
|
||||||
Name: Image Text
|
|
||||||
|
|
||||||
# Painting
|
|
||||||
|
|
||||||
Feature: PICTURE
|
|
||||||
Description: Supports recording and replaying QPainter commands.
|
|
||||||
Section: Painting
|
|
||||||
Requires:
|
|
||||||
Name: QPicture
|
|
||||||
|
|
||||||
Feature: COLORNAMES
|
|
||||||
Description: Supports color names such as "red", used by QColor and by some HTML documents.
|
|
||||||
Section: Painting
|
|
||||||
Requires:
|
|
||||||
Name: Color Names
|
|
||||||
|
|
||||||
Feature: PDF
|
|
||||||
Description: Supports pdf format
|
|
||||||
Section: Painting
|
|
||||||
Requires: TEMPORARYFILE
|
|
||||||
Name: QPdf
|
|
||||||
|
|
||||||
Feature: PRINTER
|
|
||||||
Description: Supports printing
|
|
||||||
Section: Painting
|
|
||||||
Requires: PICTURE TEMPORARYFILE PDF
|
|
||||||
Name: QPrinter
|
|
||||||
|
|
||||||
Feature: CUPS
|
|
||||||
Description Supports the Common UNIX Printing System
|
|
||||||
Section: Painting
|
|
||||||
Requires: PRINTER LIBRARY
|
|
||||||
Name: Common UNIX Printing System
|
|
||||||
|
|
||||||
Feature: PAINT_DEBUG
|
|
||||||
Description: Debug painting with the environment variables QT_FLUSH_UPDATE and QT_FLUSH_PAINT
|
|
||||||
Section: Painting
|
|
||||||
Requires:
|
|
||||||
Name: Painting Debug Utilities
|
|
||||||
|
|
||||||
# Fonts
|
|
||||||
|
|
||||||
Feature: FREETYPE
|
|
||||||
Description: Supports the FreeType 2 font engine (and its supported font formats).
|
|
||||||
Section: Fonts
|
|
||||||
Requires:
|
|
||||||
Name: Freetype Font Engine
|
|
||||||
|
|
||||||
# Internationalization
|
|
||||||
|
|
||||||
Feature: TRANSLATION
|
|
||||||
Description: Supports translations using QObject::tr().
|
|
||||||
Section: Internationalization
|
|
||||||
Requires:
|
|
||||||
Name: Translation
|
|
||||||
|
|
||||||
Feature: TEXTCODEC
|
|
||||||
Description: Supports conversions between text encodings.
|
|
||||||
Section: Internationalization
|
|
||||||
Requires:
|
|
||||||
Name: QTextCodec
|
|
||||||
|
|
||||||
Feature: CODECS
|
|
||||||
Description: Supports non-unicode text conversions.
|
|
||||||
Section: Internationalization
|
|
||||||
Requires: TEXTCODEC
|
|
||||||
Name: Codecs
|
|
||||||
|
|
||||||
Feature: BIG_CODECS
|
|
||||||
Description: Supports big codecs, e.g. CJK.
|
|
||||||
Section: Internationalization
|
|
||||||
Requires: TEXTCODEC
|
|
||||||
Name: Big Codecs
|
|
||||||
|
|
||||||
Feature: ICONV
|
|
||||||
Description: Supports conversions between text encodings using iconv.
|
|
||||||
Section: Internationalization
|
|
||||||
Requires: TEXTCODEC
|
|
||||||
Name: iconv
|
|
||||||
|
|
||||||
# Networking
|
|
||||||
|
|
||||||
Feature: FTP
|
|
||||||
Description: Supports FTP file access.
|
|
||||||
Section: Networking
|
|
||||||
Requires: TEXTDATE
|
|
||||||
Name: File Transfer Protocol
|
|
||||||
|
|
||||||
Feature: HTTP
|
|
||||||
Description: Supports HTTP file access.
|
|
||||||
Section: Networking
|
|
||||||
Requires:
|
|
||||||
Name: Hyper Text Transfer Protocol
|
|
||||||
|
|
||||||
Feature: UDPSOCKET
|
|
||||||
Description: Supports User Datagram Protocol sockets.
|
|
||||||
Section: Networking
|
|
||||||
Requires:
|
|
||||||
Name: QUdpSocket
|
|
||||||
|
|
||||||
Feature: NETWORKPROXY
|
|
||||||
Description: Supports configuring network layer proxy support to the Qt network classes.
|
|
||||||
Section: Networking
|
|
||||||
Requires:
|
|
||||||
Name: QNetworkProxy
|
|
||||||
|
|
||||||
Feature: SOCKS5
|
|
||||||
Description: Supports SOCKS v5 network proxy.
|
|
||||||
Section: Networking
|
|
||||||
Requires: NETWORKPROXY
|
|
||||||
Name: SOCKS5
|
|
||||||
|
|
||||||
Feature: NETWORKINTERFACE
|
|
||||||
Description: Supports listing the host's IP addresses and network interfaces
|
|
||||||
Section: Networking
|
|
||||||
Requires:
|
|
||||||
Name: QNetworkInterface
|
|
||||||
|
|
||||||
Feature: NETWORKDISKCACHE
|
|
||||||
Description: Supports a disk cache for network resources
|
|
||||||
Section: Networking
|
|
||||||
Requires: TEMPORARYFILE
|
|
||||||
Name: QNetworkDiskCache
|
|
||||||
|
|
||||||
Feature: BEARERMANAGEMENT
|
|
||||||
Description: Provides bearer management support
|
|
||||||
Section: Networking
|
|
||||||
Requires: LIBRARY NETWORKINTERFACE PROPERTIES
|
|
||||||
Name: Bearer Management
|
|
||||||
|
|
||||||
Feature: LOCALSERVER
|
|
||||||
Description: Supports a local socket based server
|
|
||||||
Section: Networking
|
|
||||||
Requires: TEMPORARYFILE
|
|
||||||
Name: QLocalServer
|
|
||||||
|
|
||||||
# Utilities
|
|
||||||
|
|
||||||
Feature: COMPLETER
|
|
||||||
Description: Provides completions based on an item model.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: PROXYMODEL
|
|
||||||
Name: QCompleter
|
|
||||||
|
|
||||||
Feature: FSCOMPLETER
|
|
||||||
Description: Provides completions based on an item model.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: FILESYSTEMMODEL COMPLETER
|
|
||||||
Name: QCompleter
|
|
||||||
|
|
||||||
Feature: DESKTOPSERVICES
|
|
||||||
Description: Provides methods for accessing common desktop services.
|
|
||||||
Section: Utilities
|
|
||||||
Requires:
|
|
||||||
Name: QDesktopServices
|
|
||||||
|
|
||||||
Feature: MIMETYPE
|
|
||||||
Description: Describes types of file or data, represented by a MIME type string.
|
|
||||||
Section: Utilities
|
|
||||||
Requires:
|
|
||||||
Name: QMimeType
|
|
||||||
|
|
||||||
Feature: SYSTEMTRAYICON
|
|
||||||
Description: Provides an icon for an application in the system tray.
|
|
||||||
Section: Utilities
|
|
||||||
Requires:
|
|
||||||
Name: QSystemTrayIcon
|
|
||||||
|
|
||||||
Feature: UNDOCOMMAND
|
|
||||||
Description: Applies (redo or) undo of a single change in a document.
|
|
||||||
Section: Utilities
|
|
||||||
Requires:
|
|
||||||
Name: QUndoCommand
|
|
||||||
|
|
||||||
Feature: UNDOSTACK
|
|
||||||
Description: Provides the ability to (redo or) undo a list of changes in a document.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: UNDOCOMMAND
|
|
||||||
Name: QUndoStack
|
|
||||||
|
|
||||||
Feature: UNDOGROUP
|
|
||||||
Description:
|
|
||||||
Section: Utilities
|
|
||||||
Requires: UNDOSTACK
|
|
||||||
Name: QUndoGroup
|
|
||||||
|
|
||||||
Feature: UNDOVIEW
|
|
||||||
Description: A widget which shows the contents of an undo stack.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: UNDOSTACK LISTVIEW
|
|
||||||
Name: QUndoView
|
|
||||||
|
|
||||||
Feature: ACCESSIBILITY
|
|
||||||
Description: Provides accessibility support.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: PROPERTIES MENUBAR
|
|
||||||
Name: Accessibility
|
|
||||||
|
|
||||||
Feature: ANIMATION
|
|
||||||
Description: Provides a framework for animations.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: PROPERTIES
|
|
||||||
Name: Animation
|
|
||||||
|
|
||||||
Feature: STATEMACHINE
|
|
||||||
Description: Provides hierarchical finite state machines.
|
|
||||||
Section: Utilities
|
|
||||||
Requires: PROPERTIES
|
|
||||||
Name: State machine
|
|
||||||
|
|
||||||
Feature: GESTURES
|
|
||||||
Description: Provides a framework for gestures.
|
|
||||||
Section: Utilities
|
|
||||||
Requires:
|
|
||||||
Name: Gesture
|
|
||||||
|
|
||||||
# D-Bus
|
|
||||||
|
|
||||||
Feature: DBUS
|
|
||||||
Description: Provides classes for D-Bus.
|
|
||||||
Section: D-Bus
|
|
||||||
Requires: PROPERTIES XMLSTREAMREADER
|
|
||||||
Name: Qt D-Bus module
|
|
||||||
|
|
||||||
# XML Patterns
|
|
||||||
|
|
||||||
Feature: XMLSCHEMA
|
|
||||||
Description: Provides XML schema validation.
|
|
||||||
Section: Xml Patterns
|
|
||||||
Requires:
|
|
||||||
Name: XML Schema APIs
|
|
@ -472,6 +472,8 @@ public:
|
|||||||
|
|
||||||
WA_AlwaysStackOnTop = 128,
|
WA_AlwaysStackOnTop = 128,
|
||||||
|
|
||||||
|
WA_TabletTracking = 129,
|
||||||
|
|
||||||
// Add new attributes before this line
|
// Add new attributes before this line
|
||||||
WA_AttributeCount
|
WA_AttributeCount
|
||||||
};
|
};
|
||||||
|
@ -1139,6 +1139,9 @@
|
|||||||
\value WA_StyleSheet Indicates that the widget is styled using a
|
\value WA_StyleSheet Indicates that the widget is styled using a
|
||||||
\l{Qt Style Sheets}{style sheet}.
|
\l{Qt Style Sheets}{style sheet}.
|
||||||
|
|
||||||
|
\value WA_TabletTracking Indicates that the widget has tablet
|
||||||
|
tracking enabled. See QWidget::tabletTracking.
|
||||||
|
|
||||||
\value WA_TranslucentBackground Indicates that the widget should have a
|
\value WA_TranslucentBackground Indicates that the widget should have a
|
||||||
translucent background, i.e., any non-opaque regions of the widgets will be
|
translucent background, i.e., any non-opaque regions of the widgets will be
|
||||||
translucent because the widget will have an alpha channel. Setting this
|
translucent because the widget will have an alpha channel. Setting this
|
||||||
|
@ -557,45 +557,75 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
|
|||||||
return data.hasFlags(what);
|
return data.hasFlags(what);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: if \a shouldMkdirFirst is false, we assume the caller did try to mkdir
|
||||||
|
// before calling this function.
|
||||||
|
static bool createDirectoryWithParents(const QByteArray &nativeName, bool shouldMkdirFirst = true)
|
||||||
|
{
|
||||||
|
// helper function to check if a given path is a directory, since mkdir can
|
||||||
|
// fail if the dir already exists (it may have been created by another
|
||||||
|
// thread or another process)
|
||||||
|
const auto isDir = [](const QByteArray &nativeName) {
|
||||||
|
QT_STATBUF st;
|
||||||
|
return QT_STAT(nativeName.constData(), &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (shouldMkdirFirst && QT_MKDIR(nativeName, 0777) == 0)
|
||||||
|
return true;
|
||||||
|
if (errno == EEXIST)
|
||||||
|
return isDir(nativeName);
|
||||||
|
if (errno != ENOENT)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// mkdir failed because the parent dir doesn't exist, so try to create it
|
||||||
|
int slash = nativeName.lastIndexOf('/');
|
||||||
|
if (slash < 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QByteArray parentNativeName = nativeName.left(slash);
|
||||||
|
if (!createDirectoryWithParents(parentNativeName))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// try again
|
||||||
|
if (QT_MKDIR(nativeName, 0777) == 0)
|
||||||
|
return true;
|
||||||
|
return errno == EEXIST && isDir(nativeName);
|
||||||
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool createParents)
|
bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool createParents)
|
||||||
{
|
{
|
||||||
QString dirName = entry.filePath();
|
QString dirName = entry.filePath();
|
||||||
if (createParents) {
|
|
||||||
dirName = QDir::cleanPath(dirName);
|
// Darwin doesn't support trailing /'s, so remove for everyone
|
||||||
for (int oldslash = -1, slash=0; slash != -1; oldslash = slash) {
|
while (dirName.size() > 1 && dirName.endsWith(QLatin1Char('/')))
|
||||||
slash = dirName.indexOf(QDir::separator(), oldslash+1);
|
|
||||||
if (slash == -1) {
|
|
||||||
if (oldslash == dirName.length())
|
|
||||||
break;
|
|
||||||
slash = dirName.length();
|
|
||||||
}
|
|
||||||
if (slash) {
|
|
||||||
const QByteArray chunk = QFile::encodeName(dirName.left(slash));
|
|
||||||
if (QT_MKDIR(chunk.constData(), 0777) != 0) {
|
|
||||||
if (errno == EEXIST
|
|
||||||
#if defined(Q_OS_QNX)
|
|
||||||
// On QNX the QNet (VFS paths of other hosts mounted under a directory
|
|
||||||
// such as /net) mountpoint returns ENOENT, despite existing. stat()
|
|
||||||
// on the QNet mountpoint returns successfully and reports S_IFDIR.
|
|
||||||
|| errno == ENOENT
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
QT_STATBUF st;
|
|
||||||
if (QT_STAT(chunk.constData(), &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#if defined(Q_OS_DARWIN) // Mac X doesn't support trailing /'s
|
|
||||||
if (dirName.endsWith(QLatin1Char('/')))
|
|
||||||
dirName.chop(1);
|
dirName.chop(1);
|
||||||
#endif
|
|
||||||
return (QT_MKDIR(QFile::encodeName(dirName).constData(), 0777) == 0);
|
// try to mkdir this directory
|
||||||
|
QByteArray nativeName = QFile::encodeName(dirName);
|
||||||
|
if (QT_MKDIR(nativeName, 0777) == 0)
|
||||||
|
return true;
|
||||||
|
if (!createParents)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// we need the cleaned path in order to create the parents
|
||||||
|
// and we save errno just in case encodeName needs to load codecs
|
||||||
|
int savedErrno = errno;
|
||||||
|
bool pathChanged;
|
||||||
|
{
|
||||||
|
QString cleanName = QDir::cleanPath(dirName);
|
||||||
|
|
||||||
|
// Check if the cleaned name is the same or not. If we were given a
|
||||||
|
// path with resolvable "../" sections, cleanPath will remove them, but
|
||||||
|
// this may change the target dir if one of those segments was a
|
||||||
|
// symlink. This operation depends on cleanPath's optimization of
|
||||||
|
// returning the original string if it didn't modify anything.
|
||||||
|
pathChanged = !dirName.isSharedWith(cleanName);
|
||||||
|
if (pathChanged)
|
||||||
|
nativeName = QFile::encodeName(cleanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
errno = savedErrno;
|
||||||
|
return createDirectoryWithParents(nativeName, pathChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
|
@ -276,10 +276,11 @@ static QVector<QLoggingRule> loadRulesFromFile(const QString &filePath)
|
|||||||
*/
|
*/
|
||||||
void QLoggingRegistry::init()
|
void QLoggingRegistry::init()
|
||||||
{
|
{
|
||||||
|
QVector<QLoggingRule> er, qr, cr;
|
||||||
// get rules from environment
|
// get rules from environment
|
||||||
const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF");
|
const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF");
|
||||||
if (!rulesFilePath.isEmpty())
|
if (!rulesFilePath.isEmpty())
|
||||||
envRules = loadRulesFromFile(QFile::decodeName(rulesFilePath));
|
er = loadRulesFromFile(QFile::decodeName(rulesFilePath));
|
||||||
|
|
||||||
const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES").replace(';', '\n');
|
const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES").replace(';', '\n');
|
||||||
if (!rulesSrc.isEmpty()) {
|
if (!rulesSrc.isEmpty()) {
|
||||||
@ -287,7 +288,7 @@ void QLoggingRegistry::init()
|
|||||||
QLoggingSettingsParser parser;
|
QLoggingSettingsParser parser;
|
||||||
parser.setSection(QStringLiteral("Rules"));
|
parser.setSection(QStringLiteral("Rules"));
|
||||||
parser.setContent(stream);
|
parser.setContent(stream);
|
||||||
envRules += parser.rules();
|
er += parser.rules();
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString configFileName = QStringLiteral("qtlogging.ini");
|
const QString configFileName = QStringLiteral("qtlogging.ini");
|
||||||
@ -296,17 +297,22 @@ void QLoggingRegistry::init()
|
|||||||
// get rules from Qt data configuration path
|
// get rules from Qt data configuration path
|
||||||
const QString qtConfigPath
|
const QString qtConfigPath
|
||||||
= QDir(QLibraryInfo::location(QLibraryInfo::DataPath)).absoluteFilePath(configFileName);
|
= QDir(QLibraryInfo::location(QLibraryInfo::DataPath)).absoluteFilePath(configFileName);
|
||||||
qtConfigRules = loadRulesFromFile(qtConfigPath);
|
qr = loadRulesFromFile(qtConfigPath);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// get rules from user's/system configuration
|
// get rules from user's/system configuration
|
||||||
const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation,
|
const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation,
|
||||||
QString::fromLatin1("QtProject/") + configFileName);
|
QString::fromLatin1("QtProject/") + configFileName);
|
||||||
if (!envPath.isEmpty())
|
if (!envPath.isEmpty())
|
||||||
configRules = loadRulesFromFile(envPath);
|
cr = loadRulesFromFile(envPath);
|
||||||
|
|
||||||
|
const QMutexLocker locker(®istryMutex);
|
||||||
|
|
||||||
|
envRules = std::move(er);
|
||||||
|
qtConfigRules = std::move(qr);
|
||||||
|
configRules = std::move(cr);
|
||||||
|
|
||||||
if (!envRules.isEmpty() || !qtConfigRules.isEmpty() || !configRules.isEmpty()) {
|
if (!envRules.isEmpty() || !qtConfigRules.isEmpty() || !configRules.isEmpty()) {
|
||||||
QMutexLocker locker(®istryMutex);
|
|
||||||
updateRules();
|
updateRules();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -347,11 +353,11 @@ void QLoggingRegistry::setApiRules(const QString &content)
|
|||||||
parser.setSection(QStringLiteral("Rules"));
|
parser.setSection(QStringLiteral("Rules"));
|
||||||
parser.setContent(content);
|
parser.setContent(content);
|
||||||
|
|
||||||
QMutexLocker locker(®istryMutex);
|
|
||||||
|
|
||||||
if (qtLoggingDebug())
|
if (qtLoggingDebug())
|
||||||
debugMsg("Loading logging rules set by QLoggingCategory::setFilterRules ...");
|
debugMsg("Loading logging rules set by QLoggingCategory::setFilterRules ...");
|
||||||
|
|
||||||
|
const QMutexLocker locker(®istryMutex);
|
||||||
|
|
||||||
apiRules = parser.rules();
|
apiRules = parser.rules();
|
||||||
|
|
||||||
updateRules();
|
updateRules();
|
||||||
@ -405,6 +411,8 @@ QLoggingRegistry *QLoggingRegistry::instance()
|
|||||||
/*!
|
/*!
|
||||||
\internal
|
\internal
|
||||||
Updates category settings according to rules.
|
Updates category settings according to rules.
|
||||||
|
|
||||||
|
As a category filter, it is run with registryMutex held.
|
||||||
*/
|
*/
|
||||||
void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
|
void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
|
||||||
{
|
{
|
||||||
|
@ -129,6 +129,7 @@ private:
|
|||||||
|
|
||||||
QMutex registryMutex;
|
QMutex registryMutex;
|
||||||
|
|
||||||
|
// protected by mutex:
|
||||||
QVector<QLoggingRule> qtConfigRules;
|
QVector<QLoggingRule> qtConfigRules;
|
||||||
QVector<QLoggingRule> configRules;
|
QVector<QLoggingRule> configRules;
|
||||||
QVector<QLoggingRule> envRules;
|
QVector<QLoggingRule> envRules;
|
||||||
|
@ -844,7 +844,8 @@ static bool startDetachedUacPrompt(const QString &programIn, const QStringList &
|
|||||||
SHELLEXECUTEINFOW shellExecuteExInfo;
|
SHELLEXECUTEINFOW shellExecuteExInfo;
|
||||||
memset(&shellExecuteExInfo, 0, sizeof(SHELLEXECUTEINFOW));
|
memset(&shellExecuteExInfo, 0, sizeof(SHELLEXECUTEINFOW));
|
||||||
shellExecuteExInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
|
shellExecuteExInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
|
||||||
shellExecuteExInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_UNICODE | SEE_MASK_FLAG_NO_UI;
|
shellExecuteExInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_UNICODE | SEE_MASK_FLAG_NO_UI | SEE_MASK_CLASSNAME;
|
||||||
|
shellExecuteExInfo.lpClass = L"exefile";
|
||||||
shellExecuteExInfo.lpVerb = L"runas";
|
shellExecuteExInfo.lpVerb = L"runas";
|
||||||
const QString program = QDir::toNativeSeparators(programIn);
|
const QString program = QDir::toNativeSeparators(programIn);
|
||||||
shellExecuteExInfo.lpFile = reinterpret_cast<LPCWSTR>(program.utf16());
|
shellExecuteExInfo.lpFile = reinterpret_cast<LPCWSTR>(program.utf16());
|
||||||
|
@ -4169,10 +4169,10 @@ QUrl QUrl::fromUserInput(const QString &userInput, const QString &workingDirecto
|
|||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
QUrl url = QUrl(trimmedString, QUrl::TolerantMode);
|
QUrl url = QUrl(userInput, QUrl::TolerantMode);
|
||||||
// Check both QUrl::isRelative (to detect full URLs) and QDir::isAbsolutePath (since on Windows drive letters can be interpreted as schemes)
|
// Check both QUrl::isRelative (to detect full URLs) and QDir::isAbsolutePath (since on Windows drive letters can be interpreted as schemes)
|
||||||
if (url.isRelative() && !QDir::isAbsolutePath(trimmedString)) {
|
if (url.isRelative() && !QDir::isAbsolutePath(userInput)) {
|
||||||
QFileInfo fileInfo(QDir(workingDirectory), trimmedString);
|
QFileInfo fileInfo(QDir(workingDirectory), userInput);
|
||||||
if ((options & AssumeLocalFile) || fileInfo.exists())
|
if ((options & AssumeLocalFile) || fileInfo.exists())
|
||||||
return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
|
return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
|
||||||
}
|
}
|
||||||
|
@ -284,6 +284,8 @@ public:
|
|||||||
|
|
||||||
Pointer = 218, // QQuickPointerEvent; ### Qt 6: QPointerEvent
|
Pointer = 218, // QQuickPointerEvent; ### Qt 6: QPointerEvent
|
||||||
|
|
||||||
|
TabletTrackingChange = 219, // tablet tracking state has changed
|
||||||
|
|
||||||
// 512 reserved for Qt Jambi's MetaCall event
|
// 512 reserved for Qt Jambi's MetaCall event
|
||||||
// 513 reserved for Qt Jambi's DeleteOnMainThread event
|
// 513 reserved for Qt Jambi's DeleteOnMainThread event
|
||||||
|
|
||||||
|
@ -44,7 +44,6 @@
|
|||||||
#include <QtCore/qthread.h>
|
#include <QtCore/qthread.h>
|
||||||
#include <QtCore/private/qcoreapplication_p.h>
|
#include <QtCore/private/qcoreapplication_p.h>
|
||||||
#include <QtCore/private/qcore_unix_p.h>
|
#include <QtCore/private/qcore_unix_p.h>
|
||||||
#include <QtCore/private/qcore_mac_p.h>
|
|
||||||
#include <QtCore/private/qthread_p.h>
|
#include <QtCore/private/qthread_p.h>
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
@ -59,11 +58,13 @@
|
|||||||
|
|
||||||
QT_USE_NAMESPACE
|
QT_USE_NAMESPACE
|
||||||
|
|
||||||
@interface RunLoopModeTracker : NSObject {
|
@interface QT_MANGLE_NAMESPACE(RunLoopModeTracker) : NSObject {
|
||||||
QStack<CFStringRef> m_runLoopModes;
|
QStack<CFStringRef> m_runLoopModes;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
QT_NAMESPACE_ALIAS_OBJC_CLASS(RunLoopModeTracker);
|
||||||
|
|
||||||
@implementation RunLoopModeTracker
|
@implementation RunLoopModeTracker
|
||||||
|
|
||||||
- (id) init
|
- (id) init
|
||||||
|
@ -90,14 +90,11 @@
|
|||||||
#include <QtCore/qabstracteventdispatcher.h>
|
#include <QtCore/qabstracteventdispatcher.h>
|
||||||
#include <QtCore/private/qtimerinfo_unix_p.h>
|
#include <QtCore/private/qtimerinfo_unix_p.h>
|
||||||
#include <QtCore/private/qcfsocketnotifier_p.h>
|
#include <QtCore/private/qcfsocketnotifier_p.h>
|
||||||
|
#include <QtCore/private/qcore_mac_p.h>
|
||||||
#include <QtCore/qdebug.h>
|
#include <QtCore/qdebug.h>
|
||||||
#include <CoreFoundation/CoreFoundation.h>
|
#include <CoreFoundation/CoreFoundation.h>
|
||||||
|
|
||||||
#ifdef __OBJC__
|
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(RunLoopModeTracker));
|
||||||
@class RunLoopModeTracker;
|
|
||||||
#else
|
|
||||||
typedef struct objc_object RunLoopModeTracker;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -253,7 +250,7 @@ private:
|
|||||||
RunLoopSource<> m_postedEventsRunLoopSource;
|
RunLoopSource<> m_postedEventsRunLoopSource;
|
||||||
RunLoopObserver<> m_runLoopActivityObserver;
|
RunLoopObserver<> m_runLoopActivityObserver;
|
||||||
|
|
||||||
RunLoopModeTracker *m_runLoopModeTracker;
|
QT_MANGLE_NAMESPACE(RunLoopModeTracker) *m_runLoopModeTracker;
|
||||||
|
|
||||||
QTimerInfoList m_timerInfoList;
|
QTimerInfoList m_timerInfoList;
|
||||||
CFRunLoopTimerRef m_runLoopTimer;
|
CFRunLoopTimerRef m_runLoopTimer;
|
||||||
|
@ -296,12 +296,15 @@ QMimeGlobMatchResult QMimeBinaryProvider::findByFileName(const QString &fileName
|
|||||||
const QString lowerFileName = fileName.toLower();
|
const QString lowerFileName = fileName.toLower();
|
||||||
// TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
|
// TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
|
||||||
for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
|
for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
|
||||||
|
// Check literals (e.g. "Makefile")
|
||||||
matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName);
|
matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName);
|
||||||
|
// Check complex globs (e.g. "callgrind.out[0-9]*")
|
||||||
matchGlobList(result, cacheFile, cacheFile->getUint32(PosGlobListOffset), fileName);
|
matchGlobList(result, cacheFile, cacheFile->getUint32(PosGlobListOffset), fileName);
|
||||||
|
// Check the very common *.txt cases with the suffix tree
|
||||||
const int reverseSuffixTreeOffset = cacheFile->getUint32(PosReverseSuffixTreeOffset);
|
const int reverseSuffixTreeOffset = cacheFile->getUint32(PosReverseSuffixTreeOffset);
|
||||||
const int numRoots = cacheFile->getUint32(reverseSuffixTreeOffset);
|
const int numRoots = cacheFile->getUint32(reverseSuffixTreeOffset);
|
||||||
const int firstRootOffset = cacheFile->getUint32(reverseSuffixTreeOffset + 4);
|
const int firstRootOffset = cacheFile->getUint32(reverseSuffixTreeOffset + 4);
|
||||||
matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, lowerFileName, fileName.length() - 1, false);
|
matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false);
|
||||||
if (result.m_matchingMimeTypes.isEmpty())
|
if (result.m_matchingMimeTypes.isEmpty())
|
||||||
matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
|
matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
|
||||||
}
|
}
|
||||||
|
@ -57,11 +57,22 @@
|
|||||||
#include "QtCore/qobject.h"
|
#include "QtCore/qobject.h"
|
||||||
#include "QtCore/qstringlist.h"
|
#include "QtCore/qstringlist.h"
|
||||||
#include "QtCore/qjsonobject.h"
|
#include "QtCore/qjsonobject.h"
|
||||||
|
#include "QtCore/qjsondocument.h"
|
||||||
#include "QtCore/qmap.h"
|
#include "QtCore/qmap.h"
|
||||||
|
#include "QtCore/qendian.h"
|
||||||
#include "private/qlibrary_p.h"
|
#include "private/qlibrary_p.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
inline QJsonDocument qJsonFromRawLibraryMetaData(const char *raw)
|
||||||
|
{
|
||||||
|
raw += strlen("QTMETADATA ");
|
||||||
|
// the size of the embedded JSON object can be found 8 bytes into the data (see qjson_p.h),
|
||||||
|
// but doesn't include the size of the header (8 bytes)
|
||||||
|
QByteArray json(raw, qFromLittleEndian<uint>(*(const uint *)(raw + 8)) + 8);
|
||||||
|
return QJsonDocument::fromBinaryData(json);
|
||||||
|
}
|
||||||
|
|
||||||
class QFactoryLoaderPrivate;
|
class QFactoryLoaderPrivate;
|
||||||
class Q_CORE_EXPORT QFactoryLoader : public QObject
|
class Q_CORE_EXPORT QFactoryLoader : public QObject
|
||||||
{
|
{
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#ifndef QT_NO_LIBRARY
|
#ifndef QT_NO_LIBRARY
|
||||||
|
|
||||||
|
#include "qfactoryloader_p.h"
|
||||||
#include "qlibrary_p.h"
|
#include "qlibrary_p.h"
|
||||||
#include <qstringlist.h>
|
#include <qstringlist.h>
|
||||||
#include <qfile.h>
|
#include <qfile.h>
|
||||||
|
@ -58,25 +58,12 @@
|
|||||||
#include "QtCore/qstringlist.h"
|
#include "QtCore/qstringlist.h"
|
||||||
#include "QtCore/qplugin.h"
|
#include "QtCore/qplugin.h"
|
||||||
#include "QtCore/qsharedpointer.h"
|
#include "QtCore/qsharedpointer.h"
|
||||||
#include "QtCore/qjsonobject.h"
|
|
||||||
#include "QtCore/qjsondocument.h"
|
|
||||||
#include "QtCore/qendian.h"
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
# include "QtCore/qt_windows.h"
|
# include "QtCore/qt_windows.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
// Needed also in case of QT_NO_LIBRARY, for static plugin loading.
|
|
||||||
inline QJsonDocument qJsonFromRawLibraryMetaData(const char *raw)
|
|
||||||
{
|
|
||||||
raw += strlen("QTMETADATA ");
|
|
||||||
// the size of the embedded JSON object can be found 8 bytes into the data (see qjson_p.h),
|
|
||||||
// but doesn't include the size of the header (8 bytes)
|
|
||||||
QByteArray json(raw, qFromLittleEndian<uint>(*(const uint *)(raw + 8)) + 8);
|
|
||||||
return QJsonDocument::fromBinaryData(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_LIBRARY
|
#ifndef QT_NO_LIBRARY
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#include "qcoreapplication.h"
|
#include "qcoreapplication.h"
|
||||||
#include "qpluginloader.h"
|
#include "qpluginloader.h"
|
||||||
#include <qfileinfo.h>
|
#include <qfileinfo.h>
|
||||||
#include "qlibrary_p.h"
|
#include "qfactoryloader_p.h"
|
||||||
#include "qdebug.h"
|
#include "qdebug.h"
|
||||||
#include "qdir.h"
|
#include "qdir.h"
|
||||||
|
|
||||||
|
@ -392,13 +392,13 @@ bool QReadWriteLock::tryLockForWrite(int timeout)
|
|||||||
*/
|
*/
|
||||||
void QReadWriteLock::unlock()
|
void QReadWriteLock::unlock()
|
||||||
{
|
{
|
||||||
QReadWriteLockPrivate *d = d_ptr.load();
|
QReadWriteLockPrivate *d = d_ptr.loadAcquire();
|
||||||
while (true) {
|
while (true) {
|
||||||
Q_ASSERT_X(d, "QReadWriteLock::unlock()", "Cannot unlock an unlocked lock");
|
Q_ASSERT_X(d, "QReadWriteLock::unlock()", "Cannot unlock an unlocked lock");
|
||||||
|
|
||||||
// Fast case: no contention: (no waiters, no other readers)
|
// Fast case: no contention: (no waiters, no other readers)
|
||||||
if (quintptr(d) <= 2) { // 1 or 2 (StateLockedForRead or StateLockedForWrite)
|
if (quintptr(d) <= 2) { // 1 or 2 (StateLockedForRead or StateLockedForWrite)
|
||||||
if (!d_ptr.testAndSetRelease(d, nullptr, d))
|
if (!d_ptr.testAndSetOrdered(d, nullptr, d))
|
||||||
continue;
|
continue;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -407,7 +407,7 @@ void QReadWriteLock::unlock()
|
|||||||
Q_ASSERT(quintptr(d) > (1U<<4)); //otherwise that would be the fast case
|
Q_ASSERT(quintptr(d) > (1U<<4)); //otherwise that would be the fast case
|
||||||
// Just decrease the reader's count.
|
// Just decrease the reader's count.
|
||||||
auto val = reinterpret_cast<QReadWriteLockPrivate *>(quintptr(d) - (1U<<4));
|
auto val = reinterpret_cast<QReadWriteLockPrivate *>(quintptr(d) - (1U<<4));
|
||||||
if (!d_ptr.testAndSetRelease(d, val, d))
|
if (!d_ptr.testAndSetOrdered(d, val, d))
|
||||||
continue;
|
continue;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -140,8 +140,6 @@ struct QByteArrayDataPtr
|
|||||||
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(size, sizeof(QByteArrayData)) \
|
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(size, sizeof(QByteArrayData)) \
|
||||||
/**/
|
/**/
|
||||||
|
|
||||||
#if defined(Q_COMPILER_LAMBDA)
|
|
||||||
|
|
||||||
# define QByteArrayLiteral(str) \
|
# define QByteArrayLiteral(str) \
|
||||||
([]() -> QByteArray { \
|
([]() -> QByteArray { \
|
||||||
enum { Size = sizeof(str) - 1 }; \
|
enum { Size = sizeof(str) - 1 }; \
|
||||||
@ -154,14 +152,6 @@ struct QByteArrayDataPtr
|
|||||||
}()) \
|
}()) \
|
||||||
/**/
|
/**/
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef QByteArrayLiteral
|
|
||||||
// no lambdas, not GCC, just return a temporary QByteArray
|
|
||||||
|
|
||||||
# define QByteArrayLiteral(str) QByteArray(str, sizeof(str) - 1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class Q_CORE_EXPORT QByteArray
|
class Q_CORE_EXPORT QByteArray
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -125,7 +125,7 @@ private:
|
|||||||
friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QEasingCurve &);
|
friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QEasingCurve &);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
Q_DECLARE_TYPEINFO(QEasingCurve, Q_MOVABLE_TYPE);
|
Q_DECLARE_SHARED(QEasingCurve)
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QEasingCurve &item);
|
Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QEasingCurve &item);
|
||||||
|
@ -237,7 +237,7 @@ inline int QFreeList<T, ConstantsType>::next()
|
|||||||
int id, newid, at;
|
int id, newid, at;
|
||||||
ElementType *v;
|
ElementType *v;
|
||||||
do {
|
do {
|
||||||
id = _next.load();
|
id = _next.loadAcquire();
|
||||||
|
|
||||||
at = id & ConstantsType::IndexMask;
|
at = id & ConstantsType::IndexMask;
|
||||||
const int block = blockfor(at);
|
const int block = blockfor(at);
|
||||||
@ -254,7 +254,7 @@ inline int QFreeList<T, ConstantsType>::next()
|
|||||||
}
|
}
|
||||||
|
|
||||||
newid = v[at].next.load() | (id & ~ConstantsType::IndexMask);
|
newid = v[at].next.load() | (id & ~ConstantsType::IndexMask);
|
||||||
} while (!_next.testAndSetRelaxed(id, newid));
|
} while (!_next.testAndSetRelease(id, newid));
|
||||||
// qDebug("QFreeList::next(): returning %d (_next now %d, serial %d)",
|
// qDebug("QFreeList::next(): returning %d (_next now %d, serial %d)",
|
||||||
// id & ConstantsType::IndexMask,
|
// id & ConstantsType::IndexMask,
|
||||||
// newid & ConstantsType::IndexMask,
|
// newid & ConstantsType::IndexMask,
|
||||||
|
@ -594,7 +594,6 @@ static QLocalePrivate *c_private()
|
|||||||
*/
|
*/
|
||||||
QSystemLocale::QSystemLocale()
|
QSystemLocale::QSystemLocale()
|
||||||
{
|
{
|
||||||
delete _systemLocale;
|
|
||||||
_systemLocale = this;
|
_systemLocale = this;
|
||||||
|
|
||||||
if (system_data)
|
if (system_data)
|
||||||
|
@ -1323,8 +1323,8 @@ QDebug operator<<(QDebug dbg, const QRect &r)
|
|||||||
rendering.
|
rendering.
|
||||||
|
|
||||||
A QRectF can be constructed with a set of left, top, width and
|
A QRectF can be constructed with a set of left, top, width and
|
||||||
height integers, or from a QPoint and a QSize. The following code
|
height coordinates, or from a QPointF and a QSizeF. The following
|
||||||
creates two identical rectangles.
|
code creates two identical rectangles.
|
||||||
|
|
||||||
\snippet code/src_corelib_tools_qrect.cpp 1
|
\snippet code/src_corelib_tools_qrect.cpp 1
|
||||||
|
|
||||||
@ -1344,7 +1344,7 @@ QDebug operator<<(QDebug dbg, const QRect &r)
|
|||||||
translated copy of this rectangle.
|
translated copy of this rectangle.
|
||||||
|
|
||||||
The size() function returns the rectange's dimensions as a
|
The size() function returns the rectange's dimensions as a
|
||||||
QSize. The dimensions can also be retrieved separately using the
|
QSizeF. The dimensions can also be retrieved separately using the
|
||||||
width() and height() functions. To manipulate the dimensions use
|
width() and height() functions. To manipulate the dimensions use
|
||||||
the setSize(), setWidth() or setHeight() functions. Alternatively,
|
the setSize(), setWidth() or setHeight() functions. Alternatively,
|
||||||
the size can be changed by applying either of the functions
|
the size can be changed by applying either of the functions
|
||||||
|
@ -674,9 +674,9 @@ bool QTimeZone::isDaylightTime(const QDateTime &atDateTime) const
|
|||||||
QTimeZone::OffsetData QTimeZone::offsetData(const QDateTime &forDateTime) const
|
QTimeZone::OffsetData QTimeZone::offsetData(const QDateTime &forDateTime) const
|
||||||
{
|
{
|
||||||
if (hasTransitions())
|
if (hasTransitions())
|
||||||
return d->toOffsetData(d->data(forDateTime.toMSecsSinceEpoch()));
|
return QTimeZonePrivate::toOffsetData(d->data(forDateTime.toMSecsSinceEpoch()));
|
||||||
else
|
else
|
||||||
return d->invalidOffsetData();
|
return QTimeZonePrivate::invalidOffsetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -712,9 +712,9 @@ bool QTimeZone::hasTransitions() const
|
|||||||
QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime) const
|
QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime) const
|
||||||
{
|
{
|
||||||
if (hasTransitions())
|
if (hasTransitions())
|
||||||
return d->toOffsetData(d->nextTransition(afterDateTime.toMSecsSinceEpoch()));
|
return QTimeZonePrivate::toOffsetData(d->nextTransition(afterDateTime.toMSecsSinceEpoch()));
|
||||||
else
|
else
|
||||||
return d->invalidOffsetData();
|
return QTimeZonePrivate::invalidOffsetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -733,9 +733,9 @@ QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime)
|
|||||||
QTimeZone::OffsetData QTimeZone::previousTransition(const QDateTime &beforeDateTime) const
|
QTimeZone::OffsetData QTimeZone::previousTransition(const QDateTime &beforeDateTime) const
|
||||||
{
|
{
|
||||||
if (hasTransitions())
|
if (hasTransitions())
|
||||||
return d->toOffsetData(d->previousTransition(beforeDateTime.toMSecsSinceEpoch()));
|
return QTimeZonePrivate::toOffsetData(d->previousTransition(beforeDateTime.toMSecsSinceEpoch()));
|
||||||
else
|
else
|
||||||
return d->invalidOffsetData();
|
return QTimeZonePrivate::invalidOffsetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -755,7 +755,7 @@ QTimeZone::OffsetDataList QTimeZone::transitions(const QDateTime &fromDateTime,
|
|||||||
toDateTime.toMSecsSinceEpoch());
|
toDateTime.toMSecsSinceEpoch());
|
||||||
list.reserve(plist.count());
|
list.reserve(plist.count());
|
||||||
for (const QTimeZonePrivate::Data &pdata : plist)
|
for (const QTimeZonePrivate::Data &pdata : plist)
|
||||||
list.append(d->toOffsetData(pdata));
|
list.append(QTimeZonePrivate::toOffsetData(pdata));
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ Q_FORWARD_DECLARE_OBJC_CLASS(NSTimeZone);
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class Q_CORE_EXPORT QTimeZonePrivate : public QSharedData
|
class Q_AUTOTEST_EXPORT QTimeZonePrivate : public QSharedData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//Version of QTimeZone::OffsetData struct using msecs for efficiency
|
//Version of QTimeZone::OffsetData struct using msecs for efficiency
|
||||||
|
@ -146,8 +146,16 @@ public:
|
|||||||
T value(int i, const T &defaultValue) const;
|
T value(int i, const T &defaultValue) const;
|
||||||
|
|
||||||
inline void append(const T &t) {
|
inline void append(const T &t) {
|
||||||
if (s == a) // i.e. s != 0
|
if (s == a) { // i.e. s != 0
|
||||||
|
T copy(t);
|
||||||
realloc(s, s<<1);
|
realloc(s, s<<1);
|
||||||
|
const int idx = s++;
|
||||||
|
if (QTypeInfo<T>::isComplex) {
|
||||||
|
new (ptr + idx) T(std::move(copy));
|
||||||
|
} else {
|
||||||
|
ptr[idx] = std::move(copy);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
const int idx = s++;
|
const int idx = s++;
|
||||||
if (QTypeInfo<T>::isComplex) {
|
if (QTypeInfo<T>::isComplex) {
|
||||||
new (ptr + idx) T(t);
|
new (ptr + idx) T(t);
|
||||||
@ -155,6 +163,18 @@ public:
|
|||||||
ptr[idx] = t;
|
ptr[idx] = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void append(T &&t) {
|
||||||
|
if (s == a)
|
||||||
|
realloc(s, s << 1);
|
||||||
|
const int idx = s++;
|
||||||
|
if (QTypeInfo<T>::isComplex)
|
||||||
|
new (ptr + idx) T(std::move(t));
|
||||||
|
else
|
||||||
|
ptr[idx] = std::move(t);
|
||||||
|
}
|
||||||
|
|
||||||
void append(const T *buf, int size);
|
void append(const T *buf, int size);
|
||||||
inline QVarLengthArray<T, Prealloc> &operator<<(const T &t)
|
inline QVarLengthArray<T, Prealloc> &operator<<(const T &t)
|
||||||
{ append(t); return *this; }
|
{ append(t); return *this; }
|
||||||
@ -208,6 +228,7 @@ public:
|
|||||||
// STL compatibility:
|
// STL compatibility:
|
||||||
inline bool empty() const { return isEmpty(); }
|
inline bool empty() const { return isEmpty(); }
|
||||||
inline void push_back(const T &t) { append(t); }
|
inline void push_back(const T &t) { append(t); }
|
||||||
|
void push_back(T &&t) { append(std::move(t)); }
|
||||||
inline void pop_back() { removeLast(); }
|
inline void pop_back() { removeLast(); }
|
||||||
inline T &front() { return first(); }
|
inline T &front() { return first(); }
|
||||||
inline const T &front() const { return first(); }
|
inline const T &front() const { return first(); }
|
||||||
|
@ -302,6 +302,34 @@
|
|||||||
Provided for STL-compatibility.
|
Provided for STL-compatibility.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn void QVarLengthArray::append(T &&t)
|
||||||
|
\overload append
|
||||||
|
\since 5.9
|
||||||
|
|
||||||
|
\note Unlike the lvalue overload of append(), passing a reference to
|
||||||
|
an object that is already an element of \c *this leads to undefined
|
||||||
|
behavior:
|
||||||
|
|
||||||
|
\code
|
||||||
|
vla.append(std::move(vla[0])); // BUG: passing an object that is already in the container
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn void QVarLengthArray::push_back(T &&t)
|
||||||
|
\overload push_back
|
||||||
|
\since 5.9
|
||||||
|
|
||||||
|
\note Unlike the lvalue overload of push_back(), passing a reference to
|
||||||
|
an object that is already an element of \c *this leads to undefined
|
||||||
|
behavior:
|
||||||
|
|
||||||
|
\code
|
||||||
|
vla.push_back(std::move(vla[0])); // BUG: passing an object that is already in the container
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn inline void QVarLengthArray::removeLast()
|
\fn inline void QVarLengthArray::removeLast()
|
||||||
\since 4.5
|
\since 4.5
|
||||||
|
@ -161,9 +161,10 @@
|
|||||||
"test": "unix/libpng",
|
"test": "unix/libpng",
|
||||||
"sources": [
|
"sources": [
|
||||||
{ "type": "pkgConfig", "args": "libpng" },
|
{ "type": "pkgConfig", "args": "libpng" },
|
||||||
{ "libs": "-llibpng -lzdll", "condition": "config.msvc" },
|
{ "libs": "-llibpng", "condition": "config.msvc" },
|
||||||
{ "libs": "-lpng -lz", "condition": "!config.msvc" }
|
{ "libs": "-lpng", "condition": "!config.msvc" }
|
||||||
]
|
],
|
||||||
|
"use": "zlib"
|
||||||
},
|
},
|
||||||
"mirclient": {
|
"mirclient": {
|
||||||
"label": "Mir client libraries",
|
"label": "Mir client libraries",
|
||||||
@ -974,6 +975,7 @@
|
|||||||
"label": "QSystemTrayIcon",
|
"label": "QSystemTrayIcon",
|
||||||
"purpose": "Provides an icon for an application in the system tray.",
|
"purpose": "Provides an icon for an application in the system tray.",
|
||||||
"section": "Utilities",
|
"section": "Utilities",
|
||||||
|
"condition": "features.temporaryfile",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"accessibility": {
|
"accessibility": {
|
||||||
|
@ -190,32 +190,42 @@ enum _qt_BuiltInFormatType {
|
|||||||
_qt_NoFormat = -1
|
_qt_NoFormat = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if !defined(QT_NO_IMAGEFORMAT_PPM)
|
||||||
|
# define MAX_MT_SIZE 20
|
||||||
|
#elif !defined(QT_NO_IMAGEFORMAT_XBM) || !defined(QT_NO_IMAGEFORMAT_XPM)
|
||||||
|
# define MAX_MT_SIZE 10
|
||||||
|
#else
|
||||||
|
# define MAX_MT_SIZE 4
|
||||||
|
#endif
|
||||||
|
|
||||||
struct _qt_BuiltInFormatStruct
|
struct _qt_BuiltInFormatStruct
|
||||||
{
|
{
|
||||||
const char *extension;
|
char extension[4];
|
||||||
const char *mimeType;
|
char mimeType[MAX_MT_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#undef MAX_MT_SIZE
|
||||||
|
|
||||||
static const _qt_BuiltInFormatStruct _qt_BuiltInFormats[] = {
|
static const _qt_BuiltInFormatStruct _qt_BuiltInFormats[] = {
|
||||||
#ifndef QT_NO_IMAGEFORMAT_PNG
|
#ifndef QT_NO_IMAGEFORMAT_PNG
|
||||||
{"png", "image/png"},
|
{"png", "png"},
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_IMAGEFORMAT_BMP
|
#ifndef QT_NO_IMAGEFORMAT_BMP
|
||||||
{"bmp", "image/bmp"},
|
{"bmp", "bmp"},
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_IMAGEFORMAT_PPM
|
#ifndef QT_NO_IMAGEFORMAT_PPM
|
||||||
{"ppm", "image/x-portable-pixmap"},
|
{"ppm", "x-portable-pixmap"},
|
||||||
{"pgm", "image/x-portable-graymap"},
|
{"pgm", "x-portable-graymap"},
|
||||||
{"pbm", "image/x-portable-bitmap"},
|
{"pbm", "x-portable-bitmap"},
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_IMAGEFORMAT_XBM
|
#ifndef QT_NO_IMAGEFORMAT_XBM
|
||||||
{"xbm", "image/x-xbitmap"},
|
{"xbm", "x-xbitmap"},
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_IMAGEFORMAT_XPM
|
#ifndef QT_NO_IMAGEFORMAT_XPM
|
||||||
{"xpm", "image/x-xpixmap"},
|
{"xpm", "x-xpixmap"},
|
||||||
#endif
|
#endif
|
||||||
{"", ""}
|
|
||||||
};
|
};
|
||||||
|
Q_STATIC_ASSERT(_qt_NumFormats == sizeof _qt_BuiltInFormats / sizeof *_qt_BuiltInFormats);
|
||||||
|
|
||||||
static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
|
static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
|
||||||
const QByteArray &format,
|
const QByteArray &format,
|
||||||
@ -1604,8 +1614,8 @@ QList<QByteArray> QImageReader::supportedMimeTypes()
|
|||||||
{
|
{
|
||||||
QList<QByteArray> mimeTypes;
|
QList<QByteArray> mimeTypes;
|
||||||
mimeTypes.reserve(_qt_NumFormats);
|
mimeTypes.reserve(_qt_NumFormats);
|
||||||
for (int i = 0; i < _qt_NumFormats; ++i)
|
for (const auto &fmt : _qt_BuiltInFormats)
|
||||||
mimeTypes << _qt_BuiltInFormats[i].mimeType;
|
mimeTypes.append(QByteArrayLiteral("image/") + fmt.mimeType);
|
||||||
|
|
||||||
#ifndef QT_NO_IMAGEFORMATPLUGIN
|
#ifndef QT_NO_IMAGEFORMATPLUGIN
|
||||||
supportedImageHandlerMimeTypes(loader(), QImageIOPlugin::CanRead, &mimeTypes);
|
supportedImageHandlerMimeTypes(loader(), QImageIOPlugin::CanRead, &mimeTypes);
|
||||||
|
@ -1814,6 +1814,15 @@ void QWindowPrivate::destroy()
|
|||||||
|
|
||||||
q->setVisible(false);
|
q->setVisible(false);
|
||||||
|
|
||||||
|
// Let subclasses act, typically by doing graphics resource cleaup, when
|
||||||
|
// the window, to which graphics resource may be tied, is going away.
|
||||||
|
//
|
||||||
|
// NB! This is disfunctional when destroy() is invoked from the dtor since
|
||||||
|
// a reimplemented event() will not get called in the subclasses at that
|
||||||
|
// stage. However, the typical QWindow cleanup involves either close() or
|
||||||
|
// going through QWindowContainer, both of which will do an explicit, early
|
||||||
|
// destroy(), which is good here.
|
||||||
|
|
||||||
QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed);
|
QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed);
|
||||||
QGuiApplication::sendEvent(q, &e);
|
QGuiApplication::sendEvent(q, &e);
|
||||||
|
|
||||||
|
@ -532,7 +532,7 @@ GLuint QOpenGLEngineShaderManager::getUniformLocation(Uniform id)
|
|||||||
if (uniformLocations.isEmpty())
|
if (uniformLocations.isEmpty())
|
||||||
uniformLocations.fill(GLuint(-1), NumUniforms);
|
uniformLocations.fill(GLuint(-1), NumUniforms);
|
||||||
|
|
||||||
static const char *const uniformNames[] = {
|
const char uniformNames[][26] = {
|
||||||
"imageTexture",
|
"imageTexture",
|
||||||
"patternColor",
|
"patternColor",
|
||||||
"globalOpacity",
|
"globalOpacity",
|
||||||
|
@ -1006,7 +1006,7 @@ bool QBrush::operator==(const QBrush &b) const
|
|||||||
*/
|
*/
|
||||||
QDebug operator<<(QDebug dbg, const QBrush &b)
|
QDebug operator<<(QDebug dbg, const QBrush &b)
|
||||||
{
|
{
|
||||||
static const char *const BRUSH_STYLES[] = {
|
static const char BRUSH_STYLES[][24] = {
|
||||||
"NoBrush",
|
"NoBrush",
|
||||||
"SolidPattern",
|
"SolidPattern",
|
||||||
"Dense1Pattern",
|
"Dense1Pattern",
|
||||||
@ -1025,7 +1025,7 @@ QDebug operator<<(QDebug dbg, const QBrush &b)
|
|||||||
"LinearGradientPattern",
|
"LinearGradientPattern",
|
||||||
"RadialGradientPattern",
|
"RadialGradientPattern",
|
||||||
"ConicalGradientPattern",
|
"ConicalGradientPattern",
|
||||||
0, 0, 0, 0, 0, 0,
|
"", "", "", "", "", "",
|
||||||
"TexturePattern" // 24
|
"TexturePattern" // 24
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1118,16 +1118,16 @@ QDataStream & operator>>(QDataStream &s, QTransform &t)
|
|||||||
#ifndef QT_NO_DEBUG_STREAM
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
QDebug operator<<(QDebug dbg, const QTransform &m)
|
QDebug operator<<(QDebug dbg, const QTransform &m)
|
||||||
{
|
{
|
||||||
static const char *const typeStr[] =
|
static const char typeStr[][12] =
|
||||||
{
|
{
|
||||||
"TxNone",
|
"TxNone",
|
||||||
"TxTranslate",
|
"TxTranslate",
|
||||||
"TxScale",
|
"TxScale",
|
||||||
0,
|
"",
|
||||||
"TxRotate",
|
"TxRotate",
|
||||||
0, 0, 0,
|
"", "", "",
|
||||||
"TxShear",
|
"TxShear",
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
"", "", "", "", "", "", "",
|
||||||
"TxProject"
|
"TxProject"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ void QTextDocumentPrivate::clear()
|
|||||||
unreachableCharacterCount = 0;
|
unreachableCharacterCount = 0;
|
||||||
modifiedState = 0;
|
modifiedState = 0;
|
||||||
modified = false;
|
modified = false;
|
||||||
formats = QTextFormatCollection();
|
formats.clear();
|
||||||
int len = fragments.length();
|
int len = fragments.length();
|
||||||
fragments.clear();
|
fragments.clear();
|
||||||
blocks.clear();
|
blocks.clear();
|
||||||
|
@ -3371,24 +3371,17 @@ QTextTableCellFormat::QTextTableCellFormat(const QTextFormat &fmt)
|
|||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
QTextFormatCollection::QTextFormatCollection(const QTextFormatCollection &rhs)
|
|
||||||
{
|
|
||||||
formats = rhs.formats;
|
|
||||||
objFormats = rhs.objFormats;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTextFormatCollection &QTextFormatCollection::operator=(const QTextFormatCollection &rhs)
|
|
||||||
{
|
|
||||||
formats = rhs.formats;
|
|
||||||
objFormats = rhs.objFormats;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTextFormatCollection::~QTextFormatCollection()
|
QTextFormatCollection::~QTextFormatCollection()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QTextFormatCollection::clear()
|
||||||
|
{
|
||||||
|
formats.clear();
|
||||||
|
objFormats.clear();
|
||||||
|
hashes.clear();
|
||||||
|
}
|
||||||
|
|
||||||
int QTextFormatCollection::indexForFormat(const QTextFormat &format)
|
int QTextFormatCollection::indexForFormat(const QTextFormat &format)
|
||||||
{
|
{
|
||||||
uint hash = getHash(format.d, format.format_type);
|
uint hash = getHash(format.d, format.format_type);
|
||||||
|
@ -63,8 +63,7 @@ public:
|
|||||||
QTextFormatCollection() {}
|
QTextFormatCollection() {}
|
||||||
~QTextFormatCollection();
|
~QTextFormatCollection();
|
||||||
|
|
||||||
QTextFormatCollection(const QTextFormatCollection &rhs);
|
void clear();
|
||||||
QTextFormatCollection &operator=(const QTextFormatCollection &rhs);
|
|
||||||
|
|
||||||
inline QTextFormat objectFormat(int objectIndex) const
|
inline QTextFormat objectFormat(int objectIndex) const
|
||||||
{ return format(objectFormatIndex(objectIndex)); }
|
{ return format(objectFormatIndex(objectIndex)); }
|
||||||
@ -104,6 +103,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QFont defaultFnt;
|
QFont defaultFnt;
|
||||||
|
|
||||||
|
Q_DISABLE_COPY(QTextFormatCollection)
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -39,9 +39,9 @@
|
|||||||
|
|
||||||
#include "qhsts_p.h"
|
#include "qhsts_p.h"
|
||||||
|
|
||||||
#include "QtCore/qstringlist.h"
|
|
||||||
|
|
||||||
#include "QtCore/private/qipaddress_p.h"
|
#include "QtCore/private/qipaddress_p.h"
|
||||||
|
#include "QtCore/qvector.h"
|
||||||
|
#include "QtCore/qlist.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ void QHstsCache::updateFromHeaders(const QList<QPair<QByteArray, QByteArray>> &h
|
|||||||
updateKnownHost(url.host(), parser.expirationDate(), parser.includeSubDomains());
|
updateKnownHost(url.host(), parser.expirationDate(), parser.includeSubDomains());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QHstsCache::updateFromPolicies(const QList<QHstsPolicy> &policies)
|
void QHstsCache::updateFromPolicies(const QVector<QHstsPolicy> &policies)
|
||||||
{
|
{
|
||||||
for (const auto &policy : policies)
|
for (const auto &policy : policies)
|
||||||
updateKnownHost(policy.host(), policy.expiry(), policy.includesSubDomains());
|
updateKnownHost(policy.host(), policy.expiry(), policy.includesSubDomains());
|
||||||
@ -183,9 +183,13 @@ void QHstsCache::clear()
|
|||||||
knownHosts.clear();
|
knownHosts.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QHstsPolicy> QHstsCache::policies() const
|
QVector<QHstsPolicy> QHstsCache::policies() const
|
||||||
{
|
{
|
||||||
return knownHosts.values();
|
QVector<QHstsPolicy> values;
|
||||||
|
values.reserve(knownHosts.size());
|
||||||
|
for (const auto &host : knownHosts)
|
||||||
|
values << host;
|
||||||
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The parser is quite simple: 'nextToken' knowns exactly what kind of tokens
|
// The parser is quite simple: 'nextToken' knowns exactly what kind of tokens
|
||||||
|
@ -57,26 +57,28 @@
|
|||||||
#include <QtCore/qdatetime.h>
|
#include <QtCore/qdatetime.h>
|
||||||
#include <QtCore/qstring.h>
|
#include <QtCore/qstring.h>
|
||||||
#include <QtCore/qglobal.h>
|
#include <QtCore/qglobal.h>
|
||||||
#include <QtCore/qlist.h>
|
|
||||||
#include <QtCore/qpair.h>
|
#include <QtCore/qpair.h>
|
||||||
#include <QtCore/qurl.h>
|
#include <QtCore/qurl.h>
|
||||||
#include <QtCore/qmap.h>
|
#include <QtCore/qmap.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
template<typename T> class QList;
|
||||||
|
template <typename T> class QVector;
|
||||||
|
|
||||||
class Q_AUTOTEST_EXPORT QHstsCache
|
class Q_AUTOTEST_EXPORT QHstsCache
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void updateFromHeaders(const QList<QPair<QByteArray, QByteArray>> &headers,
|
void updateFromHeaders(const QList<QPair<QByteArray, QByteArray>> &headers,
|
||||||
const QUrl &url);
|
const QUrl &url);
|
||||||
void updateFromPolicies(const QList<QHstsPolicy> &hosts);
|
void updateFromPolicies(const QVector<QHstsPolicy> &hosts);
|
||||||
void updateKnownHost(const QUrl &url, const QDateTime &expires,
|
void updateKnownHost(const QUrl &url, const QDateTime &expires,
|
||||||
bool includeSubDomains);
|
bool includeSubDomains);
|
||||||
bool isKnownHost(const QUrl &url) const;
|
bool isKnownHost(const QUrl &url) const;
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
QList<QHstsPolicy> policies() const;
|
QVector<QHstsPolicy> policies() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -60,10 +60,10 @@ QT_BEGIN_NAMESPACE
|
|||||||
applies to subdomains, either in the constructor or by calling setExpiry(),
|
applies to subdomains, either in the constructor or by calling setExpiry(),
|
||||||
setHost() and setIncludesSubdomains().
|
setHost() and setIncludesSubdomains().
|
||||||
|
|
||||||
\sa QNetworkAccessManager::enableStrictTransportSecurity()
|
\sa QNetworkAccessManager::setStrictTransportSecurityEnabled()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class QHstsPolicyPrivate
|
class QHstsPolicyPrivate : public QSharedData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QUrl url;
|
QUrl url;
|
||||||
@ -77,6 +77,15 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns \c true if the two policies have the same host and expiration date
|
||||||
|
while agreeing on whether to include or exclude subdomains.
|
||||||
|
*/
|
||||||
|
bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs)
|
||||||
|
{
|
||||||
|
return *lhs.d == *rhs.d;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Constructs an invalid (expired) policy with empty host name and subdomains
|
Constructs an invalid (expired) policy with empty host name and subdomains
|
||||||
not included.
|
not included.
|
||||||
@ -121,17 +130,7 @@ QHstsPolicy::~QHstsPolicy()
|
|||||||
*/
|
*/
|
||||||
QHstsPolicy &QHstsPolicy::operator=(const QHstsPolicy &other)
|
QHstsPolicy &QHstsPolicy::operator=(const QHstsPolicy &other)
|
||||||
{
|
{
|
||||||
*d = *other.d;
|
d = other.d;
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Move-assignment operator.
|
|
||||||
*/
|
|
||||||
QHstsPolicy &QHstsPolicy::operator=(QHstsPolicy &&other) Q_DECL_NOTHROW
|
|
||||||
{
|
|
||||||
qSwap(d, other.d);
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,15 +194,6 @@ bool QHstsPolicy::includesSubDomains() const
|
|||||||
return d->includeSubDomains;
|
return d->includeSubDomains;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns \c true if the two policies have the same host and expiration date
|
|
||||||
while agreeing on whether to include or exclude subdomains.
|
|
||||||
*/
|
|
||||||
bool QHstsPolicy::operator==(const QHstsPolicy &other) const
|
|
||||||
{
|
|
||||||
return *d == *other.d;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return \c true if this policy has a valid expiration date and this date
|
Return \c true if this policy has a valid expiration date and this date
|
||||||
is greater than QDateTime::currentGetDateTimeUtc().
|
is greater than QDateTime::currentGetDateTimeUtc().
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
#include <QtNetwork/qtnetworkglobal.h>
|
#include <QtNetwork/qtnetworkglobal.h>
|
||||||
|
|
||||||
#include <QtCore/qscopedpointer.h>
|
#include <QtCore/qshareddata.h>
|
||||||
#include <QtCore/qurl.h>
|
#include <QtCore/qurl.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@ -55,13 +55,15 @@ class Q_NETWORK_EXPORT QHstsPolicy
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
QHstsPolicy();
|
QHstsPolicy();
|
||||||
QHstsPolicy(const QDateTime &expiry, bool includeSubDomains, const QString &host,
|
explicit QHstsPolicy(const QDateTime &expiry, bool includeSubDomains, const QString &host,
|
||||||
QUrl::ParsingMode mode = QUrl::DecodedMode);
|
QUrl::ParsingMode mode = QUrl::DecodedMode);
|
||||||
QHstsPolicy(const QHstsPolicy &rhs);
|
QHstsPolicy(const QHstsPolicy &rhs);
|
||||||
QHstsPolicy &operator=(const QHstsPolicy &rhs);
|
QHstsPolicy &operator=(const QHstsPolicy &rhs);
|
||||||
QHstsPolicy &operator=(QHstsPolicy &&rhs) Q_DECL_NOTHROW;
|
QHstsPolicy &operator=(QHstsPolicy &&other) Q_DECL_NOTHROW { swap(other); return *this; }
|
||||||
~QHstsPolicy();
|
~QHstsPolicy();
|
||||||
|
|
||||||
|
void swap(QHstsPolicy &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
|
||||||
|
|
||||||
void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode);
|
void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode);
|
||||||
QString host(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const;
|
QString host(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const;
|
||||||
void setExpiry(const QDateTime &expiry);
|
void setExpiry(const QDateTime &expiry);
|
||||||
@ -69,14 +71,25 @@ public:
|
|||||||
void setIncludesSubDomains(bool include);
|
void setIncludesSubDomains(bool include);
|
||||||
bool includesSubDomains() const;
|
bool includesSubDomains() const;
|
||||||
|
|
||||||
bool operator==(const QHstsPolicy &rhs) const;
|
|
||||||
bool isExpired() const;
|
bool isExpired() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
QScopedPointer<QHstsPolicyPrivate> d;
|
QSharedDataPointer<QHstsPolicyPrivate> d;
|
||||||
|
|
||||||
|
friend Q_NETWORK_EXPORT bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_SHARED(QHstsPolicy)
|
||||||
|
|
||||||
|
Q_NETWORK_EXPORT bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs);
|
||||||
|
|
||||||
|
inline bool operator!=(const QHstsPolicy &lhs, const QHstsPolicy &rhs)
|
||||||
|
{
|
||||||
|
return !(lhs == rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QHSTSPOLICY_H
|
#endif // QHSTSPOLICY_H
|
||||||
|
@ -550,15 +550,15 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke
|
|||||||
// Check redirect url protocol
|
// Check redirect url protocol
|
||||||
const QUrl priorUrl(reply->request().url());
|
const QUrl priorUrl(reply->request().url());
|
||||||
if (redirectUrl.scheme() == QLatin1String("http") || redirectUrl.scheme() == QLatin1String("https")) {
|
if (redirectUrl.scheme() == QLatin1String("http") || redirectUrl.scheme() == QLatin1String("https")) {
|
||||||
switch (reply->request().redirectsPolicy()) {
|
switch (reply->request().redirectPolicy()) {
|
||||||
case QNetworkRequest::NoLessSafeRedirectsPolicy:
|
case QNetworkRequest::NoLessSafeRedirectPolicy:
|
||||||
// Here we could handle https->http redirects as InsecureProtocolError.
|
// Here we could handle https->http redirects as InsecureProtocolError.
|
||||||
// However, if HSTS is enabled and redirectUrl.host() is a known STS
|
// However, if HSTS is enabled and redirectUrl.host() is a known STS
|
||||||
// host, then we'll replace its scheme and this won't downgrade protocol,
|
// host, then we'll replace its scheme and this won't downgrade protocol,
|
||||||
// after all. We cannot access QNAM's STS cache from here, so delegate
|
// after all. We cannot access QNAM's STS cache from here, so delegate
|
||||||
// this check to QNetworkReplyHttpImpl.
|
// this check to QNetworkReplyHttpImpl.
|
||||||
break;
|
break;
|
||||||
case QNetworkRequest::SameOriginRedirectsPolicy:
|
case QNetworkRequest::SameOriginRedirectPolicy:
|
||||||
if (priorUrl.host() != redirectUrl.host()
|
if (priorUrl.host() != redirectUrl.host()
|
||||||
|| priorUrl.scheme() != redirectUrl.scheme()
|
|| priorUrl.scheme() != redirectUrl.scheme()
|
||||||
|| priorUrl.port() != redirectUrl.port()) {
|
|| priorUrl.port() != redirectUrl.port()) {
|
||||||
@ -566,7 +566,7 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke
|
|||||||
return QUrl();
|
return QUrl();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QNetworkRequest::UserVerifiedRedirectsPolicy:
|
case QNetworkRequest::UserVerifiedRedirectPolicy:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Q_ASSERT(!"Unexpected redirect policy");
|
Q_ASSERT(!"Unexpected redirect policy");
|
||||||
|
@ -49,7 +49,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Oper
|
|||||||
: QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(0),
|
: QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(0),
|
||||||
autoDecompress(false), pipeliningAllowed(false), spdyAllowed(false), http2Allowed(false),
|
autoDecompress(false), pipeliningAllowed(false), spdyAllowed(false), http2Allowed(false),
|
||||||
withCredentials(true), preConnect(false), redirectCount(0),
|
withCredentials(true), preConnect(false), redirectCount(0),
|
||||||
redirectsPolicy(QNetworkRequest::ManualRedirectsPolicy)
|
redirectPolicy(QNetworkRequest::ManualRedirectPolicy)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest
|
|||||||
ssl(other.ssl),
|
ssl(other.ssl),
|
||||||
preConnect(other.preConnect),
|
preConnect(other.preConnect),
|
||||||
redirectCount(other.redirectCount),
|
redirectCount(other.redirectCount),
|
||||||
redirectsPolicy(other.redirectsPolicy)
|
redirectPolicy(other.redirectPolicy)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &ot
|
|||||||
&& (withCredentials == other.withCredentials)
|
&& (withCredentials == other.withCredentials)
|
||||||
&& (ssl == other.ssl)
|
&& (ssl == other.ssl)
|
||||||
&& (preConnect == other.preConnect)
|
&& (preConnect == other.preConnect)
|
||||||
&& (redirectsPolicy == other.redirectsPolicy);
|
&& (redirectPolicy == other.redirectPolicy);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QHttpNetworkRequest::methodName() const
|
QByteArray QHttpNetworkRequest::methodName() const
|
||||||
@ -231,17 +231,17 @@ void QHttpNetworkRequest::setPreConnect(bool preConnect)
|
|||||||
|
|
||||||
bool QHttpNetworkRequest::isFollowRedirects() const
|
bool QHttpNetworkRequest::isFollowRedirects() const
|
||||||
{
|
{
|
||||||
return d->redirectsPolicy != QNetworkRequest::ManualRedirectsPolicy;
|
return d->redirectPolicy != QNetworkRequest::ManualRedirectPolicy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QHttpNetworkRequest::setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy)
|
void QHttpNetworkRequest::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
|
||||||
{
|
{
|
||||||
d->redirectsPolicy = policy;
|
d->redirectPolicy = policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkRequest::RedirectsPolicy QHttpNetworkRequest::redirectsPolicy() const
|
QNetworkRequest::RedirectPolicy QHttpNetworkRequest::redirectPolicy() const
|
||||||
{
|
{
|
||||||
return d->redirectsPolicy;
|
return d->redirectPolicy;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QHttpNetworkRequest::redirectCount() const
|
int QHttpNetworkRequest::redirectCount() const
|
||||||
|
@ -131,8 +131,8 @@ public:
|
|||||||
void setPreConnect(bool preConnect);
|
void setPreConnect(bool preConnect);
|
||||||
|
|
||||||
bool isFollowRedirects() const;
|
bool isFollowRedirects() const;
|
||||||
void setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy);
|
void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
|
||||||
QNetworkRequest::RedirectsPolicy redirectsPolicy() const;
|
QNetworkRequest::RedirectPolicy redirectPolicy() const;
|
||||||
|
|
||||||
int redirectCount() const;
|
int redirectCount() const;
|
||||||
void setRedirectCount(int count);
|
void setRedirectCount(int count);
|
||||||
@ -176,7 +176,7 @@ public:
|
|||||||
bool ssl;
|
bool ssl;
|
||||||
bool preConnect;
|
bool preConnect;
|
||||||
int redirectCount;
|
int redirectCount;
|
||||||
QNetworkRequest::RedirectsPolicy redirectsPolicy;
|
QNetworkRequest::RedirectPolicy redirectPolicy;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -697,36 +697,22 @@ void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
|
|||||||
/*!
|
/*!
|
||||||
\since 5.9
|
\since 5.9
|
||||||
|
|
||||||
Enables HTTP Strict Transport Security (HSTS, RFC6797). When processing a
|
If \a enabled is \c true, QNetworkAccessManager follows the HTTP Strict Transport
|
||||||
request, QNetworkAccessManager automatically replaces "http" scheme with
|
Security policy (HSTS, RFC6797). When processing a request, QNetworkAccessManager
|
||||||
"https" and uses a secure transport if a host is a known HSTS host.
|
automatically replaces the "http" scheme with "https" and uses a secure transport
|
||||||
Port 80 if it's set explicitly is replaced by port 443.
|
for HSTS hosts. If it's set explicitly, port 80 is replaced by port 443.
|
||||||
|
|
||||||
When HSTS is enabled, for each HTTP response containing HSTS header and
|
When HSTS is enabled, for each HTTP response containing HSTS header and
|
||||||
received over a secure transport, QNetworkAccessManager will update its HSTS
|
received over a secure transport, QNetworkAccessManager will update its HSTS
|
||||||
cache, either remembering a host with a valid policy or removing a host with
|
cache, either remembering a host with a valid policy or removing a host with
|
||||||
expired/disabled HSTS policy.
|
an expired or disabled HSTS policy.
|
||||||
|
|
||||||
\sa disableStrictTransportSecurity(), strictTransportSecurityEnabled()
|
\sa isStrictTransportSecurityEnabled()
|
||||||
*/
|
*/
|
||||||
void QNetworkAccessManager::enableStrictTransportSecurity()
|
void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)
|
||||||
{
|
{
|
||||||
Q_D(QNetworkAccessManager);
|
Q_D(QNetworkAccessManager);
|
||||||
d->stsEnabled = true;
|
d->stsEnabled = enabled;
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\since 5.9
|
|
||||||
|
|
||||||
Disables HTTP Strict Transport Security (HSTS). HSTS headers in responses would
|
|
||||||
be ignored, no scheme/port mapping is done.
|
|
||||||
|
|
||||||
\sa enableStrictTransportSecurity()
|
|
||||||
*/
|
|
||||||
void QNetworkAccessManager::disableStrictTransportSecurity()
|
|
||||||
{
|
|
||||||
Q_D(QNetworkAccessManager);
|
|
||||||
d->stsEnabled = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -735,9 +721,9 @@ void QNetworkAccessManager::disableStrictTransportSecurity()
|
|||||||
Returns true if HTTP Strict Transport Security (HSTS) was enabled. By default
|
Returns true if HTTP Strict Transport Security (HSTS) was enabled. By default
|
||||||
HSTS is disabled.
|
HSTS is disabled.
|
||||||
|
|
||||||
\sa enableStrictTransportSecurity
|
\sa setStrictTransportSecurityEnabled()
|
||||||
*/
|
*/
|
||||||
bool QNetworkAccessManager::strictTransportSecurityEnabled() const
|
bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
|
||||||
{
|
{
|
||||||
Q_D(const QNetworkAccessManager);
|
Q_D(const QNetworkAccessManager);
|
||||||
return d->stsEnabled;
|
return d->stsEnabled;
|
||||||
@ -761,7 +747,7 @@ bool QNetworkAccessManager::strictTransportSecurityEnabled() const
|
|||||||
\sa addStrictTransportSecurityHosts(), QHstsPolicy
|
\sa addStrictTransportSecurityHosts(), QHstsPolicy
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
|
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QVector<QHstsPolicy> &knownHosts)
|
||||||
{
|
{
|
||||||
Q_D(QNetworkAccessManager);
|
Q_D(QNetworkAccessManager);
|
||||||
d->stsCache.updateFromPolicies(knownHosts);
|
d->stsCache.updateFromPolicies(knownHosts);
|
||||||
@ -776,7 +762,7 @@ void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPol
|
|||||||
|
|
||||||
\sa addStrictTransportSecurityHosts(), QHstsPolicy
|
\sa addStrictTransportSecurityHosts(), QHstsPolicy
|
||||||
*/
|
*/
|
||||||
QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
|
QVector<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
|
||||||
{
|
{
|
||||||
Q_D(const QNetworkAccessManager);
|
Q_D(const QNetworkAccessManager);
|
||||||
return d->stsCache.policies();
|
return d->stsCache.policies();
|
||||||
@ -1171,7 +1157,7 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
|
|||||||
/*!
|
/*!
|
||||||
\since 5.9
|
\since 5.9
|
||||||
|
|
||||||
Sets the manager's redirects policy to be the \a policy specified. This policy
|
Sets the manager's redirect policy to be the \a policy specified. This policy
|
||||||
will affect all subsequent requests created by the manager.
|
will affect all subsequent requests created by the manager.
|
||||||
|
|
||||||
Use this function to enable or disable HTTP redirects on the manager's level.
|
Use this function to enable or disable HTTP redirects on the manager's level.
|
||||||
@ -1180,18 +1166,18 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
|
|||||||
the highest priority, next by priority is QNetworkRequest::FollowRedirectsAttribute.
|
the highest priority, next by priority is QNetworkRequest::FollowRedirectsAttribute.
|
||||||
Finally, the manager's policy has the lowest priority.
|
Finally, the manager's policy has the lowest priority.
|
||||||
|
|
||||||
For backwards compatibility the default value is QNetworkRequest::ManualRedirectsPolicy.
|
For backwards compatibility the default value is QNetworkRequest::ManualRedirectPolicy.
|
||||||
This may change in the future and some type of auto-redirect policy will become
|
This may change in the future and some type of auto-redirect policy will become
|
||||||
the default; clients relying on manual redirect handling are encouraged to set
|
the default; clients relying on manual redirect handling are encouraged to set
|
||||||
this policy explicitly in their code.
|
this policy explicitly in their code.
|
||||||
|
|
||||||
\sa redirectsPolicy(), QNetworkRequest::RedirectsPolicy,
|
\sa redirectPolicy(), QNetworkRequest::RedirectPolicy,
|
||||||
QNetworkRequest::FollowRedirectsAttribute
|
QNetworkRequest::FollowRedirectsAttribute
|
||||||
*/
|
*/
|
||||||
void QNetworkAccessManager::setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy)
|
void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
|
||||||
{
|
{
|
||||||
Q_D(QNetworkAccessManager);
|
Q_D(QNetworkAccessManager);
|
||||||
d->redirectsPolicy = policy;
|
d->redirectPolicy = policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -1199,12 +1185,12 @@ void QNetworkAccessManager::setRedirectsPolicy(QNetworkRequest::RedirectsPolicy
|
|||||||
|
|
||||||
Returns the redirect policy that is used when creating new requests.
|
Returns the redirect policy that is used when creating new requests.
|
||||||
|
|
||||||
\sa setRedirectsPolicy(), QNetworkRequest::RedirectsPolicy
|
\sa setRedirectPolicy(), QNetworkRequest::RedirectPolicy
|
||||||
*/
|
*/
|
||||||
QNetworkRequest::RedirectsPolicy QNetworkAccessManager::redirectsPolicy() const
|
QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const
|
||||||
{
|
{
|
||||||
Q_D(const QNetworkAccessManager);
|
Q_D(const QNetworkAccessManager);
|
||||||
return d->redirectsPolicy;
|
return d->redirectPolicy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -1294,12 +1280,12 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
|
|||||||
Q_D(QNetworkAccessManager);
|
Q_D(QNetworkAccessManager);
|
||||||
|
|
||||||
QNetworkRequest req(originalReq);
|
QNetworkRequest req(originalReq);
|
||||||
if (req.attribute(QNetworkRequest::RedirectsPolicyAttribute).isNull()
|
if (req.attribute(QNetworkRequest::RedirectPolicyAttribute).isNull()
|
||||||
&& req.attribute(QNetworkRequest::FollowRedirectsAttribute).isNull()) {
|
&& req.attribute(QNetworkRequest::FollowRedirectsAttribute).isNull()) {
|
||||||
// We only apply the general manager's policy if:
|
// We only apply the general manager's policy if:
|
||||||
// - RedirectsPolicyAttribute is not set already on request and
|
// - RedirectPolicyAttribute is not set already on request and
|
||||||
// - no FollowRedirectsAttribute is set.
|
// - no FollowRedirectsAttribute is set.
|
||||||
req.setAttribute(QNetworkRequest::RedirectsPolicyAttribute, redirectsPolicy());
|
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, redirectPolicy());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isLocalFile = req.url().isLocalFile();
|
bool isLocalFile = req.url().isLocalFile();
|
||||||
@ -1390,7 +1376,7 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
|
|||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
#ifndef QT_NO_SSL
|
#ifndef QT_NO_SSL
|
||||||
if (strictTransportSecurityEnabled() && d->stsCache.isKnownHost(request.url())) {
|
if (isStrictTransportSecurityEnabled() && d->stsCache.isKnownHost(request.url())) {
|
||||||
QUrl stsUrl(request.url());
|
QUrl stsUrl(request.url());
|
||||||
// RFC6797, 8.3:
|
// RFC6797, 8.3:
|
||||||
// The UA MUST replace the URI scheme with "https" [RFC2818],
|
// The UA MUST replace the URI scheme with "https" [RFC2818],
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#include <QtNetwork/qtnetworkglobal.h>
|
#include <QtNetwork/qtnetworkglobal.h>
|
||||||
#include <QtNetwork/qnetworkrequest.h>
|
#include <QtNetwork/qnetworkrequest.h>
|
||||||
|
#include <QtCore/QVector>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#ifndef QT_NO_SSL
|
#ifndef QT_NO_SSL
|
||||||
#include <QtNetwork/QSslConfiguration>
|
#include <QtNetwork/QSslConfiguration>
|
||||||
@ -121,11 +122,10 @@ public:
|
|||||||
QNetworkCookieJar *cookieJar() const;
|
QNetworkCookieJar *cookieJar() const;
|
||||||
void setCookieJar(QNetworkCookieJar *cookieJar);
|
void setCookieJar(QNetworkCookieJar *cookieJar);
|
||||||
|
|
||||||
void enableStrictTransportSecurity();
|
void setStrictTransportSecurityEnabled(bool enabled);
|
||||||
void disableStrictTransportSecurity();
|
bool isStrictTransportSecurityEnabled() const;
|
||||||
bool strictTransportSecurityEnabled() const;
|
void addStrictTransportSecurityHosts(const QVector<QHstsPolicy> &knownHosts);
|
||||||
void addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts);
|
QVector<QHstsPolicy> strictTransportSecurityHosts() const;
|
||||||
QList<QHstsPolicy> strictTransportSecurityHosts() const;
|
|
||||||
|
|
||||||
QNetworkReply *head(const QNetworkRequest &request);
|
QNetworkReply *head(const QNetworkRequest &request);
|
||||||
QNetworkReply *get(const QNetworkRequest &request);
|
QNetworkReply *get(const QNetworkRequest &request);
|
||||||
@ -155,8 +155,8 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
void connectToHost(const QString &hostName, quint16 port = 80);
|
void connectToHost(const QString &hostName, quint16 port = 80);
|
||||||
|
|
||||||
void setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy);
|
void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
|
||||||
QNetworkRequest::RedirectsPolicy redirectsPolicy() const;
|
QNetworkRequest::RedirectPolicy redirectPolicy() const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
#ifndef QT_NO_NETWORKPROXY
|
#ifndef QT_NO_NETWORKPROXY
|
||||||
|
@ -93,7 +93,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
cookieJarCreated(false),
|
cookieJarCreated(false),
|
||||||
defaultAccessControl(true),
|
defaultAccessControl(true),
|
||||||
redirectsPolicy(QNetworkRequest::ManualRedirectsPolicy),
|
redirectPolicy(QNetworkRequest::ManualRedirectPolicy),
|
||||||
authenticationManager(QSharedPointer<QNetworkAccessAuthenticationManager>::create())
|
authenticationManager(QSharedPointer<QNetworkAccessAuthenticationManager>::create())
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_BEARERMANAGEMENT
|
#ifndef QT_NO_BEARERMANAGEMENT
|
||||||
@ -196,7 +196,7 @@ public:
|
|||||||
|
|
||||||
bool cookieJarCreated;
|
bool cookieJarCreated;
|
||||||
bool defaultAccessControl;
|
bool defaultAccessControl;
|
||||||
QNetworkRequest::RedirectsPolicy redirectsPolicy;
|
QNetworkRequest::RedirectPolicy redirectPolicy;
|
||||||
|
|
||||||
// The cache with authorization data:
|
// The cache with authorization data:
|
||||||
QSharedPointer<QNetworkAccessAuthenticationManager> authenticationManager;
|
QSharedPointer<QNetworkAccessAuthenticationManager> authenticationManager;
|
||||||
|
@ -736,7 +736,7 @@ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config)
|
|||||||
this function has no effect.
|
this function has no effect.
|
||||||
|
|
||||||
\sa sslConfiguration(), sslErrors(), QSslSocket::ignoreSslErrors(),
|
\sa sslConfiguration(), sslErrors(), QSslSocket::ignoreSslErrors(),
|
||||||
QNetworkAccessManager::enableStrictTransportSecurity()
|
QNetworkAccessManager::setStrictTransportSecurityEnabled()
|
||||||
*/
|
*/
|
||||||
void QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors)
|
void QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors)
|
||||||
{
|
{
|
||||||
|
@ -668,14 +668,14 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
auto redirectsPolicy = QNetworkRequest::ManualRedirectsPolicy;
|
auto redirectPolicy = QNetworkRequest::ManualRedirectPolicy;
|
||||||
const QVariant value = newHttpRequest.attribute(QNetworkRequest::RedirectsPolicyAttribute);
|
const QVariant value = newHttpRequest.attribute(QNetworkRequest::RedirectPolicyAttribute);
|
||||||
if (value.isValid())
|
if (value.isValid())
|
||||||
redirectsPolicy = value.value<QNetworkRequest::RedirectsPolicy>();
|
redirectPolicy = value.value<QNetworkRequest::RedirectPolicy>();
|
||||||
else if (newHttpRequest.attribute(QNetworkRequest::FollowRedirectsAttribute).toBool())
|
else if (newHttpRequest.attribute(QNetworkRequest::FollowRedirectsAttribute).toBool())
|
||||||
redirectsPolicy = QNetworkRequest::NoLessSafeRedirectsPolicy;
|
redirectPolicy = QNetworkRequest::NoLessSafeRedirectPolicy;
|
||||||
|
|
||||||
httpRequest.setRedirectsPolicy(redirectsPolicy);
|
httpRequest.setRedirectPolicy(redirectPolicy);
|
||||||
|
|
||||||
httpRequest.setPriority(convert(newHttpRequest.priority()));
|
httpRequest.setPriority(convert(newHttpRequest.priority()));
|
||||||
|
|
||||||
@ -1155,7 +1155,7 @@ void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int htt
|
|||||||
|
|
||||||
const bool isLessSafe = schemeBefore == QLatin1String("https")
|
const bool isLessSafe = schemeBefore == QLatin1String("https")
|
||||||
&& url.scheme() == QLatin1String("http");
|
&& url.scheme() == QLatin1String("http");
|
||||||
if (httpRequest.redirectsPolicy() == QNetworkRequest::NoLessSafeRedirectsPolicy
|
if (httpRequest.redirectPolicy() == QNetworkRequest::NoLessSafeRedirectPolicy
|
||||||
&& isLessSafe) {
|
&& isLessSafe) {
|
||||||
error(QNetworkReply::InsecureRedirectError,
|
error(QNetworkReply::InsecureRedirectError,
|
||||||
QCoreApplication::translate("QHttp", "Insecure redirect"));
|
QCoreApplication::translate("QHttp", "Insecure redirect"));
|
||||||
@ -1165,7 +1165,7 @@ void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int htt
|
|||||||
redirectRequest = createRedirectRequest(originalRequest, url, maxRedirectsRemaining);
|
redirectRequest = createRedirectRequest(originalRequest, url, maxRedirectsRemaining);
|
||||||
operation = getRedirectOperation(operation, httpStatus);
|
operation = getRedirectOperation(operation, httpStatus);
|
||||||
|
|
||||||
if (httpRequest.redirectsPolicy() != QNetworkRequest::UserVerifiedRedirectsPolicy)
|
if (httpRequest.redirectPolicy() != QNetworkRequest::UserVerifiedRedirectPolicy)
|
||||||
followRedirect();
|
followRedirect();
|
||||||
|
|
||||||
emit q->redirected(url);
|
emit q->redirected(url);
|
||||||
|
@ -289,9 +289,9 @@ QT_BEGIN_NAMESPACE
|
|||||||
marked to be decompressed automatically.
|
marked to be decompressed automatically.
|
||||||
(This value was introduced in 5.9.)
|
(This value was introduced in 5.9.)
|
||||||
|
|
||||||
\value RedirectsPolicyAttribute
|
\value RedirectPolicyAttribute
|
||||||
Requests only, type: QMetaType::Int, should be one of the
|
Requests only, type: QMetaType::Int, should be one of the
|
||||||
QNetworkRequest::RedirectsPolicy values (default: ManualRedirectsPolicy).
|
QNetworkRequest::RedirectPolicy values (default: ManualRedirectPolicy).
|
||||||
This attribute obsoletes FollowRedirectsAttribute.
|
This attribute obsoletes FollowRedirectsAttribute.
|
||||||
(This value was introduced in 5.9.)
|
(This value was introduced in 5.9.)
|
||||||
|
|
||||||
@ -343,25 +343,25 @@ QT_BEGIN_NAMESPACE
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\enum QNetworkRequest::RedirectsPolicy
|
\enum QNetworkRequest::RedirectPolicy
|
||||||
\since 5.9
|
\since 5.9
|
||||||
|
|
||||||
Indicates whether the Network Access API should automatically follow a
|
Indicates whether the Network Access API should automatically follow a
|
||||||
HTTP redirect response or not.
|
HTTP redirect response or not.
|
||||||
|
|
||||||
\value ManualRedirectsPolicy Default value: not following any redirects.
|
\value ManualRedirectPolicy Default value: not following any redirects.
|
||||||
|
|
||||||
\value NoLessSafeRedirectsPolicy Only "http"->"http", "http" -> "https"
|
\value NoLessSafeRedirectPolicy Only "http"->"http", "http" -> "https"
|
||||||
or "https" -> "https" redirects are allowed.
|
or "https" -> "https" redirects are allowed.
|
||||||
Equivalent to setting the old FollowRedirectsAttribute
|
Equivalent to setting the old FollowRedirectsAttribute
|
||||||
to true
|
to true
|
||||||
|
|
||||||
\value SameOriginRedirectsPolicy Require the same protocol, host and port.
|
\value SameOriginRedirectPolicy Require the same protocol, host and port.
|
||||||
Note, http://example.com and http://example.com:80
|
Note, http://example.com and http://example.com:80
|
||||||
will fail with this policy (implicit/explicit ports
|
will fail with this policy (implicit/explicit ports
|
||||||
are considered to be a mismatch).
|
are considered to be a mismatch).
|
||||||
|
|
||||||
\value UserVerifiedRedirectsPolicy Client decides whether to follow each
|
\value UserVerifiedRedirectPolicy Client decides whether to follow each
|
||||||
redirect by handling the redirected()
|
redirect by handling the redirected()
|
||||||
signal, emitting redirectAllowed() on
|
signal, emitting redirectAllowed() on
|
||||||
the QNetworkReply object to allow
|
the QNetworkReply object to allow
|
||||||
|
@ -91,7 +91,7 @@ public:
|
|||||||
HTTP2AllowedAttribute,
|
HTTP2AllowedAttribute,
|
||||||
HTTP2WasUsedAttribute,
|
HTTP2WasUsedAttribute,
|
||||||
OriginalContentLengthAttribute,
|
OriginalContentLengthAttribute,
|
||||||
RedirectsPolicyAttribute,
|
RedirectPolicyAttribute,
|
||||||
|
|
||||||
User = 1000,
|
User = 1000,
|
||||||
UserMax = 32767
|
UserMax = 32767
|
||||||
@ -113,11 +113,11 @@ public:
|
|||||||
LowPriority = 5
|
LowPriority = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
enum RedirectsPolicy {
|
enum RedirectPolicy {
|
||||||
ManualRedirectsPolicy,
|
ManualRedirectPolicy,
|
||||||
NoLessSafeRedirectsPolicy,
|
NoLessSafeRedirectPolicy,
|
||||||
SameOriginRedirectsPolicy,
|
SameOriginRedirectPolicy,
|
||||||
UserVerifiedRedirectsPolicy
|
UserVerifiedRedirectPolicy
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -177,6 +177,6 @@ Q_DECLARE_SHARED(QNetworkRequest)
|
|||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(QNetworkRequest)
|
Q_DECLARE_METATYPE(QNetworkRequest)
|
||||||
Q_DECLARE_METATYPE(QNetworkRequest::RedirectsPolicy)
|
Q_DECLARE_METATYPE(QNetworkRequest::RedirectPolicy)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,9 +7,6 @@
|
|||||||
|
|
||||||
"commandline": {
|
"commandline": {
|
||||||
"assignments": {
|
"assignments": {
|
||||||
"OPENSSL_LIBS": "openssl.libs",
|
|
||||||
"OPENSSL_LIBS_DEBUG": "openssl.libs.debug",
|
|
||||||
"OPENSSL_LIBS_RELEASE": "openssl.libs.release",
|
|
||||||
"OPENSSL_PATH": "openssl.prefix"
|
"OPENSSL_PATH": "openssl.prefix"
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
@ -46,13 +43,24 @@
|
|||||||
"-lproxy"
|
"-lproxy"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"openssl_headers": {
|
||||||
|
"label": "OpenSSL Headers",
|
||||||
|
"export": "openssl",
|
||||||
|
"test": "unix/openssl",
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"comment": "placeholder for OPENSSL_PATH",
|
||||||
|
"libs": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"openssl": {
|
"openssl": {
|
||||||
"label": "OpenSSL Libraries",
|
"label": "OpenSSL",
|
||||||
"export": "",
|
"test": "unix/openssl",
|
||||||
"sources": [
|
"sources": [
|
||||||
{ "type": "openssl" },
|
{ "type": "openssl" },
|
||||||
{
|
{
|
||||||
"comment": "placeholder for OPENSSL_LIBS{,_{DEBUG,RELEASE}}",
|
"comment": "placeholder for OPENSSL_{PATH,LIBS{,_{DEBUG,RELEASE}}}",
|
||||||
"libs": "",
|
"libs": "",
|
||||||
"builds": {
|
"builds": {
|
||||||
"debug": "",
|
"debug": "",
|
||||||
@ -92,11 +100,6 @@
|
|||||||
"test": "unix/ipv6ifname",
|
"test": "unix/ipv6ifname",
|
||||||
"use": "network"
|
"use": "network"
|
||||||
},
|
},
|
||||||
"openssl": {
|
|
||||||
"label": "OpenSSL",
|
|
||||||
"type": "compile",
|
|
||||||
"test": "unix/openssl"
|
|
||||||
},
|
|
||||||
"sctp": {
|
"sctp": {
|
||||||
"label": "SCTP support",
|
"label": "SCTP support",
|
||||||
"type": "compile",
|
"type": "compile",
|
||||||
@ -138,7 +141,7 @@
|
|||||||
"enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
|
"enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
|
||||||
"disable": "input.openssl == 'no' || input.ssl == 'no'",
|
"disable": "input.openssl == 'no' || input.ssl == 'no'",
|
||||||
"autoDetect": "!config.winrt",
|
"autoDetect": "!config.winrt",
|
||||||
"condition": "!features.securetransport && tests.openssl",
|
"condition": "!features.securetransport && (features.openssl-linked || libs.openssl_headers)",
|
||||||
"output": [
|
"output": [
|
||||||
"privateFeature",
|
"privateFeature",
|
||||||
{ "type": "publicQtConfig", "condition": "!features.openssl-linked" },
|
{ "type": "publicQtConfig", "condition": "!features.openssl-linked" },
|
||||||
@ -149,14 +152,9 @@
|
|||||||
"label": " Qt directly linked to OpenSSL",
|
"label": " Qt directly linked to OpenSSL",
|
||||||
"enable": "input.openssl == 'linked'",
|
"enable": "input.openssl == 'linked'",
|
||||||
"disable": "input.openssl != 'linked'",
|
"disable": "input.openssl != 'linked'",
|
||||||
"condition": "features.openssl && libs.openssl",
|
"condition": "!features.securetransport && libs.openssl",
|
||||||
"output": [
|
"output": [
|
||||||
"privateFeature",
|
"privateFeature",
|
||||||
{ "type": "varAssign", "name": "OPENSSL_LIBS", "value": "libs.openssl.libs", "eval": "true" },
|
|
||||||
{ "type": "varAssign", "name": "OPENSSL_LIBS_DEBUG", "value": "libs.openssl.builds.debug.libs",
|
|
||||||
"eval": "true", "condition": "config.win32" },
|
|
||||||
{ "type": "varAssign", "name": "OPENSSL_LIBS_RELEASE", "value": "libs.openssl.builds.release.libs",
|
|
||||||
"eval": "true", "condition": "config.win32" },
|
|
||||||
{ "type": "define", "name": "QT_LINKED_OPENSSL" }
|
{ "type": "define", "name": "QT_LINKED_OPENSSL" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 Alex Trotsenko <alex1973tr@gmail.com>
|
** Copyright (C) 2016 Alex Trotsenko <alex1973tr@gmail.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 Intel Corporation.
|
** Copyright (C) 2016 Intel Corporation.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 Intel Corporation.
|
** Copyright (C) 2016 Intel Corporation.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Intel Corporation.
|
** Copyright (C) 2015 Intel Corporation.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -358,17 +358,41 @@ bool QNativeSocketEnginePrivate::checkProxy(const QHostAddress &address)
|
|||||||
#if !defined(QT_NO_NETWORKPROXY)
|
#if !defined(QT_NO_NETWORKPROXY)
|
||||||
QObject *parent = q_func()->parent();
|
QObject *parent = q_func()->parent();
|
||||||
QNetworkProxy proxy;
|
QNetworkProxy proxy;
|
||||||
|
QNetworkProxyQuery::QueryType queryType = QNetworkProxyQuery::TcpSocket;
|
||||||
if (QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(parent)) {
|
if (QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(parent)) {
|
||||||
proxy = socket->proxy();
|
proxy = socket->proxy();
|
||||||
|
switch (socket->socketType()) {
|
||||||
|
case QAbstractSocket::UdpSocket:
|
||||||
|
queryType = QNetworkProxyQuery::UdpSocket;
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::SctpSocket:
|
||||||
|
queryType = QNetworkProxyQuery::SctpSocket;
|
||||||
|
break;
|
||||||
|
case QAbstractSocket::TcpSocket:
|
||||||
|
case QAbstractSocket::UnknownSocketType:
|
||||||
|
queryType = QNetworkProxyQuery::TcpSocket;
|
||||||
|
}
|
||||||
} else if (QTcpServer *server = qobject_cast<QTcpServer *>(parent)) {
|
} else if (QTcpServer *server = qobject_cast<QTcpServer *>(parent)) {
|
||||||
proxy = server->proxy();
|
proxy = server->proxy();
|
||||||
|
queryType = QNetworkProxyQuery::TcpServer;
|
||||||
|
#ifndef QT_NO_SCTP
|
||||||
|
if (qobject_cast<QSctpServer *>(server))
|
||||||
|
queryType = QNetworkProxyQuery::SctpServer;
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
// no parent -> no proxy
|
// no parent -> no proxy
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (proxy.type() == QNetworkProxy::DefaultProxy)
|
if (proxy.type() == QNetworkProxy::DefaultProxy) {
|
||||||
proxy = QNetworkProxy::applicationProxy();
|
// This is similar to what we have in QNetworkProxy::applicationProxy,
|
||||||
|
// the only difference is that we provide the correct query type instead of
|
||||||
|
// always using TcpSocket unconditionally (this is the default type for
|
||||||
|
// QNetworkProxyQuery).
|
||||||
|
QNetworkProxyQuery query;
|
||||||
|
query.setQueryType(queryType);
|
||||||
|
proxy = QNetworkProxyFactory::systemProxyForQuery(query).constFirst();
|
||||||
|
}
|
||||||
|
|
||||||
if (proxy.type() != QNetworkProxy::DefaultProxy &&
|
if (proxy.type() != QNetworkProxy::DefaultProxy &&
|
||||||
proxy.type() != QNetworkProxy::NoProxy) {
|
proxy.type() != QNetworkProxy::NoProxy) {
|
||||||
|
@ -678,10 +678,16 @@ static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d,
|
|||||||
|
|
||||||
if (interface.isValid()) {
|
if (interface.isValid()) {
|
||||||
const QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();
|
const QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();
|
||||||
if (!addressEntries.isEmpty()) {
|
bool found = false;
|
||||||
QHostAddress firstIP = addressEntries.first().ip();
|
for (const QNetworkAddressEntry &entry : addressEntries) {
|
||||||
mreq4.imr_interface.s_addr = htonl(firstIP.toIPv4Address());
|
const QHostAddress ip = entry.ip();
|
||||||
} else {
|
if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
|
||||||
|
mreq4.imr_interface.s_addr = htonl(ip.toIPv4Address());
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
d->setError(QAbstractSocket::NetworkError,
|
d->setError(QAbstractSocket::NetworkError,
|
||||||
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
|
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
|
||||||
return false;
|
return false;
|
||||||
|
@ -953,10 +953,16 @@ static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d,
|
|||||||
|
|
||||||
if (iface.isValid()) {
|
if (iface.isValid()) {
|
||||||
const QList<QNetworkAddressEntry> addressEntries = iface.addressEntries();
|
const QList<QNetworkAddressEntry> addressEntries = iface.addressEntries();
|
||||||
if (!addressEntries.isEmpty()) {
|
bool found = false;
|
||||||
QHostAddress firstIP = addressEntries.first().ip();
|
for (const QNetworkAddressEntry &entry : addressEntries) {
|
||||||
mreq4.imr_interface.s_addr = htonl(firstIP.toIPv4Address());
|
const QHostAddress ip = entry.ip();
|
||||||
} else {
|
if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
|
||||||
|
mreq4.imr_interface.s_addr = htonl(ip.toIPv4Address());
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
d->setError(QAbstractSocket::NetworkError,
|
d->setError(QAbstractSocket::NetworkError,
|
||||||
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
|
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtNetwork module of the Qt Toolkit.
|
** This file is part of the QtNetwork module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
|
@ -56,7 +56,7 @@ qtConfig(ssl) {
|
|||||||
ssl/qsslellipticcurve_dummy.cpp
|
ssl/qsslellipticcurve_dummy.cpp
|
||||||
}
|
}
|
||||||
|
|
||||||
qtConfig(openssl)|qtConfig(openssl-linked) {
|
qtConfig(openssl) {
|
||||||
HEADERS += ssl/qsslcontext_openssl_p.h \
|
HEADERS += ssl/qsslcontext_openssl_p.h \
|
||||||
ssl/qsslsocket_openssl_p.h \
|
ssl/qsslsocket_openssl_p.h \
|
||||||
ssl/qsslsocket_openssl_symbols_p.h
|
ssl/qsslsocket_openssl_symbols_p.h
|
||||||
@ -79,16 +79,10 @@ qtConfig(ssl) {
|
|||||||
# - libs in <OPENSSL_DIR>\lib\VC\static
|
# - libs in <OPENSSL_DIR>\lib\VC\static
|
||||||
# - configure: -openssl -openssl-linked -I <OPENSSL_DIR>\include -L <OPENSSL_DIR>\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"
|
# - configure: -openssl -openssl-linked -I <OPENSSL_DIR>\include -L <OPENSSL_DIR>\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"
|
||||||
|
|
||||||
include($$OUT_PWD/qtnetwork-config.pri)
|
qtConfig(openssl-linked): \
|
||||||
|
QMAKE_USE_FOR_PRIVATE += openssl
|
||||||
CONFIG(debug, debug|release) {
|
else: \
|
||||||
LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG
|
QMAKE_USE_FOR_PRIVATE += openssl/nolink
|
||||||
} else {
|
|
||||||
LIBS_PRIVATE += $$OPENSSL_LIBS_RELEASE
|
|
||||||
}
|
|
||||||
|
|
||||||
QMAKE_CXXFLAGS += $$OPENSSL_CFLAGS
|
|
||||||
LIBS_PRIVATE += $$OPENSSL_LIBS
|
|
||||||
win32: LIBS_PRIVATE += -lcrypt32
|
win32: LIBS_PRIVATE += -lcrypt32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -5,27 +5,33 @@
|
|||||||
**
|
**
|
||||||
** This file is part of the plugins module of the Qt Toolkit.
|
** This file is part of the plugins module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -37,6 +37,8 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QtGui/qtgui-config.h>
|
||||||
|
|
||||||
#ifndef QT_NO_SYSTEMTRAYICON
|
#ifndef QT_NO_SYSTEMTRAYICON
|
||||||
#include "qdbustrayicon_p.h"
|
#include "qdbustrayicon_p.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,5 +3,8 @@ SOURCES += $$PWD/qgenericunixthemes.cpp
|
|||||||
|
|
||||||
qtConfig(dbus) {
|
qtConfig(dbus) {
|
||||||
include(dbusmenu/dbusmenu.pri)
|
include(dbusmenu/dbusmenu.pri)
|
||||||
|
|
||||||
|
qtConfig(systemtrayicon) {
|
||||||
include(dbustray/dbustray.pri)
|
include(dbustray/dbustray.pri)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -572,7 +572,8 @@ QString QIBusPlatformInputContextPrivate::getSocketPath()
|
|||||||
if (debug)
|
if (debug)
|
||||||
qDebug() << "host=" << host << "displayNumber" << displayNumber;
|
qDebug() << "host=" << host << "displayNumber" << displayNumber;
|
||||||
|
|
||||||
return QDir::homePath() + QLatin1String("/.config/ibus/bus/") +
|
return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) +
|
||||||
|
QLatin1String("/ibus/bus/") +
|
||||||
QLatin1String(QDBusConnection::localMachineId()) +
|
QLatin1String(QDBusConnection::localMachineId()) +
|
||||||
QLatin1Char('-') + QString::fromLocal8Bit(host) + QLatin1Char('-') + QString::fromLocal8Bit(displayNumber);
|
QLatin1Char('-') + QString::fromLocal8Bit(host) + QLatin1Char('-') + QString::fromLocal8Bit(displayNumber);
|
||||||
}
|
}
|
||||||
|
@ -100,10 +100,6 @@ bool QAndroidPlatformOpenGLContext::makeCurrent(QPlatformSurface *surface)
|
|||||||
bool ret = QEGLPlatformContext::makeCurrent(surface);
|
bool ret = QEGLPlatformContext::makeCurrent(surface);
|
||||||
QOpenGLContextPrivate *ctx_d = QOpenGLContextPrivate::get(context());
|
QOpenGLContextPrivate *ctx_d = QOpenGLContextPrivate::get(context());
|
||||||
|
|
||||||
const char *rendererString = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
|
|
||||||
if (rendererString != 0 && qstrncmp(rendererString, "Android Emulator", 16) == 0)
|
|
||||||
ctx_d->workaround_missingPrecisionQualifiers = true;
|
|
||||||
|
|
||||||
if (!ctx_d->workaround_brokenFBOReadBack && needsFBOReadBackWorkaround())
|
if (!ctx_d->workaround_brokenFBOReadBack && needsFBOReadBackWorkaround())
|
||||||
ctx_d->workaround_brokenFBOReadBack = true;
|
ctx_d->workaround_brokenFBOReadBack = true;
|
||||||
|
|
||||||
|
@ -1,32 +1,38 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,32 +1,38 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,32 +1,38 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,32 +1,38 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -201,6 +201,10 @@ QPixmap QCocoaDrag::dragPixmap(QDrag *drag, QPoint &hotSpot) const
|
|||||||
dpr = sourceWindow->devicePixelRatio();
|
dpr = sourceWindow->devicePixelRatio();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else {
|
||||||
|
if (const QWindow *focusWindow = qApp->focusWindow())
|
||||||
|
dpr = focusWindow->devicePixelRatio();
|
||||||
|
}
|
||||||
pm = QPixmap(width * dpr, height * dpr);
|
pm = QPixmap(width * dpr, height * dpr);
|
||||||
pm.setDevicePixelRatio(dpr);
|
pm.setDevicePixelRatio(dpr);
|
||||||
QPainter p(&pm);
|
QPainter p(&pm);
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Green Hills Software
|
** Copyright (C) 2015 Green Hills Software
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** 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$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user