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]
|
||||
|
||||
Configure understands variable assignments like VAR=value on the command line.
|
||||
These override any values possibly obtained from pkg-config. The variables
|
||||
are mentioned in the descriptions of the options they relate to.
|
||||
Each uppercased library name (obtainable with -list-libraries) supports the
|
||||
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
|
||||
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.
|
||||
-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:
|
||||
|
||||
-opensource .......... Build the Open-Source Edition of Qt
|
||||
@ -188,9 +197,6 @@ Component selection:
|
||||
[default on Android and Windows]
|
||||
-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_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]
|
||||
Note: Disabling accessibility is not recommended.
|
||||
-qml-debug ........... Enable QML debugging support [yes]
|
||||
@ -210,7 +216,6 @@ Core options:
|
||||
-pcre ................ Select used libpcre2 [system/qt]
|
||||
-pps ................. Enable PPS support [auto] (QNX only)
|
||||
-zlib ................ Select used zlib [system/qt]
|
||||
ZLIB_LIBS=
|
||||
|
||||
Logging backends:
|
||||
-journald .......... Enable journald support [no] (Unix only)
|
||||
@ -223,8 +228,6 @@ Network options:
|
||||
-no-openssl .......... Do not use OpenSSL [default on Apple and WinRT]
|
||||
-openssl-linked ...... Use OpenSSL and link to libssl [no]
|
||||
-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)
|
||||
|
||||
-sctp ................ Enable SCTP support [no]
|
||||
@ -292,5 +295,4 @@ Database options:
|
||||
-sql-<driver> ........ Enable SQL <driver> plugin. Supported drivers:
|
||||
db2 ibase mysql oci odbc psql sqlite2 sqlite tds
|
||||
[all auto]
|
||||
MYSQL_PATH= PSQL_LIBS= SYBASE= SYBASE_LIBS=
|
||||
-sqlite .............. Select used sqlite3 [system/qt]
|
||||
|
@ -20,8 +20,7 @@
|
||||
"commandline": {
|
||||
"assignments": {
|
||||
"DBUS_HOST_PATH": "host_dbus.prefix",
|
||||
"DBUS_PATH": "dbus.prefix",
|
||||
"ZLIB_LIBS": "zlib.libs"
|
||||
"DBUS_PATH": "dbus.prefix"
|
||||
},
|
||||
"custom": "qmakeArgs",
|
||||
"options": {
|
||||
@ -1016,7 +1015,10 @@
|
||||
},
|
||||
"qml-debug": {
|
||||
"label": "QML debugging",
|
||||
"output": [ { "type": "publicQtConfig", "negative": true } ]
|
||||
"output": [
|
||||
"privateFeature",
|
||||
{ "type": "publicQtConfig", "negative": true }
|
||||
]
|
||||
},
|
||||
"compile_examples": {
|
||||
"label": "Compile examples",
|
||||
|
@ -30,7 +30,6 @@ qtHaveModule(widgets) {
|
||||
}
|
||||
|
||||
qtConfig(openssl): SUBDIRS += securesocketclient
|
||||
qtConfig(openssl-linked): SUBDIRS += securesocketclient
|
||||
qtConfig(sctp): SUBDIRS += multistreamserver multistreamclient
|
||||
}
|
||||
|
||||
|
@ -67,6 +67,7 @@ TabletCanvas::TabletCanvas()
|
||||
resize(500, 500);
|
||||
initPixmap();
|
||||
setAutoFillBackground(true);
|
||||
setAttribute(Qt::WA_TabletTracking);
|
||||
}
|
||||
|
||||
void TabletCanvas::initPixmap()
|
||||
|
@ -12,7 +12,10 @@
|
||||
"recheck": { "type": "void", "name": "cache_use", "value": "positive" },
|
||||
"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;
|
||||
# UIKit builds are always multi-arch due to simulator_and_device (unless
|
||||
# -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.CONFIG = no_link
|
||||
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, /)
|
||||
name = $$take_first(use)
|
||||
nu = $$upper($$name)
|
||||
debug: \
|
||||
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): \
|
||||
!defined(QMAKE_LIBS_$$nu, var): \
|
||||
error("Library '$$name' is not defined.")
|
||||
|
||||
!contains(use, nolink) {
|
||||
QMAKE_LIBDIR += $$libdir
|
||||
LIBS$${suffix} += $$libs
|
||||
QMAKE_LIBDIR += $$eval(QMAKE_LIBDIR_$$nu)
|
||||
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) {
|
||||
DEFINES += $$defines
|
||||
INCLUDEPATH += $$includes
|
||||
DEFINES += $$eval(QMAKE_DEFINES_$${nu})
|
||||
INCLUDEPATH += $$eval(QMAKE_INCDIR_$${nu})
|
||||
}
|
||||
}
|
||||
!isEmpty(suffix): break()
|
||||
|
@ -401,6 +401,7 @@ defineReplace(qtConfPrepareArgs) {
|
||||
}
|
||||
|
||||
defineTest(qtConfSetupLibraries) {
|
||||
asspfx = $${currentConfig}.commandline.assignments
|
||||
for (l, $${currentConfig}.libraries._KEYS_) {
|
||||
lpfx = $${currentConfig}.libraries.$${l}
|
||||
# 'export' may be omitted, in which case it falls back to the library's name
|
||||
@ -408,6 +409,15 @@ defineTest(qtConfSetupLibraries) {
|
||||
$${lpfx}.export = $$l
|
||||
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_): \
|
||||
error("Library $$l defines no sources")
|
||||
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.
|
||||
for (a, $${currentConfig}.commandline.assignments._KEYS_) {
|
||||
apfx = $${currentConfig}.commandline.assignments.$${a}
|
||||
for (a, $${asspfx}._KEYS_) {
|
||||
apfx = $${asspfx}.$${a}
|
||||
ra = config.commandline.rev_assignments.$$eval($$apfx)
|
||||
$$ra = $$a
|
||||
export($$ra)
|
||||
@ -444,9 +477,13 @@ defineTest(qtConfLibrary_inline) {
|
||||
!defined($${1}.libs, var): \
|
||||
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.
|
||||
defined(config.input.$${lib}.libs, var) {
|
||||
$${1}.libs = $$eval(config.input.$${lib}.libs)
|
||||
defined(config.input.$${input}.libs, var) {
|
||||
$${1}.libs = $$eval(config.input.$${input}.libs)
|
||||
export($${1}.libs)
|
||||
}
|
||||
|
||||
@ -455,7 +492,7 @@ defineTest(qtConfLibrary_inline) {
|
||||
any = false
|
||||
all = true
|
||||
for (b, $${1}.builds._KEYS_) {
|
||||
iv = $${lib}.libs.$${b}
|
||||
iv = $${input}.libs.$${b}
|
||||
vars += $$eval(config.commandline.rev_assignments.$${iv})
|
||||
defined(config.input.$${iv}, var) {
|
||||
$${1}.builds.$${b}.libs = $$eval(config.input.$${iv})
|
||||
@ -471,7 +508,7 @@ defineTest(qtConfLibrary_inline) {
|
||||
}
|
||||
|
||||
# prefix. prepends to (possibly overwritten) inline libs.
|
||||
prefix = $$val_escape(config.input.$${lib}.prefix)
|
||||
prefix = $$val_escape(config.input.$${input}.prefix)
|
||||
!isEmpty(prefix) {
|
||||
$${1}.includedir = $$prefix/include
|
||||
export($${1}.includedir)
|
||||
@ -479,6 +516,18 @@ defineTest(qtConfLibrary_inline) {
|
||||
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)
|
||||
}
|
||||
|
||||
@ -562,14 +611,20 @@ defineReplace(qtConfLibraryArgs) {
|
||||
}
|
||||
|
||||
defineTest(qtConfExportLibrary) {
|
||||
isEmpty(2): return()
|
||||
!$$qtConfEvaluate($$eval($${1}.export)): return()
|
||||
lpfx = $${currentConfig}.libraries.$$1
|
||||
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
|
||||
|
||||
eval(libs = $$eval($${1}.libs))
|
||||
eval(cflags = $$eval($${1}.cflags))
|
||||
eval(includes = $$eval($${1}.includedir))
|
||||
eval(libs = $$eval($${spfx}.libs))
|
||||
eval(cflags = $$eval($${spfx}.cflags))
|
||||
eval(includes = $$eval($${spfx}.includedir))
|
||||
|
||||
# Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff.
|
||||
defines =
|
||||
@ -588,30 +643,46 @@ defineTest(qtConfExportLibrary) {
|
||||
}
|
||||
}
|
||||
!isEmpty(ignored): \
|
||||
qtConfAddNote("Dropped compiler flags '$$ignored' when detecting library '$$2'.")
|
||||
qtConfAddNote("Dropped compiler flags '$$ignored' when detecting library '$$name'.")
|
||||
|
||||
NAME = $$upper($$2)
|
||||
!isEmpty(libs): qtConfOutputVar(assign, $$output, QMAKE_LIBS_$$NAME, $$libs)
|
||||
for (b, $${1}.builds._KEYS_): \
|
||||
NAME = $$upper($$name)
|
||||
# LIBS is emitted even if empty, as this allows the library to be "seen".
|
||||
qtConfOutputVar(assign, $$output, QMAKE_LIBS_$$NAME, $$libs)
|
||||
for (b, $${spfx}.builds._KEYS_): \
|
||||
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(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
|
||||
!isEmpty($${currentConfig}.module): \
|
||||
qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$2)
|
||||
qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$name)
|
||||
}
|
||||
|
||||
defineTest(qtConfHandleLibrary) {
|
||||
lpfx = $${currentConfig}.libraries.$$1
|
||||
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")
|
||||
qtConfTestPrepare_compile($$lpfx)
|
||||
!qtConfTestPrepare_compile($$lpfx) {
|
||||
$${lpfx}.result = false
|
||||
export($${lpfx}.result)
|
||||
return()
|
||||
}
|
||||
use_args = $$eval($${lpfx}.literal_args)
|
||||
|
||||
qtConfLoadResult($${lpfx}, $$1) {
|
||||
$$eval($${lpfx}.result): \
|
||||
qtConfExportLibrary($${lpfx}.sources.$$eval($${lpfx}.source), $$eval($${lpfx}.export))
|
||||
qtConfExportLibrary($$1)
|
||||
return()
|
||||
}
|
||||
|
||||
@ -634,14 +705,14 @@ defineTest(qtConfHandleLibrary) {
|
||||
next()
|
||||
}
|
||||
|
||||
!$${call}($$spfx) {
|
||||
!$${call}($$spfx, $$lpfx) {
|
||||
qtLog(" => source produced no result.")
|
||||
next()
|
||||
}
|
||||
|
||||
# if the library defines a test, use it to verify the source.
|
||||
!isEmpty($${lpfx}.test) {
|
||||
$${lpfx}.literal_args = $$use_args $$qtConfLibraryArgs($$spfx)
|
||||
$${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) $$use_args
|
||||
$${lpfx}.host = $$eval($${spfx}.host)
|
||||
!qtConfTest_compile($$lpfx) {
|
||||
qtLog(" => source failed verification.")
|
||||
@ -657,11 +728,12 @@ defineTest(qtConfHandleLibrary) {
|
||||
for (b, $${spfx}.builds._KEYS_): \
|
||||
$${lpfx}.cache += sources.$${s}.builds.$${b}
|
||||
|
||||
# immediately output the library as well.
|
||||
qtConfExportLibrary($${spfx}, $$eval($${lpfx}.export))
|
||||
|
||||
$${lpfx}.source = $$s
|
||||
export($${lpfx}.source)
|
||||
|
||||
# immediately output the library as well.
|
||||
qtConfExportLibrary($$1)
|
||||
|
||||
result = true
|
||||
break()
|
||||
}
|
||||
@ -679,27 +751,76 @@ defineTest(qtConfTest_library) {
|
||||
}
|
||||
|
||||
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 =
|
||||
contains($${currentConfig}.libraries._KEYS_, $$u) {
|
||||
libConfig = $${currentConfig}
|
||||
exports = $$eval($${currentConfig}.exports.$$u)
|
||||
!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)
|
||||
} else {
|
||||
# otherwise, verify that all options were resolved.
|
||||
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_CONFIG_DEPS) {
|
||||
contains($${d}.libraries._KEYS_, $$u) {
|
||||
libConfig = $$d
|
||||
break()
|
||||
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
|
||||
break()
|
||||
}
|
||||
for (x, exports) {
|
||||
isEmpty($${d}.libraries.$${x}.result): \
|
||||
error("Test $$1 refers to unresolved library export '$$u' in '$$d'")
|
||||
}
|
||||
return(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
isEmpty(libConfig) {
|
||||
nu = $$upper($$u)
|
||||
libs = $$eval(QMAKE_LIBS_$$nu) $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$${nu}_RELEASE)
|
||||
defines = $$eval(QMAKE_DEFINES_$${nu})
|
||||
includes = $$eval(QMAKE_INCDIR_$${nu})
|
||||
|
||||
isEmpty(libs):isEmpty(defines):isEmpty(includes): \
|
||||
!defined(QMAKE_LIBS_$$nu, var): \
|
||||
error("Test $$1 tries to use undeclared library '$$u'")
|
||||
# using an external library by exported name.
|
||||
$${1}.literal_args += $$system_quote(QMAKE_USE += $$u)
|
||||
} else {
|
||||
lpfx = $${libConfig}.libraries.$${u}
|
||||
@ -1252,14 +1373,14 @@ defineTest(qtConfProcessFeatures) {
|
||||
# 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) {
|
||||
pad = $$num_add($$str_size($$QT_CONF_REPORT_PADDING), -$$str_size($${1}))
|
||||
lessThan(pad, 0): pad = 0
|
||||
str = "$$1 $$str_member($$QT_CONF_REPORT_PADDING, 0, $$pad)"
|
||||
|
||||
qtConfAddReport("$$str $${2}")
|
||||
qtConfAddReport($$qtConfPadCols($$1, "........................................", $$2))
|
||||
}
|
||||
|
||||
defineReplace(qtConfCollectFeatures) {
|
||||
@ -1749,8 +1870,6 @@ for(ever) {
|
||||
jsonFile = $$thisDir/configure.json
|
||||
priFile = $$thisDir/configure.pri
|
||||
|
||||
allConfigs += $$currentConfig
|
||||
|
||||
# load configuration data
|
||||
configure_data = $$cat($$jsonFile, blob)
|
||||
!parseJson(configure_data, $$currentConfig): \
|
||||
@ -1758,25 +1877,88 @@ for(ever) {
|
||||
exists($$priFile): \
|
||||
!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
|
||||
subconfigs =
|
||||
for(n, $${currentConfig}.subconfigs._KEYS_) {
|
||||
subconfig = $$eval($${currentConfig}.subconfigs.$${n})
|
||||
name = $$basename(subconfig)
|
||||
ex = $$eval(config.$${name}.dir)
|
||||
!isEmpty(ex): \
|
||||
error("Basename clash between $$thisDir/$$subconfig and $${ex}.")
|
||||
config.$${name}.dir = $$thisDir/$$subconfig
|
||||
subconfigs += $$name
|
||||
}
|
||||
configsToProcess = $$subconfigs $$configsToProcess
|
||||
}
|
||||
|
||||
for (currentConfig, allConfigs): \
|
||||
qtConfSetupLibraries()
|
||||
|
||||
QMAKE_SAVED_ARGS = $$QMAKE_EXTRA_ARGS
|
||||
QMAKE_REDO_CONFIG = false
|
||||
qtConfParseCommandLine()
|
||||
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) {
|
||||
qtConfSetModuleName()
|
||||
qtConfSetupModuleOutputs()
|
||||
@ -1833,11 +2015,15 @@ for (currentConfig, allConfigs) {
|
||||
|
||||
# correctly setup dependencies
|
||||
QMAKE_CONFIG_DEPS = global global_private
|
||||
QMAKE_LIBRARY_DEPS = $$eval(config.modules.global)
|
||||
!isEmpty($${currentConfig}.module) {
|
||||
for (d, $${currentConfig}.depends._KEYS_) {
|
||||
dep = $$replace($${currentConfig}.depends.$$d, -private$, _private)
|
||||
dep *= $$replace(dep, _private$, )
|
||||
gdep = $$replace(dep, _private$, )
|
||||
dep *= $$gdep
|
||||
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
|
||||
MODULE_RELEASE_LIBS = -L$$DESTDIR -l$$TARGET
|
||||
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}_RELEASE = $$val_escape(MODULE_RELEASE_LIBS)"
|
||||
} else {
|
||||
|
@ -59,7 +59,7 @@ defineReplace(qtExportLibsForModule) {
|
||||
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \
|
||||
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
|
||||
for (var, vars) {
|
||||
!isEmpty($$var): \
|
||||
defined($$var, var): \
|
||||
result += "$$var = $$val_escape($$var)"
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ QMAKE_CFLAGS_APP = -fPIC
|
||||
QMAKE_CFLAGS_DEPS = -M
|
||||
QMAKE_CFLAGS_WARN_ON = -w1 -Wall -Wcheck -wd1572,873,2259,2261,3373
|
||||
QMAKE_CFLAGS_WARN_OFF = -w
|
||||
QMAKE_CFLAGS_RELEASE = -O2 -ansi-alias -fstrict-aliasing
|
||||
QMAKE_CFLAGS_RELEASE = -O2
|
||||
QMAKE_CFLAGS_DEBUG = -O0 -g
|
||||
QMAKE_CFLAGS_SHLIB = -fPIC
|
||||
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
||||
|
@ -16,8 +16,8 @@ QMAKE_CFLAGS =
|
||||
QMAKE_CFLAGS_DEPS = -M
|
||||
QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125,2259,2261,3280,3373
|
||||
QMAKE_CFLAGS_WARN_OFF = -w
|
||||
QMAKE_CFLAGS_RELEASE =
|
||||
QMAKE_CFLAGS_DEBUG = -g
|
||||
QMAKE_CFLAGS_RELEASE = -O2
|
||||
QMAKE_CFLAGS_DEBUG = -g -O0
|
||||
QMAKE_CFLAGS_SHLIB = -fPIC
|
||||
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
||||
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>
|
||||
## Contact: http://www.qt.io/licensing/
|
||||
## Contact: https://www.qt.io/licensing/
|
||||
##
|
||||
## This file is the build configuration utility of the Qt Toolkit.
|
||||
##
|
||||
## $QT_BEGIN_LICENSE:LGPL21$
|
||||
## $QT_BEGIN_LICENSE:LGPL$
|
||||
## Commercial License Usage
|
||||
## Licensees holding valid commercial Qt licenses may use this file in
|
||||
## accordance with the commercial license agreement provided with the
|
||||
## Software or, alternatively, in accordance with the terms contained in
|
||||
## a written agreement between you and The Qt Company. For licensing terms
|
||||
## and conditions see http://www.qt.io/terms-conditions. For further
|
||||
## information use the contact form at http://www.qt.io/contact-us.
|
||||
## and conditions see https://www.qt.io/terms-conditions. For further
|
||||
## information use the contact form at https://www.qt.io/contact-us.
|
||||
##
|
||||
## GNU Lesser General Public License Usage
|
||||
## Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
## General Public License version 2.1 or version 3 as published by the Free
|
||||
## Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
## LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
## following information to ensure the GNU Lesser General Public License
|
||||
## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
## General Public License version 3 as published by the Free Software
|
||||
## Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
## packaging of this file. Please review the following information to
|
||||
## ensure the GNU Lesser General Public License version 3 requirements
|
||||
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
##
|
||||
## As a special exception, The Qt Company gives you certain additional
|
||||
## rights. These rights are described in The Qt Company LGPL Exception
|
||||
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
## GNU General Public License Usage
|
||||
## Alternatively, this file may be used under the terms of the GNU
|
||||
## General Public License version 2.0 or (at your option) the GNU General
|
||||
## Public license version 3 or any later version approved by the KDE Free
|
||||
## Qt Foundation. The licenses are as published by the Free Software
|
||||
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
## included in the packaging of this file. Please review the following
|
||||
## information to ensure the GNU General Public License requirements will
|
||||
## be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
## https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
##
|
||||
## $QT_END_LICENSE$
|
||||
##
|
||||
|
@ -279,6 +279,9 @@ public class QtActivityDelegate
|
||||
|
||||
if (m_softInputMode != 0) {
|
||||
m_activity.getWindow().setSoftInputMode(m_softInputMode);
|
||||
final boolean softInputIsHidden = (m_softInputMode & WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) != 0;
|
||||
if (softInputIsHidden)
|
||||
return;
|
||||
} else {
|
||||
if (height > visibleHeight)
|
||||
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);
|
||||
}
|
||||
|
||||
#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
|
||||
{
|
||||
typedef void result_type;
|
||||
@ -231,6 +257,20 @@ struct ReduceResultType<T(C::*)(U)>
|
||||
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>
|
||||
struct MapResultType
|
||||
{
|
||||
@ -249,6 +289,20 @@ struct MapResultType<void, T(C::*)() const>
|
||||
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
|
||||
|
||||
template <template <typename> class InputSequence, typename MapFunctor, typename T>
|
||||
@ -269,6 +323,21 @@ struct MapResultType<InputSequence<T>, U(C::*)() const>
|
||||
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
|
||||
|
||||
template <class MapFunctor>
|
||||
@ -289,6 +358,21 @@ struct MapResultType<QStringList, U(C::*)() const>
|
||||
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.
|
||||
|
||||
#endif //Q_QDOC
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -55,6 +55,6 @@ QRect r2(QPoint(100, 200), QSize(11, 16));
|
||||
|
||||
|
||||
//! [1]
|
||||
QRectF r1(100, 200, 11, 16);
|
||||
QRectF r2(QPoint(100, 200), QSize(11, 16));
|
||||
QRectF r1(100.0, 200.1, 11.2, 16.3);
|
||||
QRectF r2(QPointF(100.0, 200.1), QSizeF(11.2, 16.3));
|
||||
//! [1]
|
||||
|
@ -80,13 +80,16 @@ gcc:ltcg {
|
||||
SOURCES += $$VERSIONTAGGING_SOURCES
|
||||
}
|
||||
|
||||
QMAKE_QFLOAT16_TABLES_GENERATE = global/qfloat16.h
|
||||
# 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
|
||||
|
||||
qtPrepareTool(QMAKE_QFLOAT16_TABLES, qfloat16-tables)
|
||||
qtPrepareTool(QMAKE_QFLOAT16_TABLES, qfloat16-tables)
|
||||
|
||||
qfloat16_tables.commands = $$QMAKE_QFLOAT16_TABLES ${QMAKE_FILE_OUT}
|
||||
qfloat16_tables.output = global/qfloat16tables.cpp
|
||||
qfloat16_tables.depends = $$QMAKE_QFLOAT16_TABLES
|
||||
qfloat16_tables.input = QMAKE_QFLOAT16_TABLES_GENERATE
|
||||
qfloat16_tables.variable_out = SOURCES
|
||||
QMAKE_EXTRA_COMPILERS += qfloat16_tables
|
||||
qfloat16_tables.commands = $$QMAKE_QFLOAT16_TABLES ${QMAKE_FILE_OUT}
|
||||
qfloat16_tables.output = global/qfloat16tables.cpp
|
||||
qfloat16_tables.depends = $$QMAKE_QFLOAT16_TABLES
|
||||
qfloat16_tables.input = QMAKE_QFLOAT16_TABLES_GENERATE
|
||||
qfloat16_tables.variable_out = SOURCES
|
||||
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_TabletTracking = 129,
|
||||
|
||||
// Add new attributes before this line
|
||||
WA_AttributeCount
|
||||
};
|
||||
|
@ -1139,6 +1139,9 @@
|
||||
\value WA_StyleSheet Indicates that the widget is styled using a
|
||||
\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
|
||||
translucent background, i.e., any non-opaque regions of the widgets will be
|
||||
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);
|
||||
}
|
||||
|
||||
// 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
|
||||
bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool createParents)
|
||||
{
|
||||
QString dirName = entry.filePath();
|
||||
if (createParents) {
|
||||
dirName = QDir::cleanPath(dirName);
|
||||
for (int oldslash = -1, slash=0; slash != -1; oldslash = slash) {
|
||||
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('/')))
|
||||
|
||||
// Darwin doesn't support trailing /'s, so remove for everyone
|
||||
while (dirName.size() > 1 && dirName.endsWith(QLatin1Char('/')))
|
||||
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
|
||||
|
@ -276,10 +276,11 @@ static QVector<QLoggingRule> loadRulesFromFile(const QString &filePath)
|
||||
*/
|
||||
void QLoggingRegistry::init()
|
||||
{
|
||||
QVector<QLoggingRule> er, qr, cr;
|
||||
// get rules from environment
|
||||
const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF");
|
||||
if (!rulesFilePath.isEmpty())
|
||||
envRules = loadRulesFromFile(QFile::decodeName(rulesFilePath));
|
||||
er = loadRulesFromFile(QFile::decodeName(rulesFilePath));
|
||||
|
||||
const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES").replace(';', '\n');
|
||||
if (!rulesSrc.isEmpty()) {
|
||||
@ -287,7 +288,7 @@ void QLoggingRegistry::init()
|
||||
QLoggingSettingsParser parser;
|
||||
parser.setSection(QStringLiteral("Rules"));
|
||||
parser.setContent(stream);
|
||||
envRules += parser.rules();
|
||||
er += parser.rules();
|
||||
}
|
||||
|
||||
const QString configFileName = QStringLiteral("qtlogging.ini");
|
||||
@ -296,17 +297,22 @@ void QLoggingRegistry::init()
|
||||
// get rules from Qt data configuration path
|
||||
const QString qtConfigPath
|
||||
= QDir(QLibraryInfo::location(QLibraryInfo::DataPath)).absoluteFilePath(configFileName);
|
||||
qtConfigRules = loadRulesFromFile(qtConfigPath);
|
||||
qr = loadRulesFromFile(qtConfigPath);
|
||||
#endif
|
||||
|
||||
// get rules from user's/system configuration
|
||||
const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation,
|
||||
QString::fromLatin1("QtProject/") + configFileName);
|
||||
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()) {
|
||||
QMutexLocker locker(®istryMutex);
|
||||
updateRules();
|
||||
}
|
||||
}
|
||||
@ -347,11 +353,11 @@ void QLoggingRegistry::setApiRules(const QString &content)
|
||||
parser.setSection(QStringLiteral("Rules"));
|
||||
parser.setContent(content);
|
||||
|
||||
QMutexLocker locker(®istryMutex);
|
||||
|
||||
if (qtLoggingDebug())
|
||||
debugMsg("Loading logging rules set by QLoggingCategory::setFilterRules ...");
|
||||
|
||||
const QMutexLocker locker(®istryMutex);
|
||||
|
||||
apiRules = parser.rules();
|
||||
|
||||
updateRules();
|
||||
@ -405,6 +411,8 @@ QLoggingRegistry *QLoggingRegistry::instance()
|
||||
/*!
|
||||
\internal
|
||||
Updates category settings according to rules.
|
||||
|
||||
As a category filter, it is run with registryMutex held.
|
||||
*/
|
||||
void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
|
||||
{
|
||||
|
@ -129,6 +129,7 @@ private:
|
||||
|
||||
QMutex registryMutex;
|
||||
|
||||
// protected by mutex:
|
||||
QVector<QLoggingRule> qtConfigRules;
|
||||
QVector<QLoggingRule> configRules;
|
||||
QVector<QLoggingRule> envRules;
|
||||
|
@ -844,7 +844,8 @@ static bool startDetachedUacPrompt(const QString &programIn, const QStringList &
|
||||
SHELLEXECUTEINFOW shellExecuteExInfo;
|
||||
memset(&shellExecuteExInfo, 0, 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";
|
||||
const QString program = QDir::toNativeSeparators(programIn);
|
||||
shellExecuteExInfo.lpFile = reinterpret_cast<LPCWSTR>(program.utf16());
|
||||
|
@ -4169,10 +4169,10 @@ QUrl QUrl::fromUserInput(const QString &userInput, const QString &workingDirecto
|
||||
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)
|
||||
if (url.isRelative() && !QDir::isAbsolutePath(trimmedString)) {
|
||||
QFileInfo fileInfo(QDir(workingDirectory), trimmedString);
|
||||
if (url.isRelative() && !QDir::isAbsolutePath(userInput)) {
|
||||
QFileInfo fileInfo(QDir(workingDirectory), userInput);
|
||||
if ((options & AssumeLocalFile) || fileInfo.exists())
|
||||
return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
|
||||
}
|
||||
|
@ -284,6 +284,8 @@ public:
|
||||
|
||||
Pointer = 218, // QQuickPointerEvent; ### Qt 6: QPointerEvent
|
||||
|
||||
TabletTrackingChange = 219, // tablet tracking state has changed
|
||||
|
||||
// 512 reserved for Qt Jambi's MetaCall event
|
||||
// 513 reserved for Qt Jambi's DeleteOnMainThread event
|
||||
|
||||
|
@ -44,7 +44,6 @@
|
||||
#include <QtCore/qthread.h>
|
||||
#include <QtCore/private/qcoreapplication_p.h>
|
||||
#include <QtCore/private/qcore_unix_p.h>
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <QtCore/private/qthread_p.h>
|
||||
|
||||
#include <limits>
|
||||
@ -59,11 +58,13 @@
|
||||
|
||||
QT_USE_NAMESPACE
|
||||
|
||||
@interface RunLoopModeTracker : NSObject {
|
||||
@interface QT_MANGLE_NAMESPACE(RunLoopModeTracker) : NSObject {
|
||||
QStack<CFStringRef> m_runLoopModes;
|
||||
}
|
||||
@end
|
||||
|
||||
QT_NAMESPACE_ALIAS_OBJC_CLASS(RunLoopModeTracker);
|
||||
|
||||
@implementation RunLoopModeTracker
|
||||
|
||||
- (id) init
|
||||
|
@ -90,14 +90,11 @@
|
||||
#include <QtCore/qabstracteventdispatcher.h>
|
||||
#include <QtCore/private/qtimerinfo_unix_p.h>
|
||||
#include <QtCore/private/qcfsocketnotifier_p.h>
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <QtCore/qdebug.h>
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
|
||||
#ifdef __OBJC__
|
||||
@class RunLoopModeTracker;
|
||||
#else
|
||||
typedef struct objc_object RunLoopModeTracker;
|
||||
#endif
|
||||
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(RunLoopModeTracker));
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -253,7 +250,7 @@ private:
|
||||
RunLoopSource<> m_postedEventsRunLoopSource;
|
||||
RunLoopObserver<> m_runLoopActivityObserver;
|
||||
|
||||
RunLoopModeTracker *m_runLoopModeTracker;
|
||||
QT_MANGLE_NAMESPACE(RunLoopModeTracker) *m_runLoopModeTracker;
|
||||
|
||||
QTimerInfoList m_timerInfoList;
|
||||
CFRunLoopTimerRef m_runLoopTimer;
|
||||
|
@ -296,12 +296,15 @@ QMimeGlobMatchResult QMimeBinaryProvider::findByFileName(const QString &fileName
|
||||
const QString lowerFileName = fileName.toLower();
|
||||
// TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
|
||||
for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
|
||||
// Check literals (e.g. "Makefile")
|
||||
matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName);
|
||||
// Check complex globs (e.g. "callgrind.out[0-9]*")
|
||||
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 numRoots = cacheFile->getUint32(reverseSuffixTreeOffset);
|
||||
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())
|
||||
matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
|
||||
}
|
||||
|
@ -57,11 +57,22 @@
|
||||
#include "QtCore/qobject.h"
|
||||
#include "QtCore/qstringlist.h"
|
||||
#include "QtCore/qjsonobject.h"
|
||||
#include "QtCore/qjsondocument.h"
|
||||
#include "QtCore/qmap.h"
|
||||
#include "QtCore/qendian.h"
|
||||
#include "private/qlibrary_p.h"
|
||||
|
||||
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 Q_CORE_EXPORT QFactoryLoader : public QObject
|
||||
{
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
#ifndef QT_NO_LIBRARY
|
||||
|
||||
#include "qfactoryloader_p.h"
|
||||
#include "qlibrary_p.h"
|
||||
#include <qstringlist.h>
|
||||
#include <qfile.h>
|
||||
|
@ -58,25 +58,12 @@
|
||||
#include "QtCore/qstringlist.h"
|
||||
#include "QtCore/qplugin.h"
|
||||
#include "QtCore/qsharedpointer.h"
|
||||
#include "QtCore/qjsonobject.h"
|
||||
#include "QtCore/qjsondocument.h"
|
||||
#include "QtCore/qendian.h"
|
||||
#ifdef Q_OS_WIN
|
||||
# include "QtCore/qt_windows.h"
|
||||
#endif
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
||||
#include "qcoreapplication.h"
|
||||
#include "qpluginloader.h"
|
||||
#include <qfileinfo.h>
|
||||
#include "qlibrary_p.h"
|
||||
#include "qfactoryloader_p.h"
|
||||
#include "qdebug.h"
|
||||
#include "qdir.h"
|
||||
|
||||
|
@ -392,13 +392,13 @@ bool QReadWriteLock::tryLockForWrite(int timeout)
|
||||
*/
|
||||
void QReadWriteLock::unlock()
|
||||
{
|
||||
QReadWriteLockPrivate *d = d_ptr.load();
|
||||
QReadWriteLockPrivate *d = d_ptr.loadAcquire();
|
||||
while (true) {
|
||||
Q_ASSERT_X(d, "QReadWriteLock::unlock()", "Cannot unlock an unlocked lock");
|
||||
|
||||
// Fast case: no contention: (no waiters, no other readers)
|
||||
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;
|
||||
return;
|
||||
}
|
||||
@ -407,7 +407,7 @@ void QReadWriteLock::unlock()
|
||||
Q_ASSERT(quintptr(d) > (1U<<4)); //otherwise that would be the fast case
|
||||
// Just decrease the reader's count.
|
||||
auto val = reinterpret_cast<QReadWriteLockPrivate *>(quintptr(d) - (1U<<4));
|
||||
if (!d_ptr.testAndSetRelease(d, val, d))
|
||||
if (!d_ptr.testAndSetOrdered(d, val, d))
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
@ -140,8 +140,6 @@ struct QByteArrayDataPtr
|
||||
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(size, sizeof(QByteArrayData)) \
|
||||
/**/
|
||||
|
||||
#if defined(Q_COMPILER_LAMBDA)
|
||||
|
||||
# define QByteArrayLiteral(str) \
|
||||
([]() -> QByteArray { \
|
||||
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
|
||||
{
|
||||
private:
|
||||
|
@ -125,7 +125,7 @@ private:
|
||||
friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QEasingCurve &);
|
||||
#endif
|
||||
};
|
||||
Q_DECLARE_TYPEINFO(QEasingCurve, Q_MOVABLE_TYPE);
|
||||
Q_DECLARE_SHARED(QEasingCurve)
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QEasingCurve &item);
|
||||
|
@ -237,7 +237,7 @@ inline int QFreeList<T, ConstantsType>::next()
|
||||
int id, newid, at;
|
||||
ElementType *v;
|
||||
do {
|
||||
id = _next.load();
|
||||
id = _next.loadAcquire();
|
||||
|
||||
at = id & ConstantsType::IndexMask;
|
||||
const int block = blockfor(at);
|
||||
@ -254,7 +254,7 @@ inline int QFreeList<T, ConstantsType>::next()
|
||||
}
|
||||
|
||||
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)",
|
||||
// id & ConstantsType::IndexMask,
|
||||
// newid & ConstantsType::IndexMask,
|
||||
|
@ -594,7 +594,6 @@ static QLocalePrivate *c_private()
|
||||
*/
|
||||
QSystemLocale::QSystemLocale()
|
||||
{
|
||||
delete _systemLocale;
|
||||
_systemLocale = this;
|
||||
|
||||
if (system_data)
|
||||
|
@ -1323,8 +1323,8 @@ QDebug operator<<(QDebug dbg, const QRect &r)
|
||||
rendering.
|
||||
|
||||
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
|
||||
creates two identical rectangles.
|
||||
height coordinates, or from a QPointF and a QSizeF. The following
|
||||
code creates two identical rectangles.
|
||||
|
||||
\snippet code/src_corelib_tools_qrect.cpp 1
|
||||
|
||||
@ -1344,7 +1344,7 @@ QDebug operator<<(QDebug dbg, const QRect &r)
|
||||
translated copy of this rectangle.
|
||||
|
||||
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
|
||||
the setSize(), setWidth() or setHeight() functions. Alternatively,
|
||||
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
|
||||
{
|
||||
if (hasTransitions())
|
||||
return d->toOffsetData(d->data(forDateTime.toMSecsSinceEpoch()));
|
||||
return QTimeZonePrivate::toOffsetData(d->data(forDateTime.toMSecsSinceEpoch()));
|
||||
else
|
||||
return d->invalidOffsetData();
|
||||
return QTimeZonePrivate::invalidOffsetData();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -712,9 +712,9 @@ bool QTimeZone::hasTransitions() const
|
||||
QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime) const
|
||||
{
|
||||
if (hasTransitions())
|
||||
return d->toOffsetData(d->nextTransition(afterDateTime.toMSecsSinceEpoch()));
|
||||
return QTimeZonePrivate::toOffsetData(d->nextTransition(afterDateTime.toMSecsSinceEpoch()));
|
||||
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
|
||||
{
|
||||
if (hasTransitions())
|
||||
return d->toOffsetData(d->previousTransition(beforeDateTime.toMSecsSinceEpoch()));
|
||||
return QTimeZonePrivate::toOffsetData(d->previousTransition(beforeDateTime.toMSecsSinceEpoch()));
|
||||
else
|
||||
return d->invalidOffsetData();
|
||||
return QTimeZonePrivate::invalidOffsetData();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -755,7 +755,7 @@ QTimeZone::OffsetDataList QTimeZone::transitions(const QDateTime &fromDateTime,
|
||||
toDateTime.toMSecsSinceEpoch());
|
||||
list.reserve(plist.count());
|
||||
for (const QTimeZonePrivate::Data &pdata : plist)
|
||||
list.append(d->toOffsetData(pdata));
|
||||
list.append(QTimeZonePrivate::toOffsetData(pdata));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ Q_FORWARD_DECLARE_OBJC_CLASS(NSTimeZone);
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class Q_CORE_EXPORT QTimeZonePrivate : public QSharedData
|
||||
class Q_AUTOTEST_EXPORT QTimeZonePrivate : public QSharedData
|
||||
{
|
||||
public:
|
||||
//Version of QTimeZone::OffsetData struct using msecs for efficiency
|
||||
|
@ -146,15 +146,35 @@ public:
|
||||
T value(int i, const T &defaultValue) const;
|
||||
|
||||
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);
|
||||
const int idx = s++;
|
||||
if (QTypeInfo<T>::isComplex) {
|
||||
new (ptr + idx) T(t);
|
||||
const int idx = s++;
|
||||
if (QTypeInfo<T>::isComplex) {
|
||||
new (ptr + idx) T(std::move(copy));
|
||||
} else {
|
||||
ptr[idx] = std::move(copy);
|
||||
}
|
||||
} else {
|
||||
ptr[idx] = t;
|
||||
const int idx = s++;
|
||||
if (QTypeInfo<T>::isComplex) {
|
||||
new (ptr + idx) T(t);
|
||||
} else {
|
||||
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);
|
||||
inline QVarLengthArray<T, Prealloc> &operator<<(const T &t)
|
||||
{ append(t); return *this; }
|
||||
@ -208,6 +228,7 @@ public:
|
||||
// STL compatibility:
|
||||
inline bool empty() const { return isEmpty(); }
|
||||
inline void push_back(const T &t) { append(t); }
|
||||
void push_back(T &&t) { append(std::move(t)); }
|
||||
inline void pop_back() { removeLast(); }
|
||||
inline T &front() { return first(); }
|
||||
inline const T &front() const { return first(); }
|
||||
|
@ -302,6 +302,34 @@
|
||||
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()
|
||||
\since 4.5
|
||||
|
@ -161,9 +161,10 @@
|
||||
"test": "unix/libpng",
|
||||
"sources": [
|
||||
{ "type": "pkgConfig", "args": "libpng" },
|
||||
{ "libs": "-llibpng -lzdll", "condition": "config.msvc" },
|
||||
{ "libs": "-lpng -lz", "condition": "!config.msvc" }
|
||||
]
|
||||
{ "libs": "-llibpng", "condition": "config.msvc" },
|
||||
{ "libs": "-lpng", "condition": "!config.msvc" }
|
||||
],
|
||||
"use": "zlib"
|
||||
},
|
||||
"mirclient": {
|
||||
"label": "Mir client libraries",
|
||||
@ -974,6 +975,7 @@
|
||||
"label": "QSystemTrayIcon",
|
||||
"purpose": "Provides an icon for an application in the system tray.",
|
||||
"section": "Utilities",
|
||||
"condition": "features.temporaryfile",
|
||||
"output": [ "publicFeature", "feature" ]
|
||||
},
|
||||
"accessibility": {
|
||||
|
@ -190,32 +190,42 @@ enum _qt_BuiltInFormatType {
|
||||
_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
|
||||
{
|
||||
const char *extension;
|
||||
const char *mimeType;
|
||||
char extension[4];
|
||||
char mimeType[MAX_MT_SIZE];
|
||||
};
|
||||
|
||||
#undef MAX_MT_SIZE
|
||||
|
||||
static const _qt_BuiltInFormatStruct _qt_BuiltInFormats[] = {
|
||||
#ifndef QT_NO_IMAGEFORMAT_PNG
|
||||
{"png", "image/png"},
|
||||
{"png", "png"},
|
||||
#endif
|
||||
#ifndef QT_NO_IMAGEFORMAT_BMP
|
||||
{"bmp", "image/bmp"},
|
||||
{"bmp", "bmp"},
|
||||
#endif
|
||||
#ifndef QT_NO_IMAGEFORMAT_PPM
|
||||
{"ppm", "image/x-portable-pixmap"},
|
||||
{"pgm", "image/x-portable-graymap"},
|
||||
{"pbm", "image/x-portable-bitmap"},
|
||||
{"ppm", "x-portable-pixmap"},
|
||||
{"pgm", "x-portable-graymap"},
|
||||
{"pbm", "x-portable-bitmap"},
|
||||
#endif
|
||||
#ifndef QT_NO_IMAGEFORMAT_XBM
|
||||
{"xbm", "image/x-xbitmap"},
|
||||
{"xbm", "x-xbitmap"},
|
||||
#endif
|
||||
#ifndef QT_NO_IMAGEFORMAT_XPM
|
||||
{"xpm", "image/x-xpixmap"},
|
||||
{"xpm", "x-xpixmap"},
|
||||
#endif
|
||||
{"", ""}
|
||||
};
|
||||
Q_STATIC_ASSERT(_qt_NumFormats == sizeof _qt_BuiltInFormats / sizeof *_qt_BuiltInFormats);
|
||||
|
||||
static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
|
||||
const QByteArray &format,
|
||||
@ -1604,8 +1614,8 @@ QList<QByteArray> QImageReader::supportedMimeTypes()
|
||||
{
|
||||
QList<QByteArray> mimeTypes;
|
||||
mimeTypes.reserve(_qt_NumFormats);
|
||||
for (int i = 0; i < _qt_NumFormats; ++i)
|
||||
mimeTypes << _qt_BuiltInFormats[i].mimeType;
|
||||
for (const auto &fmt : _qt_BuiltInFormats)
|
||||
mimeTypes.append(QByteArrayLiteral("image/") + fmt.mimeType);
|
||||
|
||||
#ifndef QT_NO_IMAGEFORMATPLUGIN
|
||||
supportedImageHandlerMimeTypes(loader(), QImageIOPlugin::CanRead, &mimeTypes);
|
||||
|
@ -1814,6 +1814,15 @@ void QWindowPrivate::destroy()
|
||||
|
||||
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);
|
||||
QGuiApplication::sendEvent(q, &e);
|
||||
|
||||
|
@ -532,7 +532,7 @@ GLuint QOpenGLEngineShaderManager::getUniformLocation(Uniform id)
|
||||
if (uniformLocations.isEmpty())
|
||||
uniformLocations.fill(GLuint(-1), NumUniforms);
|
||||
|
||||
static const char *const uniformNames[] = {
|
||||
const char uniformNames[][26] = {
|
||||
"imageTexture",
|
||||
"patternColor",
|
||||
"globalOpacity",
|
||||
|
@ -1006,7 +1006,7 @@ bool QBrush::operator==(const QBrush &b) const
|
||||
*/
|
||||
QDebug operator<<(QDebug dbg, const QBrush &b)
|
||||
{
|
||||
static const char *const BRUSH_STYLES[] = {
|
||||
static const char BRUSH_STYLES[][24] = {
|
||||
"NoBrush",
|
||||
"SolidPattern",
|
||||
"Dense1Pattern",
|
||||
@ -1025,7 +1025,7 @@ QDebug operator<<(QDebug dbg, const QBrush &b)
|
||||
"LinearGradientPattern",
|
||||
"RadialGradientPattern",
|
||||
"ConicalGradientPattern",
|
||||
0, 0, 0, 0, 0, 0,
|
||||
"", "", "", "", "", "",
|
||||
"TexturePattern" // 24
|
||||
};
|
||||
|
||||
|
@ -1118,16 +1118,16 @@ QDataStream & operator>>(QDataStream &s, QTransform &t)
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
QDebug operator<<(QDebug dbg, const QTransform &m)
|
||||
{
|
||||
static const char *const typeStr[] =
|
||||
static const char typeStr[][12] =
|
||||
{
|
||||
"TxNone",
|
||||
"TxTranslate",
|
||||
"TxScale",
|
||||
0,
|
||||
"",
|
||||
"TxRotate",
|
||||
0, 0, 0,
|
||||
"", "", "",
|
||||
"TxShear",
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
"", "", "", "", "", "", "",
|
||||
"TxProject"
|
||||
};
|
||||
|
||||
|
@ -265,7 +265,7 @@ void QTextDocumentPrivate::clear()
|
||||
unreachableCharacterCount = 0;
|
||||
modifiedState = 0;
|
||||
modified = false;
|
||||
formats = QTextFormatCollection();
|
||||
formats.clear();
|
||||
int len = fragments.length();
|
||||
fragments.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()
|
||||
{
|
||||
}
|
||||
|
||||
void QTextFormatCollection::clear()
|
||||
{
|
||||
formats.clear();
|
||||
objFormats.clear();
|
||||
hashes.clear();
|
||||
}
|
||||
|
||||
int QTextFormatCollection::indexForFormat(const QTextFormat &format)
|
||||
{
|
||||
uint hash = getHash(format.d, format.format_type);
|
||||
|
@ -63,8 +63,7 @@ public:
|
||||
QTextFormatCollection() {}
|
||||
~QTextFormatCollection();
|
||||
|
||||
QTextFormatCollection(const QTextFormatCollection &rhs);
|
||||
QTextFormatCollection &operator=(const QTextFormatCollection &rhs);
|
||||
void clear();
|
||||
|
||||
inline QTextFormat objectFormat(int objectIndex) const
|
||||
{ return format(objectFormatIndex(objectIndex)); }
|
||||
@ -104,6 +103,8 @@ public:
|
||||
|
||||
private:
|
||||
QFont defaultFnt;
|
||||
|
||||
Q_DISABLE_COPY(QTextFormatCollection)
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -39,9 +39,9 @@
|
||||
|
||||
#include "qhsts_p.h"
|
||||
|
||||
#include "QtCore/qstringlist.h"
|
||||
|
||||
#include "QtCore/private/qipaddress_p.h"
|
||||
#include "QtCore/qvector.h"
|
||||
#include "QtCore/qlist.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -84,7 +84,7 @@ void QHstsCache::updateFromHeaders(const QList<QPair<QByteArray, QByteArray>> &h
|
||||
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)
|
||||
updateKnownHost(policy.host(), policy.expiry(), policy.includesSubDomains());
|
||||
@ -183,9 +183,13 @@ void QHstsCache::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
|
||||
|
@ -57,26 +57,28 @@
|
||||
#include <QtCore/qdatetime.h>
|
||||
#include <QtCore/qstring.h>
|
||||
#include <QtCore/qglobal.h>
|
||||
#include <QtCore/qlist.h>
|
||||
#include <QtCore/qpair.h>
|
||||
#include <QtCore/qurl.h>
|
||||
#include <QtCore/qmap.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
template<typename T> class QList;
|
||||
template <typename T> class QVector;
|
||||
|
||||
class Q_AUTOTEST_EXPORT QHstsCache
|
||||
{
|
||||
public:
|
||||
|
||||
void updateFromHeaders(const QList<QPair<QByteArray, QByteArray>> &headers,
|
||||
const QUrl &url);
|
||||
void updateFromPolicies(const QList<QHstsPolicy> &hosts);
|
||||
void updateFromPolicies(const QVector<QHstsPolicy> &hosts);
|
||||
void updateKnownHost(const QUrl &url, const QDateTime &expires,
|
||||
bool includeSubDomains);
|
||||
bool isKnownHost(const QUrl &url) const;
|
||||
void clear();
|
||||
|
||||
QList<QHstsPolicy> policies() const;
|
||||
QVector<QHstsPolicy> policies() const;
|
||||
|
||||
private:
|
||||
|
||||
|
@ -60,10 +60,10 @@ QT_BEGIN_NAMESPACE
|
||||
applies to subdomains, either in the constructor or by calling setExpiry(),
|
||||
setHost() and setIncludesSubdomains().
|
||||
|
||||
\sa QNetworkAccessManager::enableStrictTransportSecurity()
|
||||
\sa QNetworkAccessManager::setStrictTransportSecurityEnabled()
|
||||
*/
|
||||
|
||||
class QHstsPolicyPrivate
|
||||
class QHstsPolicyPrivate : public QSharedData
|
||||
{
|
||||
public:
|
||||
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
|
||||
not included.
|
||||
@ -121,17 +130,7 @@ QHstsPolicy::~QHstsPolicy()
|
||||
*/
|
||||
QHstsPolicy &QHstsPolicy::operator=(const QHstsPolicy &other)
|
||||
{
|
||||
*d = *other.d;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Move-assignment operator.
|
||||
*/
|
||||
QHstsPolicy &QHstsPolicy::operator=(QHstsPolicy &&other) Q_DECL_NOTHROW
|
||||
{
|
||||
qSwap(d, other.d);
|
||||
d = other.d;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -195,15 +194,6 @@ bool QHstsPolicy::includesSubDomains() const
|
||||
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
|
||||
is greater than QDateTime::currentGetDateTimeUtc().
|
||||
|
@ -42,7 +42,7 @@
|
||||
|
||||
#include <QtNetwork/qtnetworkglobal.h>
|
||||
|
||||
#include <QtCore/qscopedpointer.h>
|
||||
#include <QtCore/qshareddata.h>
|
||||
#include <QtCore/qurl.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -55,13 +55,15 @@ class Q_NETWORK_EXPORT QHstsPolicy
|
||||
public:
|
||||
|
||||
QHstsPolicy();
|
||||
QHstsPolicy(const QDateTime &expiry, bool includeSubDomains, const QString &host,
|
||||
QUrl::ParsingMode mode = QUrl::DecodedMode);
|
||||
explicit QHstsPolicy(const QDateTime &expiry, bool includeSubDomains, const QString &host,
|
||||
QUrl::ParsingMode mode = QUrl::DecodedMode);
|
||||
QHstsPolicy(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();
|
||||
|
||||
void swap(QHstsPolicy &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
|
||||
|
||||
void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode);
|
||||
QString host(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const;
|
||||
void setExpiry(const QDateTime &expiry);
|
||||
@ -69,14 +71,25 @@ public:
|
||||
void setIncludesSubDomains(bool include);
|
||||
bool includesSubDomains() const;
|
||||
|
||||
bool operator==(const QHstsPolicy &rhs) const;
|
||||
bool isExpired() const;
|
||||
|
||||
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
|
||||
|
||||
#endif // QHSTSPOLICY_H
|
||||
|
@ -550,15 +550,15 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke
|
||||
// Check redirect url protocol
|
||||
const QUrl priorUrl(reply->request().url());
|
||||
if (redirectUrl.scheme() == QLatin1String("http") || redirectUrl.scheme() == QLatin1String("https")) {
|
||||
switch (reply->request().redirectsPolicy()) {
|
||||
case QNetworkRequest::NoLessSafeRedirectsPolicy:
|
||||
switch (reply->request().redirectPolicy()) {
|
||||
case QNetworkRequest::NoLessSafeRedirectPolicy:
|
||||
// Here we could handle https->http redirects as InsecureProtocolError.
|
||||
// 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,
|
||||
// after all. We cannot access QNAM's STS cache from here, so delegate
|
||||
// this check to QNetworkReplyHttpImpl.
|
||||
break;
|
||||
case QNetworkRequest::SameOriginRedirectsPolicy:
|
||||
case QNetworkRequest::SameOriginRedirectPolicy:
|
||||
if (priorUrl.host() != redirectUrl.host()
|
||||
|| priorUrl.scheme() != redirectUrl.scheme()
|
||||
|| priorUrl.port() != redirectUrl.port()) {
|
||||
@ -566,7 +566,7 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke
|
||||
return QUrl();
|
||||
}
|
||||
break;
|
||||
case QNetworkRequest::UserVerifiedRedirectsPolicy:
|
||||
case QNetworkRequest::UserVerifiedRedirectPolicy:
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(!"Unexpected redirect policy");
|
||||
|
@ -49,7 +49,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Oper
|
||||
: QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(0),
|
||||
autoDecompress(false), pipeliningAllowed(false), spdyAllowed(false), http2Allowed(false),
|
||||
withCredentials(true), preConnect(false), redirectCount(0),
|
||||
redirectsPolicy(QNetworkRequest::ManualRedirectsPolicy)
|
||||
redirectPolicy(QNetworkRequest::ManualRedirectPolicy)
|
||||
{
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest
|
||||
ssl(other.ssl),
|
||||
preConnect(other.preConnect),
|
||||
redirectCount(other.redirectCount),
|
||||
redirectsPolicy(other.redirectsPolicy)
|
||||
redirectPolicy(other.redirectPolicy)
|
||||
{
|
||||
}
|
||||
|
||||
@ -90,7 +90,7 @@ bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &ot
|
||||
&& (withCredentials == other.withCredentials)
|
||||
&& (ssl == other.ssl)
|
||||
&& (preConnect == other.preConnect)
|
||||
&& (redirectsPolicy == other.redirectsPolicy);
|
||||
&& (redirectPolicy == other.redirectPolicy);
|
||||
}
|
||||
|
||||
QByteArray QHttpNetworkRequest::methodName() const
|
||||
@ -231,17 +231,17 @@ void QHttpNetworkRequest::setPreConnect(bool preConnect)
|
||||
|
||||
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
|
||||
|
@ -131,8 +131,8 @@ public:
|
||||
void setPreConnect(bool preConnect);
|
||||
|
||||
bool isFollowRedirects() const;
|
||||
void setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy);
|
||||
QNetworkRequest::RedirectsPolicy redirectsPolicy() const;
|
||||
void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
|
||||
QNetworkRequest::RedirectPolicy redirectPolicy() const;
|
||||
|
||||
int redirectCount() const;
|
||||
void setRedirectCount(int count);
|
||||
@ -176,7 +176,7 @@ public:
|
||||
bool ssl;
|
||||
bool preConnect;
|
||||
int redirectCount;
|
||||
QNetworkRequest::RedirectsPolicy redirectsPolicy;
|
||||
QNetworkRequest::RedirectPolicy redirectPolicy;
|
||||
};
|
||||
|
||||
|
||||
|
@ -697,36 +697,22 @@ void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
|
||||
/*!
|
||||
\since 5.9
|
||||
|
||||
Enables HTTP Strict Transport Security (HSTS, RFC6797). When processing a
|
||||
request, QNetworkAccessManager automatically replaces "http" scheme with
|
||||
"https" and uses a secure transport if a host is a known HSTS host.
|
||||
Port 80 if it's set explicitly is replaced by port 443.
|
||||
If \a enabled is \c true, QNetworkAccessManager follows the HTTP Strict Transport
|
||||
Security policy (HSTS, RFC6797). When processing a request, QNetworkAccessManager
|
||||
automatically replaces the "http" scheme with "https" and uses a secure transport
|
||||
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
|
||||
received over a secure transport, QNetworkAccessManager will update its HSTS
|
||||
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);
|
||||
d->stsEnabled = true;
|
||||
}
|
||||
|
||||
/*!
|
||||
\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;
|
||||
d->stsEnabled = enabled;
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -735,9 +721,9 @@ void QNetworkAccessManager::disableStrictTransportSecurity()
|
||||
Returns true if HTTP Strict Transport Security (HSTS) was enabled. By default
|
||||
HSTS is disabled.
|
||||
|
||||
\sa enableStrictTransportSecurity
|
||||
\sa setStrictTransportSecurityEnabled()
|
||||
*/
|
||||
bool QNetworkAccessManager::strictTransportSecurityEnabled() const
|
||||
bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
|
||||
{
|
||||
Q_D(const QNetworkAccessManager);
|
||||
return d->stsEnabled;
|
||||
@ -761,7 +747,7 @@ bool QNetworkAccessManager::strictTransportSecurityEnabled() const
|
||||
\sa addStrictTransportSecurityHosts(), QHstsPolicy
|
||||
*/
|
||||
|
||||
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
|
||||
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QVector<QHstsPolicy> &knownHosts)
|
||||
{
|
||||
Q_D(QNetworkAccessManager);
|
||||
d->stsCache.updateFromPolicies(knownHosts);
|
||||
@ -776,7 +762,7 @@ void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPol
|
||||
|
||||
\sa addStrictTransportSecurityHosts(), QHstsPolicy
|
||||
*/
|
||||
QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
|
||||
QVector<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
|
||||
{
|
||||
Q_D(const QNetworkAccessManager);
|
||||
return d->stsCache.policies();
|
||||
@ -1171,7 +1157,7 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
|
||||
/*!
|
||||
\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.
|
||||
|
||||
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.
|
||||
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
|
||||
the default; clients relying on manual redirect handling are encouraged to set
|
||||
this policy explicitly in their code.
|
||||
|
||||
\sa redirectsPolicy(), QNetworkRequest::RedirectsPolicy,
|
||||
\sa redirectPolicy(), QNetworkRequest::RedirectPolicy,
|
||||
QNetworkRequest::FollowRedirectsAttribute
|
||||
*/
|
||||
void QNetworkAccessManager::setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy)
|
||||
void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
|
||||
{
|
||||
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.
|
||||
|
||||
\sa setRedirectsPolicy(), QNetworkRequest::RedirectsPolicy
|
||||
\sa setRedirectPolicy(), QNetworkRequest::RedirectPolicy
|
||||
*/
|
||||
QNetworkRequest::RedirectsPolicy QNetworkAccessManager::redirectsPolicy() const
|
||||
QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const
|
||||
{
|
||||
Q_D(const QNetworkAccessManager);
|
||||
return d->redirectsPolicy;
|
||||
return d->redirectPolicy;
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -1294,12 +1280,12 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
|
||||
Q_D(QNetworkAccessManager);
|
||||
|
||||
QNetworkRequest req(originalReq);
|
||||
if (req.attribute(QNetworkRequest::RedirectsPolicyAttribute).isNull()
|
||||
if (req.attribute(QNetworkRequest::RedirectPolicyAttribute).isNull()
|
||||
&& req.attribute(QNetworkRequest::FollowRedirectsAttribute).isNull()) {
|
||||
// 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.
|
||||
req.setAttribute(QNetworkRequest::RedirectsPolicyAttribute, redirectsPolicy());
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, redirectPolicy());
|
||||
}
|
||||
|
||||
bool isLocalFile = req.url().isLocalFile();
|
||||
@ -1390,7 +1376,7 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
|
||||
#endif
|
||||
) {
|
||||
#ifndef QT_NO_SSL
|
||||
if (strictTransportSecurityEnabled() && d->stsCache.isKnownHost(request.url())) {
|
||||
if (isStrictTransportSecurityEnabled() && d->stsCache.isKnownHost(request.url())) {
|
||||
QUrl stsUrl(request.url());
|
||||
// RFC6797, 8.3:
|
||||
// The UA MUST replace the URI scheme with "https" [RFC2818],
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
#include <QtNetwork/qtnetworkglobal.h>
|
||||
#include <QtNetwork/qnetworkrequest.h>
|
||||
#include <QtCore/QVector>
|
||||
#include <QtCore/QObject>
|
||||
#ifndef QT_NO_SSL
|
||||
#include <QtNetwork/QSslConfiguration>
|
||||
@ -121,11 +122,10 @@ public:
|
||||
QNetworkCookieJar *cookieJar() const;
|
||||
void setCookieJar(QNetworkCookieJar *cookieJar);
|
||||
|
||||
void enableStrictTransportSecurity();
|
||||
void disableStrictTransportSecurity();
|
||||
bool strictTransportSecurityEnabled() const;
|
||||
void addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts);
|
||||
QList<QHstsPolicy> strictTransportSecurityHosts() const;
|
||||
void setStrictTransportSecurityEnabled(bool enabled);
|
||||
bool isStrictTransportSecurityEnabled() const;
|
||||
void addStrictTransportSecurityHosts(const QVector<QHstsPolicy> &knownHosts);
|
||||
QVector<QHstsPolicy> strictTransportSecurityHosts() const;
|
||||
|
||||
QNetworkReply *head(const QNetworkRequest &request);
|
||||
QNetworkReply *get(const QNetworkRequest &request);
|
||||
@ -155,8 +155,8 @@ public:
|
||||
#endif
|
||||
void connectToHost(const QString &hostName, quint16 port = 80);
|
||||
|
||||
void setRedirectsPolicy(QNetworkRequest::RedirectsPolicy policy);
|
||||
QNetworkRequest::RedirectsPolicy redirectsPolicy() const;
|
||||
void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
|
||||
QNetworkRequest::RedirectPolicy redirectPolicy() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
#ifndef QT_NO_NETWORKPROXY
|
||||
|
@ -93,7 +93,7 @@ public:
|
||||
#endif
|
||||
cookieJarCreated(false),
|
||||
defaultAccessControl(true),
|
||||
redirectsPolicy(QNetworkRequest::ManualRedirectsPolicy),
|
||||
redirectPolicy(QNetworkRequest::ManualRedirectPolicy),
|
||||
authenticationManager(QSharedPointer<QNetworkAccessAuthenticationManager>::create())
|
||||
{
|
||||
#ifndef QT_NO_BEARERMANAGEMENT
|
||||
@ -196,7 +196,7 @@ public:
|
||||
|
||||
bool cookieJarCreated;
|
||||
bool defaultAccessControl;
|
||||
QNetworkRequest::RedirectsPolicy redirectsPolicy;
|
||||
QNetworkRequest::RedirectPolicy redirectPolicy;
|
||||
|
||||
// The cache with authorization data:
|
||||
QSharedPointer<QNetworkAccessAuthenticationManager> authenticationManager;
|
||||
|
@ -736,7 +736,7 @@ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config)
|
||||
this function has no effect.
|
||||
|
||||
\sa sslConfiguration(), sslErrors(), QSslSocket::ignoreSslErrors(),
|
||||
QNetworkAccessManager::enableStrictTransportSecurity()
|
||||
QNetworkAccessManager::setStrictTransportSecurityEnabled()
|
||||
*/
|
||||
void QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors)
|
||||
{
|
||||
|
@ -668,14 +668,14 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq
|
||||
}
|
||||
#endif
|
||||
|
||||
auto redirectsPolicy = QNetworkRequest::ManualRedirectsPolicy;
|
||||
const QVariant value = newHttpRequest.attribute(QNetworkRequest::RedirectsPolicyAttribute);
|
||||
auto redirectPolicy = QNetworkRequest::ManualRedirectPolicy;
|
||||
const QVariant value = newHttpRequest.attribute(QNetworkRequest::RedirectPolicyAttribute);
|
||||
if (value.isValid())
|
||||
redirectsPolicy = value.value<QNetworkRequest::RedirectsPolicy>();
|
||||
redirectPolicy = value.value<QNetworkRequest::RedirectPolicy>();
|
||||
else if (newHttpRequest.attribute(QNetworkRequest::FollowRedirectsAttribute).toBool())
|
||||
redirectsPolicy = QNetworkRequest::NoLessSafeRedirectsPolicy;
|
||||
redirectPolicy = QNetworkRequest::NoLessSafeRedirectPolicy;
|
||||
|
||||
httpRequest.setRedirectsPolicy(redirectsPolicy);
|
||||
httpRequest.setRedirectPolicy(redirectPolicy);
|
||||
|
||||
httpRequest.setPriority(convert(newHttpRequest.priority()));
|
||||
|
||||
@ -1155,7 +1155,7 @@ void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int htt
|
||||
|
||||
const bool isLessSafe = schemeBefore == QLatin1String("https")
|
||||
&& url.scheme() == QLatin1String("http");
|
||||
if (httpRequest.redirectsPolicy() == QNetworkRequest::NoLessSafeRedirectsPolicy
|
||||
if (httpRequest.redirectPolicy() == QNetworkRequest::NoLessSafeRedirectPolicy
|
||||
&& isLessSafe) {
|
||||
error(QNetworkReply::InsecureRedirectError,
|
||||
QCoreApplication::translate("QHttp", "Insecure redirect"));
|
||||
@ -1165,7 +1165,7 @@ void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int htt
|
||||
redirectRequest = createRedirectRequest(originalRequest, url, maxRedirectsRemaining);
|
||||
operation = getRedirectOperation(operation, httpStatus);
|
||||
|
||||
if (httpRequest.redirectsPolicy() != QNetworkRequest::UserVerifiedRedirectsPolicy)
|
||||
if (httpRequest.redirectPolicy() != QNetworkRequest::UserVerifiedRedirectPolicy)
|
||||
followRedirect();
|
||||
|
||||
emit q->redirected(url);
|
||||
|
@ -289,9 +289,9 @@ QT_BEGIN_NAMESPACE
|
||||
marked to be decompressed automatically.
|
||||
(This value was introduced in 5.9.)
|
||||
|
||||
\value RedirectsPolicyAttribute
|
||||
\value RedirectPolicyAttribute
|
||||
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 value was introduced in 5.9.)
|
||||
|
||||
@ -343,33 +343,33 @@ QT_BEGIN_NAMESPACE
|
||||
*/
|
||||
|
||||
/*!
|
||||
\enum QNetworkRequest::RedirectsPolicy
|
||||
\enum QNetworkRequest::RedirectPolicy
|
||||
\since 5.9
|
||||
|
||||
Indicates whether the Network Access API should automatically follow a
|
||||
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"
|
||||
or "https" -> "https" redirects are allowed.
|
||||
Equivalent to setting the old FollowRedirectsAttribute
|
||||
to true
|
||||
\value NoLessSafeRedirectPolicy Only "http"->"http", "http" -> "https"
|
||||
or "https" -> "https" redirects are allowed.
|
||||
Equivalent to setting the old FollowRedirectsAttribute
|
||||
to true
|
||||
|
||||
\value SameOriginRedirectsPolicy Require the same protocol, host and port.
|
||||
Note, http://example.com and http://example.com:80
|
||||
will fail with this policy (implicit/explicit ports
|
||||
are considered to be a mismatch).
|
||||
\value SameOriginRedirectPolicy Require the same protocol, host and port.
|
||||
Note, http://example.com and http://example.com:80
|
||||
will fail with this policy (implicit/explicit ports
|
||||
are considered to be a mismatch).
|
||||
|
||||
\value UserVerifiedRedirectsPolicy Client decides whether to follow each
|
||||
redirect by handling the redirected()
|
||||
signal, emitting redirectAllowed() on
|
||||
the QNetworkReply object to allow
|
||||
the redirect or aborting/finishing it to
|
||||
reject the redirect. This can be used,
|
||||
for example, to ask the user whether to
|
||||
accept the redirect, or to decide
|
||||
based on some app-specific configuration.
|
||||
\value UserVerifiedRedirectPolicy Client decides whether to follow each
|
||||
redirect by handling the redirected()
|
||||
signal, emitting redirectAllowed() on
|
||||
the QNetworkReply object to allow
|
||||
the redirect or aborting/finishing it to
|
||||
reject the redirect. This can be used,
|
||||
for example, to ask the user whether to
|
||||
accept the redirect, or to decide
|
||||
based on some app-specific configuration.
|
||||
*/
|
||||
|
||||
class QNetworkRequestPrivate: public QSharedData, public QNetworkHeadersPrivate
|
||||
|
@ -91,7 +91,7 @@ public:
|
||||
HTTP2AllowedAttribute,
|
||||
HTTP2WasUsedAttribute,
|
||||
OriginalContentLengthAttribute,
|
||||
RedirectsPolicyAttribute,
|
||||
RedirectPolicyAttribute,
|
||||
|
||||
User = 1000,
|
||||
UserMax = 32767
|
||||
@ -113,11 +113,11 @@ public:
|
||||
LowPriority = 5
|
||||
};
|
||||
|
||||
enum RedirectsPolicy {
|
||||
ManualRedirectsPolicy,
|
||||
NoLessSafeRedirectsPolicy,
|
||||
SameOriginRedirectsPolicy,
|
||||
UserVerifiedRedirectsPolicy
|
||||
enum RedirectPolicy {
|
||||
ManualRedirectPolicy,
|
||||
NoLessSafeRedirectPolicy,
|
||||
SameOriginRedirectPolicy,
|
||||
UserVerifiedRedirectPolicy
|
||||
};
|
||||
|
||||
|
||||
@ -177,6 +177,6 @@ Q_DECLARE_SHARED(QNetworkRequest)
|
||||
QT_END_NAMESPACE
|
||||
|
||||
Q_DECLARE_METATYPE(QNetworkRequest)
|
||||
Q_DECLARE_METATYPE(QNetworkRequest::RedirectsPolicy)
|
||||
Q_DECLARE_METATYPE(QNetworkRequest::RedirectPolicy)
|
||||
|
||||
#endif
|
||||
|
@ -7,9 +7,6 @@
|
||||
|
||||
"commandline": {
|
||||
"assignments": {
|
||||
"OPENSSL_LIBS": "openssl.libs",
|
||||
"OPENSSL_LIBS_DEBUG": "openssl.libs.debug",
|
||||
"OPENSSL_LIBS_RELEASE": "openssl.libs.release",
|
||||
"OPENSSL_PATH": "openssl.prefix"
|
||||
},
|
||||
"options": {
|
||||
@ -46,13 +43,24 @@
|
||||
"-lproxy"
|
||||
]
|
||||
},
|
||||
"openssl_headers": {
|
||||
"label": "OpenSSL Headers",
|
||||
"export": "openssl",
|
||||
"test": "unix/openssl",
|
||||
"sources": [
|
||||
{
|
||||
"comment": "placeholder for OPENSSL_PATH",
|
||||
"libs": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"openssl": {
|
||||
"label": "OpenSSL Libraries",
|
||||
"export": "",
|
||||
"label": "OpenSSL",
|
||||
"test": "unix/openssl",
|
||||
"sources": [
|
||||
{ "type": "openssl" },
|
||||
{
|
||||
"comment": "placeholder for OPENSSL_LIBS{,_{DEBUG,RELEASE}}",
|
||||
"comment": "placeholder for OPENSSL_{PATH,LIBS{,_{DEBUG,RELEASE}}}",
|
||||
"libs": "",
|
||||
"builds": {
|
||||
"debug": "",
|
||||
@ -92,11 +100,6 @@
|
||||
"test": "unix/ipv6ifname",
|
||||
"use": "network"
|
||||
},
|
||||
"openssl": {
|
||||
"label": "OpenSSL",
|
||||
"type": "compile",
|
||||
"test": "unix/openssl"
|
||||
},
|
||||
"sctp": {
|
||||
"label": "SCTP support",
|
||||
"type": "compile",
|
||||
@ -138,7 +141,7 @@
|
||||
"enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
|
||||
"disable": "input.openssl == 'no' || input.ssl == 'no'",
|
||||
"autoDetect": "!config.winrt",
|
||||
"condition": "!features.securetransport && tests.openssl",
|
||||
"condition": "!features.securetransport && (features.openssl-linked || libs.openssl_headers)",
|
||||
"output": [
|
||||
"privateFeature",
|
||||
{ "type": "publicQtConfig", "condition": "!features.openssl-linked" },
|
||||
@ -149,14 +152,9 @@
|
||||
"label": " Qt directly linked to OpenSSL",
|
||||
"enable": "input.openssl == 'linked'",
|
||||
"disable": "input.openssl != 'linked'",
|
||||
"condition": "features.openssl && libs.openssl",
|
||||
"condition": "!features.securetransport && libs.openssl",
|
||||
"output": [
|
||||
"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" }
|
||||
]
|
||||
},
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -358,17 +358,41 @@ bool QNativeSocketEnginePrivate::checkProxy(const QHostAddress &address)
|
||||
#if !defined(QT_NO_NETWORKPROXY)
|
||||
QObject *parent = q_func()->parent();
|
||||
QNetworkProxy proxy;
|
||||
QNetworkProxyQuery::QueryType queryType = QNetworkProxyQuery::TcpSocket;
|
||||
if (QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(parent)) {
|
||||
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)) {
|
||||
proxy = server->proxy();
|
||||
queryType = QNetworkProxyQuery::TcpServer;
|
||||
#ifndef QT_NO_SCTP
|
||||
if (qobject_cast<QSctpServer *>(server))
|
||||
queryType = QNetworkProxyQuery::SctpServer;
|
||||
#endif
|
||||
} else {
|
||||
// no parent -> no proxy
|
||||
return true;
|
||||
}
|
||||
|
||||
if (proxy.type() == QNetworkProxy::DefaultProxy)
|
||||
proxy = QNetworkProxy::applicationProxy();
|
||||
if (proxy.type() == QNetworkProxy::DefaultProxy) {
|
||||
// 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 &&
|
||||
proxy.type() != QNetworkProxy::NoProxy) {
|
||||
|
@ -678,10 +678,16 @@ static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d,
|
||||
|
||||
if (interface.isValid()) {
|
||||
const QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();
|
||||
if (!addressEntries.isEmpty()) {
|
||||
QHostAddress firstIP = addressEntries.first().ip();
|
||||
mreq4.imr_interface.s_addr = htonl(firstIP.toIPv4Address());
|
||||
} else {
|
||||
bool found = false;
|
||||
for (const QNetworkAddressEntry &entry : addressEntries) {
|
||||
const QHostAddress ip = entry.ip();
|
||||
if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
|
||||
mreq4.imr_interface.s_addr = htonl(ip.toIPv4Address());
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
d->setError(QAbstractSocket::NetworkError,
|
||||
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
|
||||
return false;
|
||||
|
@ -953,10 +953,16 @@ static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d,
|
||||
|
||||
if (iface.isValid()) {
|
||||
const QList<QNetworkAddressEntry> addressEntries = iface.addressEntries();
|
||||
if (!addressEntries.isEmpty()) {
|
||||
QHostAddress firstIP = addressEntries.first().ip();
|
||||
mreq4.imr_interface.s_addr = htonl(firstIP.toIPv4Address());
|
||||
} else {
|
||||
bool found = false;
|
||||
for (const QNetworkAddressEntry &entry : addressEntries) {
|
||||
const QHostAddress ip = entry.ip();
|
||||
if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
|
||||
mreq4.imr_interface.s_addr = htonl(ip.toIPv4Address());
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
d->setError(QAbstractSocket::NetworkError,
|
||||
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
|
||||
return false;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
|
@ -56,7 +56,7 @@ qtConfig(ssl) {
|
||||
ssl/qsslellipticcurve_dummy.cpp
|
||||
}
|
||||
|
||||
qtConfig(openssl)|qtConfig(openssl-linked) {
|
||||
qtConfig(openssl) {
|
||||
HEADERS += ssl/qsslcontext_openssl_p.h \
|
||||
ssl/qsslsocket_openssl_p.h \
|
||||
ssl/qsslsocket_openssl_symbols_p.h
|
||||
@ -79,16 +79,10 @@ qtConfig(ssl) {
|
||||
# - 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"
|
||||
|
||||
include($$OUT_PWD/qtnetwork-config.pri)
|
||||
|
||||
CONFIG(debug, debug|release) {
|
||||
LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG
|
||||
} else {
|
||||
LIBS_PRIVATE += $$OPENSSL_LIBS_RELEASE
|
||||
}
|
||||
|
||||
QMAKE_CXXFLAGS += $$OPENSSL_CFLAGS
|
||||
LIBS_PRIVATE += $$OPENSSL_LIBS
|
||||
qtConfig(openssl-linked): \
|
||||
QMAKE_USE_FOR_PRIVATE += openssl
|
||||
else: \
|
||||
QMAKE_USE_FOR_PRIVATE += openssl/nolink
|
||||
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/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -5,27 +5,33 @@
|
||||
**
|
||||
** This file is part of the plugins module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -37,6 +37,8 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtGui/qtgui-config.h>
|
||||
|
||||
#ifndef QT_NO_SYSTEMTRAYICON
|
||||
#include "qdbustrayicon_p.h"
|
||||
#endif
|
||||
|
@ -3,5 +3,8 @@ SOURCES += $$PWD/qgenericunixthemes.cpp
|
||||
|
||||
qtConfig(dbus) {
|
||||
include(dbusmenu/dbusmenu.pri)
|
||||
include(dbustray/dbustray.pri)
|
||||
|
||||
qtConfig(systemtrayicon) {
|
||||
include(dbustray/dbustray.pri)
|
||||
}
|
||||
}
|
||||
|
@ -572,7 +572,8 @@ QString QIBusPlatformInputContextPrivate::getSocketPath()
|
||||
if (debug)
|
||||
qDebug() << "host=" << host << "displayNumber" << displayNumber;
|
||||
|
||||
return QDir::homePath() + QLatin1String("/.config/ibus/bus/") +
|
||||
return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) +
|
||||
QLatin1String("/ibus/bus/") +
|
||||
QLatin1String(QDBusConnection::localMachineId()) +
|
||||
QLatin1Char('-') + QString::fromLocal8Bit(host) + QLatin1Char('-') + QString::fromLocal8Bit(displayNumber);
|
||||
}
|
||||
|
@ -100,10 +100,6 @@ bool QAndroidPlatformOpenGLContext::makeCurrent(QPlatformSurface *surface)
|
||||
bool ret = QEGLPlatformContext::makeCurrent(surface);
|
||||
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())
|
||||
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>
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -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>
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -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>
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -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>
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -201,6 +201,10 @@ QPixmap QCocoaDrag::dragPixmap(QDrag *drag, QPoint &hotSpot) const
|
||||
dpr = sourceWindow->devicePixelRatio();
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
if (const QWindow *focusWindow = qApp->focusWindow())
|
||||
dpr = focusWindow->devicePixelRatio();
|
||||
}
|
||||
pm = QPixmap(width * dpr, height * dpr);
|
||||
pm.setDevicePixelRatio(dpr);
|
||||
QPainter p(&pm);
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -1,31 +1,37 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user