Merge remote-tracking branch 'origin/5.15.0' into 5.15
Change-Id: I42afd73badf41ac990ff9cf8c6bc650850d2dacf
This commit is contained in:
commit
00edd2a7e7
444
dist/changes-5.15.0
vendored
Normal file
444
dist/changes-5.15.0
vendored
Normal file
@ -0,0 +1,444 @@
|
||||
Qt 5.15 introduces many new features and improvements as well as bugfixes
|
||||
over the 5.14.x series. For more details, refer to the online documentation
|
||||
included in this distribution. The documentation is also available online:
|
||||
|
||||
https://doc.qt.io/qt-5/index.html
|
||||
|
||||
The Qt version 5.15 series is binary compatible with the 5.14.x series.
|
||||
Applications compiled for 5.14 will continue to run with 5.15.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
https://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
****************************************************************************
|
||||
|
||||
- Calling QList::insert() or removeAt() with an out of bounds index is
|
||||
deprecated and will no longer be supported in Qt 6.
|
||||
|
||||
****************************************************************************
|
||||
* Potentially Binary-Incompatible Changes *
|
||||
****************************************************************************
|
||||
|
||||
- QHash:
|
||||
QHash's iterator category was changed from bidirectional iterator to
|
||||
forward iterator. This may cause trouble if a library uses the
|
||||
iterator category to alter functionality through tag dispatching. This
|
||||
only applies when compiling the library or application with
|
||||
QT_DISABLE_DEPRECATED_BEFORE=0x050F00 and the other with a lower value.
|
||||
|
||||
****************************************************************************
|
||||
* Deprecation Notice *
|
||||
****************************************************************************
|
||||
|
||||
- The binary JSON representation is deprecated. The CBOR format should be
|
||||
used instead.
|
||||
|
||||
- [QTBUG-80308] QUrl::topLevelDomain() was deprecated in 5.15 and will be
|
||||
removed in 6.0
|
||||
|
||||
- QtNetwork:
|
||||
* QNetworkConfigurationManager, QNetworkConfiguration and QNetworkSession
|
||||
are deprecated, to be removed in Qt 6.
|
||||
|
||||
- [REVERTED] [QTBUG-80369] QAbstractSocket::error() (the getter) is
|
||||
deprecated; superseded by socketError().
|
||||
- [REVERTED] [QTBUG-80369] QLocalSocket::error() (the getter) is
|
||||
deprecated; superseded by socketError().
|
||||
- [QTBUG-80369] QSslSocket::sslErrors() (the getter) was deprecated and
|
||||
superseded by sslHandshakeErrors()
|
||||
- [REVERTED] [QTBUG-80369] QNetworkReply::error() (the getter) was
|
||||
deprecated; superseded by networkError().
|
||||
- [QTBUG-81630][QTBUG-80312] QLinkedList is deprecated and will be moved
|
||||
to Qt5Compat in Qt 6. It is recommended to use std::list instead.
|
||||
- QLocalSocket::error() (the signal) is deprecated; superseded by
|
||||
errorOccurred()
|
||||
- QAbstractSocket::error() (the signal) is deprecated; superseded by
|
||||
errorOccurred()
|
||||
- QNetworkReply::error() (the signal) is deprecated; superseded by
|
||||
errorOccurred()
|
||||
|
||||
See also the various sections below, which include many more deprecations.
|
||||
|
||||
****************************************************************************
|
||||
* QtCore *
|
||||
****************************************************************************
|
||||
|
||||
- QCalendar::monthsInYear(QCalendar::Unspecified) now returns
|
||||
maximumMonthsInYear(). QCalendar::daysInYear() now makes clear that its
|
||||
handling of unspecified year is undefined.
|
||||
|
||||
- Containers:
|
||||
* Added operator-> to the key-value iterator for QHash/QMap.
|
||||
|
||||
- QAbstractItemModel:
|
||||
* [QTBUG-72587] The match() method now supports the new
|
||||
Qt::RegularExpression match flag value. This will allow users to use
|
||||
either a string or a fully configured QRegularExpression when doing
|
||||
searches. In the second case, the case sensitivity flag will be
|
||||
ignored if passed.
|
||||
|
||||
- QByteArray:
|
||||
* resize() will no longer shrink the capacity. That means resize(0) now
|
||||
reliably preserves capacity().
|
||||
* Added the new fromBase64Encoding function.
|
||||
* Added new flags to make fromBase64 / fromBase64Encoding strictly
|
||||
validate their input, instead of skipping over invalid characters.
|
||||
|
||||
- QCborArray:
|
||||
* Fixed an infinite loop when operator[] was called with an index larger
|
||||
than the array's size plus 1.
|
||||
|
||||
- QCborMap:
|
||||
* [QTBUG-83366] Fixed some issues relating to assigning elements from a
|
||||
map to itself.
|
||||
|
||||
- QCborValue:
|
||||
* fromCbor() now limits decoding to at most 1024 nested maps, arrays,
|
||||
and tags to prevent stack overflows. This should be sufficient for
|
||||
most uses of CBOR. An API to limit further or to relax the limit will
|
||||
be provided in 5.15. Meanwhile, if decoding more is required,
|
||||
QCborStreamReader can be used (note that each level of map and array
|
||||
allocates memory).
|
||||
|
||||
- QDate:
|
||||
* QDate::toString(Qt::DateFormat, QCalendar) no longer takes calendar
|
||||
into account for Qt::TextDate. There was no matching support in
|
||||
QDateTime and the locale-independent formats are intended to be
|
||||
standard, rather than customized to the user.
|
||||
|
||||
- QDateTime:
|
||||
* Added some missing QCalendar variants of QDateTime::toString().
|
||||
Included docs for QCalendar variants in both QDate and QDateTime.
|
||||
|
||||
- QFile:
|
||||
* Introduce QFile::moveToTrash to allow applications to move files to
|
||||
the trash.
|
||||
|
||||
- QFileInfo:
|
||||
* [QTBUG-75869] Add QFileInfo::isJunction so that applications can
|
||||
recognize NTFS file system entries as junctions
|
||||
|
||||
- QHash:
|
||||
* Reverse iteration over QHash is now deprecated.
|
||||
* insertMulti(), unite() and values(const Key &key) are now deprecated.
|
||||
Please use QMultiHash instead.
|
||||
|
||||
- QJsonObject:
|
||||
* Fixed a regression from 5.13 that incorrect results when assigning
|
||||
elements from an object to itself.
|
||||
|
||||
- QLatin1String:
|
||||
* Added compare().
|
||||
|
||||
- QLibrary and QPluginLoader:
|
||||
* [QTBUG-39642] Fixed a deadlock that would happen if the plugin or
|
||||
library being loaded has load-time initialization code (C++ global
|
||||
variables) that recursed back into the same QLibrary or QPluginLoader
|
||||
object.
|
||||
|
||||
- QLocale:
|
||||
* Deprecated toTime() variants taking a calendar. The calendar is
|
||||
ignored in time parsing.
|
||||
* Data used for currency formats in several locales and list patterns in
|
||||
some locales have changed due to now parsing the CLDR data more
|
||||
faithfully.
|
||||
* [QTBUG-79902] Currency formats are now based on CLDR's accounting
|
||||
formats, where they were previously mostly based (more or less by
|
||||
accident) on standard formats. In particular, this now means negative
|
||||
currency formats are specified, where available, where they (mostly)
|
||||
were not previously.
|
||||
|
||||
- QMap:
|
||||
* [QTBUG-35544] insertMulti(), unite(), values(Key), uniqueKeys(),
|
||||
count(Key) is now deprecated. Please use QMultiMap instead.
|
||||
|
||||
- QObject:
|
||||
* [QTBUG-76375] A logging category
|
||||
qt.core.qmetaobject.connectslotsbyname was added, which will report
|
||||
on the connections made by QMetaObject::connectSlotsByName().
|
||||
|
||||
- QProcess:
|
||||
* Overloads of start/execute/startDatached that parse a single command
|
||||
string into program and arguments have been marked as deprecated. A
|
||||
static helper splitCommand has been added to construct a QStringList
|
||||
from a command string.
|
||||
|
||||
- QRandomGenerator:
|
||||
* The system() random generator will now use the RDSEED instruction on
|
||||
x86 processors whenever available as the first source of random data.
|
||||
It will fall back to RDRAND and then to the system functions, in that
|
||||
order.
|
||||
|
||||
- QRegularExpression:
|
||||
* The escape(), wildcardToRegularExpression() and anchoredPattern()
|
||||
functions now have overloads taking a QStringView parameter.
|
||||
|
||||
- QResource:
|
||||
* Added uncompressedSize() and uncompressedData(), which will perform
|
||||
any required decompression on the data, prior to returning (unlike
|
||||
data() and size()).
|
||||
|
||||
- QSet:
|
||||
* Reverse iteration over QSet is now deprecated.
|
||||
|
||||
- QStandardPaths:
|
||||
* When used in a low-integrity process on Windows,
|
||||
QStandardPaths::writableLocation returns respective low-integrity
|
||||
paths.
|
||||
|
||||
- QString:
|
||||
* Added QString::isValidUtf16.
|
||||
|
||||
- QStringView:
|
||||
* Added QStringView::isValidUtf16.
|
||||
* Added compare() overloads taking QLatin1String, QChar.
|
||||
* Conversion from std::basic_string can now be constexpr (when
|
||||
std::basic_string is).
|
||||
|
||||
- QTimeZone:
|
||||
* The constructor can now handle general UTC-offset zone names. The
|
||||
reported id() of such a zone shall be in canonical form, so might not
|
||||
match the ID passed to the constructor.
|
||||
|
||||
- QXmlStream:
|
||||
* QXmlStreamReader does now by default limit the expansion of entities
|
||||
to 4096 characters. Documents where a single entity expands to more
|
||||
characters than the limit are not considered well formed. The limit is
|
||||
there to avoid DoS attacks through recursively expanding entities when
|
||||
loading untrusted content. The limit can be changed through the
|
||||
QXmlStreamReader::setEntityExpansionLimit() method.
|
||||
|
||||
- moc:
|
||||
* Moc now correctly sets a non-null QMetaObject::superClass for
|
||||
Q_GADGETs that inherit from a template which inherits another
|
||||
Q_GADGET.
|
||||
* [QTBUG-74521][QTBUG-76598] moc can now output a ".d" dep file that can
|
||||
be consumed by other build systems.
|
||||
|
||||
****************************************************************************
|
||||
* QtGui *
|
||||
****************************************************************************
|
||||
|
||||
- Extended QVulkanWindow to allow user to specify additional queues to be
|
||||
created.
|
||||
- Added API for starting interactive window resize and move operations
|
||||
handled by the system.
|
||||
|
||||
- QClipboard:
|
||||
* Support lazily-provided copying of data to the clipboard on macOS
|
||||
|
||||
- QCursor:
|
||||
* [QTBUG-48701] QCursor::bitmap() and QCursor::mask() can now return
|
||||
by-value instead of by-pointer.
|
||||
|
||||
- QFont:
|
||||
* Deprecated QFont::ForceIntegerMetrics and QFont::OpenGLCompatible,
|
||||
with the intention of removing them in Qt 6.0.0.
|
||||
|
||||
- QMarkdownWriter:
|
||||
* [QTBUG-80603] Code blocks are no longer word-wrapped; the beginning
|
||||
fence of a code block no longer has a space before the language string;
|
||||
and the ending fence is no longer skipped in some cases where it was.
|
||||
|
||||
- QPdfWriter:
|
||||
* New API to provide external document XMP metadata and attach files to
|
||||
PDF.
|
||||
|
||||
- QTabletEvent:
|
||||
* QTabletEvent::device() is deprecated, because the plan is to return
|
||||
an object pointer in Qt 6 rather than an enum. The enum is now provided
|
||||
by deviceType().
|
||||
* hiResGlobalX() and hiResGlobalY() are deprecated, because globalPosF()
|
||||
has the same resolution. But globalPosF() (and several others) will
|
||||
probably be renamed in Qt 6. The replacements are not in place yet.
|
||||
* [QTBUG-77826] Local coordinates are now correct when the event is
|
||||
delivered to a nested window on X11.
|
||||
|
||||
- Text:
|
||||
* Fixed a problem where pixel sizes would be truncated before calculating
|
||||
glyph positions.
|
||||
* Fixed an issue with QFont::PreferNoShaping where boxes would appear in
|
||||
place of unprintable characters.
|
||||
* Fixed a problem where certain bold fonts would be synthetically
|
||||
emboldened by Qt when using the Freetype font engine.
|
||||
|
||||
- Application palettes are now resolved against the platform's theme
|
||||
palette, the same way widget palettes are resolved against their parents,
|
||||
and the application palette. This means the application palette reflected
|
||||
through QGuiApplication::palette() may not be exactly the same palette as
|
||||
set via QGuiApplication::setPalette().
|
||||
|
||||
****************************************************************************
|
||||
* QtWidgets *
|
||||
****************************************************************************
|
||||
|
||||
- Added QStyleOptionTabV4 as a subclass of QStyleOptionTab so that the
|
||||
tab's index information can be obtained.
|
||||
|
||||
- ItemViews:
|
||||
* [QTBUG-76423] The convenience views QList/Table/TreeWidgetItem now
|
||||
treat a default constructed QBrush or QSize as an empty QVariant which
|
||||
allows resetting of the values set to it's default values.
|
||||
|
||||
- QApplication:
|
||||
* The globalStrut property has been deprecated and will be removed from
|
||||
Qt 6.
|
||||
|
||||
- QButtonGroup:
|
||||
* Added signals idClicked/Pressed/Released/Toggled that replace the
|
||||
deprecated signal overloads.
|
||||
|
||||
- QComboBox:
|
||||
* QComboBox got a new property 'placeholderText'
|
||||
* Support checkable items in styles that use a popup for the dropdown.
|
||||
* the SizeAdjustPolicy value AdjustToMinimumContentLength is deprecated,
|
||||
use AdjustToContents or AdjustToContentsOnFirstShow instead.
|
||||
|
||||
- QGraphicsView:
|
||||
* Fixed a bug where hover events would not be delivered if the item was
|
||||
added while blocked by a modal panel.
|
||||
|
||||
- QLabel:
|
||||
* [QTBUG-48701] QLabel::pixmap() and QLabel::picture() can now return
|
||||
by-value instead of by-pointer.
|
||||
|
||||
- QLineEdit:
|
||||
* Inputmask X character now requires non-blank input.
|
||||
|
||||
- QMenu:
|
||||
* a popup menu hides when a QWidgetAction added to it fires the
|
||||
triggered signal.
|
||||
|
||||
- QShortcut:
|
||||
* QShortcut ctor has now pointer to member function overloads
|
||||
|
||||
- QStyle:
|
||||
* You can now set the CSS property 'icon' on a QPushButton to override
|
||||
which icon to draw.
|
||||
|
||||
- QSystemTrayIcon:
|
||||
* On macOS, clicking on the message will remove the notification.
|
||||
|
||||
- QTabWidget/QTabBar:
|
||||
* Tabs can now be hidden with setTabVisible
|
||||
|
||||
- QWidget:
|
||||
* Fonts and palette settings are inherited by children from their
|
||||
parents even if the children have application-wide platform theme
|
||||
overrides.
|
||||
|
||||
- QWizard:
|
||||
* visitedPages has been deprecated, use visitedIds instead.
|
||||
|
||||
****************************************************************************
|
||||
* QtNetwork *
|
||||
****************************************************************************
|
||||
|
||||
- A new signal introduced to report when a valid session ticket is received
|
||||
(TLS 1.3)
|
||||
|
||||
- SSL:
|
||||
* Removed OpenSSL 1.0.x support, now 1.1.x is required
|
||||
* The minimum required version of OpenSSL is now 1.1.1.
|
||||
|
||||
- QSslCertificate:
|
||||
* [QTBUG-72587] Add overload of fromPath that does not make use of
|
||||
QRegExp and deprecate the QRegExp variant.
|
||||
|
||||
****************************************************************************
|
||||
* QtSql *
|
||||
****************************************************************************
|
||||
|
||||
- QMYSQL:
|
||||
* Removed support for MySql < 5.0 since 5.0 was released 14 years ago.
|
||||
* The QMYSQL plugin can now be build with the MariaDB C connector libs
|
||||
on Windows.
|
||||
|
||||
- QSqlDriver:
|
||||
* The one-arg version of QSqlDriver::notifcation() is now deprecated.
|
||||
|
||||
****************************************************************************
|
||||
* QTestLib *
|
||||
****************************************************************************
|
||||
|
||||
- The formerly named 'xunitxml' test reporter has been renamed to what it
|
||||
actually is: a JUnit test reporter, and is now triggered by passing -o
|
||||
junitxml to the test binary.
|
||||
|
||||
****************************************************************************
|
||||
* QtXml *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-76177] SAX classes are now deprecated. Use QXmlStreamReader,
|
||||
QXmlStreamWriter in QtCore instead.
|
||||
|
||||
****************************************************************************
|
||||
* Configure *
|
||||
****************************************************************************
|
||||
|
||||
- Add switch "-coverage source-based" to enable clang's "source-based" code
|
||||
coverage feature. This can be used for code coverage analysis.
|
||||
|
||||
- X11:
|
||||
* [QTBUG-67277][QTBUG-30939] The minimal required version of libxcb now
|
||||
is 1.11.
|
||||
* [QTBUG-67277][QTBUG-30939] Removed -qt-xcb, -system-xcb, -xkb,
|
||||
-xcb-xinput switches.
|
||||
|
||||
****************************************************************************
|
||||
* cmake *
|
||||
****************************************************************************
|
||||
|
||||
- Fixed an issue where some Qt location and declarative plugins whose name
|
||||
did not end with "Plugin" where not imported by the corresponding Qt
|
||||
component package.
|
||||
|
||||
****************************************************************************
|
||||
* Third-Party Code *
|
||||
****************************************************************************
|
||||
|
||||
- libjpeg-turbo was updated to version 2.0.4
|
||||
|
||||
- X11:
|
||||
* [QTBUG-67277][QTBUG-30939] Removed all bundled XCB libs, with the
|
||||
exception of xcb-xinput, which is not available on systems with libxcb
|
||||
1.11.
|
||||
|
||||
****************************************************************************
|
||||
* Platform Specific Changes *
|
||||
****************************************************************************
|
||||
|
||||
- Linux:
|
||||
* Enable accessibility on Linux when Orca is started by hand
|
||||
* [QTBUG-78754] Vulkan is now supported by eglfs (eglfs_viv backend) on
|
||||
i.MX8 devices with the Vivante graphics stack. This is done via
|
||||
VK_KHR_display so no windowing system is required.
|
||||
|
||||
- X11:
|
||||
* [QTBUG-67277][QTBUG-30939] XKB and XInput2 now are mandatory
|
||||
dependencies for XCB plugin. XCB-XKB is a part of libxcb 1.11
|
||||
releases. XCB-XInput is not part of libxcb 1.11 releases, but Qt
|
||||
builders can use the -bundled-xcb-xinput switch.
|
||||
|
||||
- Android:
|
||||
* [REVERTED] Qt::MaximizeUsingFullscreenGeometryHint window flag is
|
||||
now supported, and will make the window fullscreen, but keep the
|
||||
system UI on-screen, with a translucent background color.
|
||||
* [QTBUG-82120] Use native file dialog by default for open and save
|
||||
operations.
|
||||
|
||||
- Windows:
|
||||
* Fixed a bug where some fonts would not be accessible by
|
||||
referencing their typographic name.
|
||||
* Fixed a 2 pixel offset on glyphs when using color fonts or any
|
||||
hinting preference other than the default (full) hinting.
|
||||
|
||||
- WebAssembly:
|
||||
* Updated emscripten to version 1.39.8
|
@ -407,7 +407,7 @@ bool MainWindow::addTorrent(const QString &fileName, const QString &destinationF
|
||||
|
||||
QString baseFileName = QFileInfo(fileName).fileName();
|
||||
if (baseFileName.toLower().endsWith(".torrent"))
|
||||
baseFileName.remove(baseFileName.size() - 8);
|
||||
baseFileName.chop(8);
|
||||
|
||||
item->setText(0, baseFileName);
|
||||
item->setToolTip(0, tr("Torrent: %1<br>Destination: %2")
|
||||
|
@ -279,11 +279,22 @@ contains(all_qt_module_deps, qml): \
|
||||
for (QMLPATH, QMLPATHS): \
|
||||
IMPORTPATHS += -importPath $$system_quote($$QMLPATH)
|
||||
|
||||
# add qrc files, too
|
||||
!isEmpty(RESOURCES) {
|
||||
IMPORTPATHS += -qrcFiles
|
||||
for (RESOURCE, RESOURCES): \
|
||||
IMPORTPATHS += $$absolute_path($$system_quote($$RESOURCE), $$_PRO_FILE_PWD_)
|
||||
# add resources to qmlimportscanner
|
||||
for (RESOURCE, RESOURCES) {
|
||||
defined($${RESOURCE}.files, var) {
|
||||
# in case of a "struct", add the struct's files
|
||||
base = $$RESOURCE.base
|
||||
for (f, $$RESOURCE.files): SCANNERRESOURCES += "$$base/$$f"
|
||||
} else {
|
||||
# if the resource is a file, just add it
|
||||
SCANNERRESOURCES += $$RESOURCE
|
||||
}
|
||||
}
|
||||
|
||||
!isEmpty(SCANNERRESOURCES) {
|
||||
IMPORTPATHS += -qrcFiles
|
||||
for (RESOURCE, SCANNERRESOURCES)
|
||||
IMPORTPATHS += $$absolute_path($$system_quote($$RESOURCE), $$_PRO_FILE_PWD_)
|
||||
}
|
||||
|
||||
|
||||
|
@ -74,6 +74,7 @@ sourcefiles += \
|
||||
extras = \
|
||||
$$_PRO_FILE_PWD_/README \
|
||||
$$_PRO_FILE_PWD_/README.TXT \
|
||||
$$_PRO_FILE_PWD_/qmldir \
|
||||
$$files($$_PRO_FILE_PWD_/*.pri) \
|
||||
$$replace(_PRO_FILE_, \\.pro$, .qmlproject) \
|
||||
$$replace(_PRO_FILE_, \\.pro$, .json) \
|
||||
@ -140,6 +141,9 @@ equals(TEMPLATE, app)|equals(TEMPLATE, lib) {
|
||||
SOURCES =
|
||||
OBJECTIVE_SOURCES =
|
||||
INSTALLS -= target
|
||||
QMAKE_SUBSTITUTES =
|
||||
QMAKE_EXTRA_COMPILERS =
|
||||
COPIES =
|
||||
} else {
|
||||
CONFIG += relative_qt_rpath # Examples built as part of Qt should be relocatable
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ macx-xcode {
|
||||
warning("You need to update Xcode to version 6 or newer to fully support iPhone6/6+")
|
||||
} else {
|
||||
# Set up default LaunchScreen to support iPhone6/6+
|
||||
qmake_launch_screen = LaunchScreen.xib
|
||||
qmake_launch_screen = LaunchScreen.storyboard
|
||||
qmake_copy_launch_screen.input = $$QMAKESPEC/$$qmake_launch_screen
|
||||
qmake_copy_launch_screen.output = $$OUT_PWD/$${TARGET}.xcodeproj/$$qmake_launch_screen
|
||||
QMAKE_SUBSTITUTES += qmake_copy_launch_screen
|
||||
|
@ -36,8 +36,9 @@
|
||||
VCLIBS = $${VCLIBS}.Debug
|
||||
else: \
|
||||
VCLIBS = $${VCLIBS}
|
||||
# VS 2017 still uses vclibs 140
|
||||
# VS 2017 and 2019 still use vclibs 140
|
||||
contains(MSVC_VER, "15.0"): VCLIBS = $$replace(VCLIBS, 150, 140)
|
||||
contains(MSVC_VER, "16.0"): VCLIBS = $$replace(VCLIBS, 160, 140)
|
||||
VCLIBS = "$${VCLIBS}\" MinVersion=\"14.0.0.0\" Publisher=\"CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
|
||||
WINRT_MANIFEST.dependencies += $$VCLIBS
|
||||
}
|
||||
@ -68,12 +69,10 @@
|
||||
isEmpty(WINRT_MANIFEST.background): WINRT_MANIFEST.background = green
|
||||
isEmpty(WINRT_MANIFEST.foreground): WINRT_MANIFEST.foreground = light
|
||||
isEmpty(WINRT_MANIFEST.default_language): WINRT_MANIFEST.default_language = en
|
||||
*-msvc2015|*-msvc2017 {
|
||||
isEmpty(WINRT_MANIFEST.minVersion): \
|
||||
WINRT_MANIFEST.minVersion = $$WINDOWS_TARGET_PLATFORM_VERSION
|
||||
isEmpty(WINRT_MANIFEST.maxVersionTested): \
|
||||
WINRT_MANIFEST.maxVersionTested = $$WINDOWS_TARGET_PLATFORM_MIN_VERSION
|
||||
}
|
||||
isEmpty(WINRT_MANIFEST.minVersion): \
|
||||
WINRT_MANIFEST.minVersion = $$WINDOWS_TARGET_PLATFORM_VERSION
|
||||
isEmpty(WINRT_MANIFEST.maxVersionTested): \
|
||||
WINRT_MANIFEST.maxVersionTested = $$WINDOWS_TARGET_PLATFORM_MIN_VERSION
|
||||
|
||||
INDENT = "$$escape_expand(\\r\\n) "
|
||||
|
||||
|
48
mkspecs/macx-ios-clang/LaunchScreen.storyboard
Normal file
48
mkspecs/macx-ios-clang/LaunchScreen.storyboard
Normal file
@ -0,0 +1,48 @@
|
||||
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
|
||||
<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13142\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">
|
||||
<dependencies>
|
||||
<plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12042\"/>
|
||||
<capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>
|
||||
<capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>
|
||||
<capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID=\"EHf-IW-A2E\">
|
||||
<objects>
|
||||
<viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">
|
||||
<view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">
|
||||
<rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>
|
||||
<autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>
|
||||
<subviews>
|
||||
<label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"obG-Y5-kRd\">
|
||||
<rect key=\"frame\" x=\"0.0\" y=\"626.5\" width=\"375\" height=\"20.5\"/>
|
||||
<fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>
|
||||
<color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>
|
||||
<nil key=\"highlightedColor\"/>
|
||||
</label>
|
||||
<label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"$$TARGET\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GJd-Yh-RWb\">
|
||||
<rect key=\"frame\" x=\"0.0\" y=\"202\" width=\"375\" height=\"43\"/>
|
||||
<fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>
|
||||
<color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>
|
||||
<nil key=\"highlightedColor\"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>
|
||||
<constraints>
|
||||
<constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"centerX\" id=\"5cz-MP-9tL\"/>
|
||||
<constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"GJd-Yh-RWb\" secondAttribute=\"centerX\" id=\"Q3B-4B-g5h\"/>
|
||||
<constraint firstItem=\"obG-Y5-kRd\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"SfN-ll-jLj\"/>
|
||||
<constraint firstAttribute=\"bottom\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"bottom\" constant=\"20\" id=\"Y44-ml-fuU\"/>
|
||||
<constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"moa-c2-u7t\"/>
|
||||
<constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"x7j-FC-K8j\"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>
|
||||
</objects>
|
||||
<point key=\"canvasLocation\" x=\"53\" y=\"375\"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
@ -1,45 +0,0 @@
|
||||
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
|
||||
<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6250\" systemVersion=\"14A343f\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">
|
||||
<dependencies>
|
||||
<plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6244\"/>
|
||||
<capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File\'s Owner\"/>
|
||||
<placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>
|
||||
<view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">
|
||||
<rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>
|
||||
<autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>
|
||||
<subviews>
|
||||
<label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">
|
||||
<rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>
|
||||
<fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>
|
||||
<color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>
|
||||
<nil key=\"highlightedColor\"/>
|
||||
<variation key=\"widthClass=compact\">
|
||||
<fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"11\"/>
|
||||
</variation>
|
||||
</label>
|
||||
<label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"$$TARGET\"
|
||||
textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">
|
||||
<rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>
|
||||
<fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>
|
||||
<color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>
|
||||
<nil key=\"highlightedColor\"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>
|
||||
<constraints>
|
||||
<constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"Kid-kn-2rF\"/>
|
||||
<constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>
|
||||
<constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>
|
||||
<constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>
|
||||
<constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>
|
||||
<constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>
|
||||
</constraints>
|
||||
<nil key=\"simulatedStatusBarMetrics\"/>
|
||||
<freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>
|
||||
<point key=\"canvasLocation\" x=\"404\" y=\"445\"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
@ -1561,8 +1561,6 @@ void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
||||
if (newSize > MaxByteArraySize)
|
||||
return -1;
|
||||
|
||||
// since usedData <= data.size(), this can't overflow
|
||||
usedData += increment;
|
||||
data.resize(newSize);
|
||||
return offset;
|
||||
};
|
||||
@ -1635,7 +1633,7 @@ void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
||||
}
|
||||
|
||||
// update size
|
||||
if (e.flags & Element::HasByteData) {
|
||||
if (r.status == QCborStreamReader::EndOfString && e.flags & Element::HasByteData) {
|
||||
auto b = new (dataPtr() + e.value) ByteData;
|
||||
b->len = data.size() - e.value - int(sizeof(*b));
|
||||
usedData += b->len;
|
||||
|
@ -577,7 +577,7 @@ void QJsonObject::removeImpl(T key)
|
||||
if (!keyExists)
|
||||
return;
|
||||
|
||||
removeAt(index);
|
||||
removeAt(index / 2);
|
||||
}
|
||||
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
@ -629,7 +629,7 @@ QJsonValue QJsonObject::takeImpl(T key)
|
||||
return QJsonValue(QJsonValue::Undefined);
|
||||
|
||||
const QJsonValue v = QJsonPrivate::Value::fromTrustedCbor(o->extractAt(index + 1));
|
||||
removeAt(index);
|
||||
removeAt(index / 2);
|
||||
return v;
|
||||
}
|
||||
|
||||
@ -1486,8 +1486,8 @@ void QJsonObject::setValueAt(int i, const QJsonValue &val)
|
||||
void QJsonObject::removeAt(int index)
|
||||
{
|
||||
detach2();
|
||||
o->removeAt(index + 1);
|
||||
o->removeAt(index);
|
||||
o->removeAt(2 * index + 1);
|
||||
o->removeAt(2 * index);
|
||||
}
|
||||
|
||||
uint qHash(const QJsonObject &object, uint seed)
|
||||
|
@ -1803,57 +1803,39 @@ const QString::Null QString::null = { };
|
||||
|
||||
/*! \typedef QString::const_iterator
|
||||
|
||||
This typedef provides an STL-style const iterator for QString.
|
||||
|
||||
\sa QString::iterator
|
||||
*/
|
||||
|
||||
/*! \typedef QString::iterator
|
||||
|
||||
The QString::iterator typedef provides an STL-style non-const
|
||||
iterator for QString.
|
||||
|
||||
\sa QString::const_iterator
|
||||
*/
|
||||
|
||||
/*! \typedef QString::const_reverse_iterator
|
||||
\since 5.6
|
||||
|
||||
This typedef provides an STL-style const reverse iterator for QString.
|
||||
|
||||
\sa QString::reverse_iterator, QString::const_iterator
|
||||
*/
|
||||
|
||||
/*! \typedef QString::reverse_iterator
|
||||
\since 5.6
|
||||
|
||||
This typedef provides an STL-style non-const reverse iterator for QString.
|
||||
|
||||
\sa QString::const_reverse_iterator, QString::iterator
|
||||
*/
|
||||
|
||||
/*!
|
||||
\typedef QString::size_type
|
||||
|
||||
The QString::size_type typedef provides an STL-style type for sizes (int).
|
||||
*/
|
||||
|
||||
/*!
|
||||
\typedef QString::difference_type
|
||||
|
||||
The QString::size_type typedef provides an STL-style type for difference between pointers.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\typedef QString::const_reference
|
||||
|
||||
This typedef provides an STL-style const reference for a QString element (QChar).
|
||||
*/
|
||||
/*!
|
||||
\typedef QString::reference
|
||||
|
||||
This typedef provides an STL-style
|
||||
reference for a QString element (QChar).
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -1871,8 +1853,6 @@ const QString::Null QString::null = { };
|
||||
|
||||
/*!
|
||||
\typedef QString::value_type
|
||||
|
||||
This typedef provides an STL-style value type for QString.
|
||||
*/
|
||||
|
||||
/*! \fn QString::iterator QString::begin()
|
||||
@ -9537,8 +9517,6 @@ QString &QString::setRawData(const QChar *unicode, int size)
|
||||
\typedef QLatin1String::iterator
|
||||
\since 5.10
|
||||
|
||||
This typedef provides an STL-style const iterator for QLatin1String.
|
||||
|
||||
QLatin1String does not support mutable iterators, so this is the same
|
||||
as const_iterator.
|
||||
|
||||
@ -9549,8 +9527,6 @@ QString &QString::setRawData(const QChar *unicode, int size)
|
||||
\typedef QLatin1String::const_iterator
|
||||
\since 5.10
|
||||
|
||||
This typedef provides an STL-style const iterator for QLatin1String.
|
||||
|
||||
\sa iterator, const_reverse_iterator
|
||||
*/
|
||||
|
||||
@ -9558,8 +9534,6 @@ QString &QString::setRawData(const QChar *unicode, int size)
|
||||
\typedef QLatin1String::reverse_iterator
|
||||
\since 5.10
|
||||
|
||||
This typedef provides an STL-style const reverse iterator for QLatin1String.
|
||||
|
||||
QLatin1String does not support mutable reverse iterators, so this is the
|
||||
same as const_reverse_iterator.
|
||||
|
||||
@ -9570,8 +9544,6 @@ QString &QString::setRawData(const QChar *unicode, int size)
|
||||
\typedef QLatin1String::const_reverse_iterator
|
||||
\since 5.10
|
||||
|
||||
This typedef provides an STL-style const reverse iterator for QLatin1String.
|
||||
|
||||
\sa reverse_iterator, const_iterator
|
||||
*/
|
||||
|
||||
@ -10472,8 +10444,6 @@ QDataStream &operator>>(QDataStream &in, QString &str)
|
||||
\typedef QStringRef::const_iterator
|
||||
\since 5.4
|
||||
|
||||
This typedef provides an STL-style const iterator for QStringRef.
|
||||
|
||||
\sa QStringRef::const_reverse_iterator
|
||||
*/
|
||||
|
||||
@ -10481,8 +10451,6 @@ QDataStream &operator>>(QDataStream &in, QString &str)
|
||||
\typedef QStringRef::const_reverse_iterator
|
||||
\since 5.7
|
||||
|
||||
This typedef provides an STL-style const reverse iterator for QStringRef.
|
||||
|
||||
\sa QStringRef::const_iterator
|
||||
*/
|
||||
|
||||
|
@ -2016,6 +2016,21 @@ static void convert_Mono_to_Indexed8(QImageData *dest, const QImageData *src, Qt
|
||||
}
|
||||
}
|
||||
|
||||
static void copy_8bit_pixels(QImageData *dest, const QImageData *src)
|
||||
{
|
||||
if (src->bytes_per_line == dest->bytes_per_line) {
|
||||
memcpy(dest->data, src->data, src->bytes_per_line * src->height);
|
||||
} else {
|
||||
const uchar *sdata = src->data;
|
||||
uchar *ddata = dest->data;
|
||||
for (int y = 0; y < src->height; ++y) {
|
||||
memcpy(ddata, sdata, src->width);
|
||||
sdata += src->bytes_per_line;
|
||||
ddata += dest->bytes_per_line;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void convert_Indexed8_to_Alpha8(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
|
||||
{
|
||||
Q_ASSERT(src->format == QImage::Format_Indexed8);
|
||||
@ -2031,11 +2046,15 @@ static void convert_Indexed8_to_Alpha8(QImageData *dest, const QImageData *src,
|
||||
}
|
||||
|
||||
if (simpleCase)
|
||||
memcpy(dest->data, src->data, src->bytes_per_line * src->height);
|
||||
copy_8bit_pixels(dest, src);
|
||||
else {
|
||||
qsizetype size = src->bytes_per_line * src->height;
|
||||
for (qsizetype i = 0; i < size; ++i) {
|
||||
dest->data[i] = translate[src->data[i]];
|
||||
const uchar *sdata = src->data;
|
||||
uchar *ddata = dest->data;
|
||||
for (int y = 0; y < src->height; ++y) {
|
||||
for (int x = 0; x < src->width; ++x)
|
||||
ddata[x] = translate[sdata[x]];
|
||||
sdata += src->bytes_per_line;
|
||||
ddata += dest->bytes_per_line;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2055,11 +2074,15 @@ static void convert_Indexed8_to_Grayscale8(QImageData *dest, const QImageData *s
|
||||
}
|
||||
|
||||
if (simpleCase)
|
||||
memcpy(dest->data, src->data, src->bytes_per_line * src->height);
|
||||
copy_8bit_pixels(dest, src);
|
||||
else {
|
||||
qsizetype size = src->bytes_per_line * src->height;
|
||||
for (qsizetype i = 0; i < size; ++i) {
|
||||
dest->data[i] = translate[src->data[i]];
|
||||
const uchar *sdata = src->data;
|
||||
uchar *ddata = dest->data;
|
||||
for (int y = 0; y < src->height; ++y) {
|
||||
for (int x = 0; x < src->width; ++x)
|
||||
ddata[x] = translate[sdata[x]];
|
||||
sdata += src->bytes_per_line;
|
||||
ddata += dest->bytes_per_line;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2107,7 +2130,7 @@ static void convert_Alpha8_to_Indexed8(QImageData *dest, const QImageData *src,
|
||||
Q_ASSERT(src->format == QImage::Format_Alpha8);
|
||||
Q_ASSERT(dest->format == QImage::Format_Indexed8);
|
||||
|
||||
memcpy(dest->data, src->data, src->bytes_per_line * src->height);
|
||||
copy_8bit_pixels(dest, src);
|
||||
|
||||
dest->colortable = defaultColorTables->alpha;
|
||||
}
|
||||
@ -2117,8 +2140,7 @@ static void convert_Grayscale8_to_Indexed8(QImageData *dest, const QImageData *s
|
||||
Q_ASSERT(src->format == QImage::Format_Grayscale8);
|
||||
Q_ASSERT(dest->format == QImage::Format_Indexed8);
|
||||
|
||||
memcpy(dest->data, src->data, src->bytes_per_line * src->height);
|
||||
|
||||
copy_8bit_pixels(dest, src);
|
||||
|
||||
dest->colortable = defaultColorTables->gray;
|
||||
}
|
||||
|
@ -951,6 +951,7 @@ QWheelEvent::~QWheelEvent()
|
||||
|
||||
/*!
|
||||
\fn QPoint QWheelEvent::position() const
|
||||
\since 5.14
|
||||
|
||||
Returns the position of the mouse cursor relative to the widget
|
||||
that received the event.
|
||||
|
@ -162,12 +162,12 @@ QT_END_NAMESPACE
|
||||
if (icon.isNull())
|
||||
return nil;
|
||||
|
||||
auto nsImage = [[NSImage alloc] initWithSize:NSZeroSize];
|
||||
|
||||
auto availableSizes = icon.availableSizes();
|
||||
if (availableSizes.isEmpty() && size > 0)
|
||||
availableSizes << QSize(size, size);
|
||||
|
||||
auto nsImage = [[[NSImage alloc] initWithSize:NSZeroSize] autorelease];
|
||||
|
||||
for (QSize size : qAsConst(availableSizes)) {
|
||||
QImage image = icon.pixmap(size).toImage();
|
||||
if (image.isNull())
|
||||
@ -182,12 +182,15 @@ QT_END_NAMESPACE
|
||||
[nsImage addRepresentation:[imageRep autorelease]];
|
||||
}
|
||||
|
||||
if (!nsImage.representations.count)
|
||||
return nil;
|
||||
|
||||
[nsImage setTemplate:icon.isMask()];
|
||||
|
||||
if (size)
|
||||
nsImage.size = CGSizeMake(size, size);
|
||||
|
||||
return [nsImage autorelease];
|
||||
return nsImage;
|
||||
}
|
||||
@end
|
||||
|
||||
|
@ -420,7 +420,9 @@ QFontEngineData::~QFontEngineData()
|
||||
be removed with removeSubstitutions(). Use substitute() to retrieve
|
||||
a family's first substitute, or the family name itself if it has
|
||||
no substitutes. Use substitutes() to retrieve a list of a family's
|
||||
substitutes (which may be empty).
|
||||
substitutes (which may be empty). After substituting a font, you must
|
||||
trigger the updating of the font by destroying and re-creating all
|
||||
QFont objects.
|
||||
|
||||
Every QFont has a key() which you can use, for example, as the key
|
||||
in a cache or dictionary. If you want to store a user's font
|
||||
@ -1864,6 +1866,9 @@ QStringList QFont::substitutes(const QString &familyName)
|
||||
Inserts \a substituteName into the substitution
|
||||
table for the family \a familyName.
|
||||
|
||||
After substituting a font, trigger the updating of the font by destroying
|
||||
and re-creating all QFont objects.
|
||||
|
||||
\sa insertSubstitutions(), removeSubstitutions(), substitutions(), substitute(), substitutes()
|
||||
*/
|
||||
void QFont::insertSubstitution(const QString &familyName,
|
||||
@ -1882,6 +1887,10 @@ void QFont::insertSubstitution(const QString &familyName,
|
||||
Inserts the list of families \a substituteNames into the
|
||||
substitution list for \a familyName.
|
||||
|
||||
After substituting a font, trigger the updating of the font by destroying
|
||||
and re-creating all QFont objects.
|
||||
|
||||
|
||||
\sa insertSubstitution(), removeSubstitutions(), substitutions(), substitute()
|
||||
*/
|
||||
void QFont::insertSubstitutions(const QString &familyName,
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include <QtCore/qvector.h>
|
||||
#include <QDebug>
|
||||
|
||||
#include <limits>
|
||||
#include <locale>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -120,7 +121,7 @@ bool QAsn1Element::read(QDataStream &stream)
|
||||
return false;
|
||||
|
||||
// length
|
||||
qint64 length = 0;
|
||||
quint64 length = 0;
|
||||
quint8 first;
|
||||
stream >> first;
|
||||
if (first & 0x80) {
|
||||
@ -139,11 +140,13 @@ bool QAsn1Element::read(QDataStream &stream)
|
||||
length = (first & 0x7f);
|
||||
}
|
||||
|
||||
if (length > quint64(std::numeric_limits<int>::max()))
|
||||
return false;
|
||||
// value
|
||||
QByteArray tmpValue;
|
||||
tmpValue.resize(length);
|
||||
int count = stream.readRawData(tmpValue.data(), tmpValue.size());
|
||||
if (count != length)
|
||||
if (count != int(length))
|
||||
return false;
|
||||
|
||||
mType = tmpType;
|
||||
|
@ -278,8 +278,6 @@
|
||||
|
||||
/*!
|
||||
\typedef QDtls::GeneratorParameters
|
||||
|
||||
This is a synonym for QDtlsClientVerifier::GeneratorParameters.
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -472,7 +472,9 @@ QList<QCocoaWindow *> *QCocoaIntegration::popupWindowStack()
|
||||
|
||||
void QCocoaIntegration::setApplicationIcon(const QIcon &icon) const
|
||||
{
|
||||
NSApp.applicationIconImage = [NSImage imageFromQIcon:icon];
|
||||
// Fall back to a size that looks good on the highest resolution screen available
|
||||
auto fallbackSize = NSApp.dockTile.size.width * qGuiApp->devicePixelRatio();
|
||||
NSApp.applicationIconImage = [NSImage imageFromQIcon:icon withSize:fallbackSize];
|
||||
}
|
||||
|
||||
void QCocoaIntegration::beep() const
|
||||
|
@ -614,7 +614,11 @@ QPixmap QCocoaScreen::grabWindow(WId view, int x, int y, int width, int height)
|
||||
QRect windowRect;
|
||||
for (uint i = 0; i < displayCount; ++i) {
|
||||
QRect displayBounds = QRectF::fromCGRect(CGDisplayBounds(displays[i])).toRect();
|
||||
windowRect = windowRect.united(displayBounds);
|
||||
// Only include the screen if it is positioned past the x/y position
|
||||
if ((displayBounds.x() >= x || displayBounds.right() > x) &&
|
||||
(displayBounds.y() >= y || displayBounds.bottom() > y)) {
|
||||
windowRect = windowRect.united(displayBounds);
|
||||
}
|
||||
}
|
||||
if (grabRect.width() < 0)
|
||||
grabRect.setWidth(windowRect.width());
|
||||
@ -631,6 +635,11 @@ QPixmap QCocoaScreen::grabWindow(WId view, int x, int y, int width, int height)
|
||||
auto display = displays[i];
|
||||
QRect displayBounds = QRectF::fromCGRect(CGDisplayBounds(display)).toRect();
|
||||
QRect grabBounds = displayBounds.intersected(grabRect);
|
||||
if (grabBounds.isNull()) {
|
||||
destinations.append(QRect());
|
||||
images.append(QImage());
|
||||
continue;
|
||||
}
|
||||
QRect displayLocalGrabBounds = QRect(QPoint(grabBounds.topLeft() - displayBounds.topLeft()), grabBounds.size());
|
||||
QImage displayImage = qt_mac_toQImage(QCFType<CGImageRef>(CGDisplayCreateImageForRect(display, displayLocalGrabBounds.toCGRect())));
|
||||
displayImage.setDevicePixelRatio(displayImage.size().width() / displayLocalGrabBounds.size().width());
|
||||
|
@ -376,8 +376,18 @@ void QCocoaWindow::setVisible(bool visible)
|
||||
} else if (window()->modality() == Qt::ApplicationModal) {
|
||||
// Show the window as application modal
|
||||
eventDispatcher()->beginModalSession(window());
|
||||
} else if (m_view.window.canBecomeKeyWindow && !eventDispatcher()->hasModalSession()) {
|
||||
[m_view.window makeKeyAndOrderFront:nil];
|
||||
} else if (m_view.window.canBecomeKeyWindow) {
|
||||
bool shouldBecomeKeyNow = !NSApp.modalWindow || m_view.window.worksWhenModal;
|
||||
|
||||
// Panels with becomesKeyOnlyIfNeeded set should not activate until a view
|
||||
// with needsPanelToBecomeKey, for example a line edit, is clicked.
|
||||
if ([m_view.window isKindOfClass:[NSPanel class]])
|
||||
shouldBecomeKeyNow &= !(static_cast<NSPanel*>(m_view.window).becomesKeyOnlyIfNeeded);
|
||||
|
||||
if (shouldBecomeKeyNow)
|
||||
[m_view.window makeKeyAndOrderFront:nil];
|
||||
else
|
||||
[m_view.window orderFront:nil];
|
||||
} else {
|
||||
[m_view.window orderFront:nil];
|
||||
}
|
||||
@ -894,10 +904,13 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon)
|
||||
|
||||
QMacAutoReleasePool pool;
|
||||
|
||||
if (icon.isNull())
|
||||
if (icon.isNull()) {
|
||||
iconButton.image = [NSWorkspace.sharedWorkspace iconForFile:m_view.window.representedFilename];
|
||||
else
|
||||
iconButton.image = [NSImage imageFromQIcon:icon];
|
||||
} else {
|
||||
// Fall back to a size that looks good on the highest resolution screen available
|
||||
auto fallbackSize = iconButton.frame.size.height * qGuiApp->devicePixelRatio();
|
||||
iconButton.image = [NSImage imageFromQIcon:icon withSize:fallbackSize];
|
||||
}
|
||||
}
|
||||
|
||||
void QCocoaWindow::setAlertState(bool enabled)
|
||||
|
@ -100,6 +100,18 @@ void QCocoaWindowManager::modalSessionChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Our worksWhenModal implementation is declarative and will normally be picked
|
||||
// up by AppKit when needed, but to make sure AppKit also reflects the state
|
||||
// in the window tag, so that the window can be ordered front by clicking it,
|
||||
// we need to explicitly call setWorksWhenModal.
|
||||
for (id window in NSApp.windows) {
|
||||
if ([window isKindOfClass:[QNSPanel class]]) {
|
||||
auto *panel = static_cast<QNSPanel *>(window);
|
||||
// Call setter to tell AppKit that our state has changed
|
||||
[panel setWorksWhenModal:panel.worksWhenModal];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void initializeWindowManager() { Q_UNUSED(QCocoaWindowManager::instance()); }
|
||||
|
@ -158,8 +158,79 @@ static bool isMouseEvent(NSEvent *ev)
|
||||
#define QNSWINDOW_PROTOCOL_IMPLMENTATION 1
|
||||
#include "qnswindow.mm"
|
||||
#undef QNSWINDOW_PROTOCOL_IMPLMENTATION
|
||||
|
||||
- (BOOL)worksWhenModal
|
||||
{
|
||||
if (!m_platformWindow)
|
||||
return NO;
|
||||
|
||||
// Conceptually there are two sets of windows we need consider:
|
||||
//
|
||||
// - windows 'lower' in the modal session stack
|
||||
// - windows 'within' the current modal session
|
||||
//
|
||||
// The first set of windows should always be blocked by the current
|
||||
// modal session, regardless of window type. The latter set may contain
|
||||
// windows with a transient parent, which from Qt's point of view makes
|
||||
// them 'child' windows, so we treat them as operable within the current
|
||||
// modal session.
|
||||
|
||||
if (!NSApp.modalWindow)
|
||||
return NO;
|
||||
|
||||
// If the current modal window (top level modal session) is not a Qt window we
|
||||
// have no way of knowing if this window is transient child of the modal window.
|
||||
if (![NSApp.modalWindow conformsToProtocol:@protocol(QNSWindowProtocol)])
|
||||
return NO;
|
||||
|
||||
if (auto *modalWindow = static_cast<QCocoaNSWindow *>(NSApp.modalWindow).platformWindow) {
|
||||
if (modalWindow->window()->isAncestorOf(m_platformWindow->window(), QWindow::IncludeTransients))
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
@end
|
||||
|
||||
#if !defined(QT_APPLE_NO_PRIVATE_APIS)
|
||||
// When creating an NSWindow the worksWhenModal function is queried,
|
||||
// and the resulting state is used to set the corresponding window tag,
|
||||
// which the window server uses to determine whether or not the window
|
||||
// should be allowed to activate via mouse clicks in the title-bar.
|
||||
// Unfortunately, prior to macOS 10.15, this window tag was never
|
||||
// updated after the initial assignment in [NSWindow _commonAwake],
|
||||
// which meant that windows that dynamically change their worksWhenModal
|
||||
// state will behave as if they were never allowed to work when modal.
|
||||
// We work around this by manually updating the window tag when needed.
|
||||
|
||||
typedef uint32_t CGSConnectionID;
|
||||
typedef uint32_t CGSWindowID;
|
||||
|
||||
extern "C" {
|
||||
CGSConnectionID CGSMainConnectionID() __attribute__((weak_import));
|
||||
OSStatus CGSSetWindowTags(const CGSConnectionID, const CGSWindowID, int *, int) __attribute__((weak_import));
|
||||
OSStatus CGSClearWindowTags(const CGSConnectionID, const CGSWindowID, int *, int) __attribute__((weak_import));
|
||||
}
|
||||
|
||||
@interface QNSPanel (WorksWhenModalWindowTagWorkaround) @end
|
||||
@implementation QNSPanel (WorksWhenModalWindowTagWorkaround)
|
||||
- (void)setWorksWhenModal:(BOOL)worksWhenModal
|
||||
{
|
||||
[super setWorksWhenModal:worksWhenModal];
|
||||
|
||||
if (QOperatingSystemVersion::current() < QOperatingSystemVersion::MacOSCatalina) {
|
||||
if (CGSMainConnectionID && CGSSetWindowTags && CGSClearWindowTags) {
|
||||
static int kWorksWhenModalWindowTag = 0x40;
|
||||
auto *function = worksWhenModal ? CGSSetWindowTags : CGSClearWindowTags;
|
||||
function(CGSMainConnectionID(), self.windowNumber, &kWorksWhenModalWindowTag, 64);
|
||||
} else {
|
||||
qWarning() << "Missing APIs for window tag handling, can not update worksWhenModal state";
|
||||
}
|
||||
}
|
||||
}
|
||||
@end
|
||||
#endif // QT_APPLE_NO_PRIVATE_APIS
|
||||
|
||||
#else // QNSWINDOW_PROTOCOL_IMPLMENTATION
|
||||
|
||||
// The following content is mixed in to the QNSWindow and QNSPanel classes via includes
|
||||
@ -237,17 +308,6 @@ static bool isMouseEvent(NSEvent *ev)
|
||||
return canBecomeMain;
|
||||
}
|
||||
|
||||
- (BOOL)worksWhenModal
|
||||
{
|
||||
if (m_platformWindow && [self isKindOfClass:[QNSPanel class]]) {
|
||||
Qt::WindowType type = m_platformWindow->window()->type();
|
||||
if (type == Qt::Popup || type == Qt::Dialog || type == Qt::Tool)
|
||||
return YES;
|
||||
}
|
||||
|
||||
return [super worksWhenModal];
|
||||
}
|
||||
|
||||
- (BOOL)isOpaque
|
||||
{
|
||||
return m_platformWindow ? m_platformWindow->isOpaque() : [super isOpaque];
|
||||
|
@ -84,7 +84,7 @@ class TestQString : public QObject
|
||||
void wrapInFunction()
|
||||
{
|
||||
//! [1]
|
||||
QVERIFY2(qIsNaN(0.0 / 0.0), "Ill-defined division produced unambiguous result.");
|
||||
QVERIFY2(QFileInfo("file.txt").exists(), "file.txt does not exist.");
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
|
@ -1370,6 +1370,9 @@ QStringList qt_make_filter_list(const QString &filter)
|
||||
|
||||
\snippet code/src_gui_dialogs_qfiledialog.cpp 6
|
||||
|
||||
\note This is not supported on Android's native file dialog. Use
|
||||
\l{setMimeTypeFilters()} instead.
|
||||
|
||||
\sa setMimeTypeFilters(), setNameFilters()
|
||||
*/
|
||||
void QFileDialog::setNameFilter(const QString &filter)
|
||||
@ -1441,6 +1444,9 @@ QStringList qt_strip_filters(const QStringList &filters)
|
||||
filters for each file type. For example, JPEG images have three possible
|
||||
extensions; if your application can open such files, selecting the
|
||||
\c image/jpeg mime type as a filter will allow you to open all of them.
|
||||
|
||||
\note This is not supported on Android's native file dialog. Use
|
||||
\l{setMimeTypeFilters()} instead.
|
||||
*/
|
||||
void QFileDialog::setNameFilters(const QStringList &filters)
|
||||
{
|
||||
|
@ -927,9 +927,16 @@ void tst_QtJson::testObjectIteration()
|
||||
QCOMPARE(object, object2);
|
||||
|
||||
QJsonObject::iterator it = object2.find(QString::number(5));
|
||||
QJsonValue val = *it;
|
||||
object2.erase(it);
|
||||
QCOMPARE(object.size(), 10);
|
||||
QCOMPARE(object2.size(), 9);
|
||||
|
||||
for (QJsonObject::const_iterator it = object2.constBegin(); it != object2.constEnd(); ++it) {
|
||||
QJsonValue value = it.value();
|
||||
QVERIFY(it.value() != val);
|
||||
QCOMPARE((double)it.key().toInt(), value.toDouble());
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user