To achieve this, we save the result of the subarch test in the cache
variable TEST_subarch_result and use this value as the right hand side
of the QT_CPU_FEATURES.xxx assignment. The Qt6HostInfo package now
sets the variable QT6_HOST_INFO_SUBARCHS which will be used for the
host_build scope in qmodule.pri when cross-building.
Change-Id: I2c25f205bfc0692aef0d6f43ff4e542d27e1b948
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Gets rid of a call to QApplication::keyboardModifiers in a method that
is anyway only called from an input event handler, where we have that
information already.
Task-number: QTBUG-73829
Change-Id: I81753d6bf725e9db4918d831fac5b03a0b1940b9
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Slight language simplification, and consistent usage of paragraph for
all QStyleOption subclasses.
Change-Id: I06a0480fc963d4457d5397b11df3acf62bc6912a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
And only implement it for QPodArrayOps, as that's the only case where
we should be using it.
Change-Id: If48f3e4b142c322d3451309d6d1cf68aee569ea2
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The change introduced crashes in some tests that only surfaced
in certain CMake configurations.
This reverts commit 76c3eee402.
Pick-to: 5.15
Task-number: QTBUG-85357
Change-Id: Ief93aa41e2d487d73b879133e7df0fd5ce0451bd
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Apple deprecated the entire OpenGL API in favor of Metal, which
we are aware of, so we don't need to see the warnings when building
Qt.
Instead of applying the silencing globally for all Qt consumers,
both internal and external, we now limit the silencing to Qt itself.
That means user code that explicitly uses any of the deprecated APIs
will see the warnings. Note that this does not apply to merely using
any of the Qt OpenGL APIs. The user has to explicitly use the platform
APIs that have been deprecated.
The warnings need to be disabled on a build system level, so that
that they are passed as -D flags on the command line. If the defines
were done in Qt headers (qguiglobal.h e.g.), they would require the
user to always include this header before any of the Apple headers.
Change-Id: I3f2a2a5211332a059ad4416394251772c677fdcb
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The API is available by including qopenglcontext.h as usual,
but scoped in the QPlatformInterface namespace. The namespace
exposes platform specific type-safe interfaces that provide:
a) Factory functions for adopting native contexts, e.g.
QCocoaGLContext::fromNative(nsContext, shareContext);
b) Access to underlying native handles, e.g.
openGLContext->platformInterface<QCocoaGLContext>->nativeContext()
c) Platform specific functionality, e.g.
static QWGLContext::openGLModuleHandle()
openGLContext->platformInterface<QEGLContext>->doSomething();
The platform interfaces live close to the classes they extend,
removing the need for complex indirection and plumbing, and
avoids kitchen-sink modules and APIs such as the extras modules,
QPlatformFunctions, or QPlatformNativeInterface.
In the case of QOpenGLContext these platform APIs are backed
by the platform plugin, so dynamic_cast is used to ensure the
platform plugin supports the requested interface, but this is
and implementation detail. The interface APIs are agnostic
to where the implementation lives, while still being available
to the user as part of the APIs they extend/augment.
The documentation will be restored when the dust settles.
Task-number: QTBUG-80233
Change-Id: Iac612403383991c4b24064332542a6e4bcbb3293
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
We used chars for the width and height of glyphs when caching
them in the Freetype engine. This was okay for Qt Widgets because
we would fall back to QPainterPath when the fonts were too big
anyway (though this has since become configurable).
But in Qt Quick, when NativeRendering is in use, we will always cache
glyphs, because they need to be uploaded to the GPU. Also 255 is
no longer a large font size with current screen sizes, so we need to
upgrade our maximum. The new maximum size is 65535x65535.
[ChangeLog][QtGui][Text] Fixed a bug where glyphs would be clipped
at very large sizes.
Fixes: QTBUG-85259
Pick-to: 5.15
Change-Id: I9a01a707b274e5f12e49c1b0bd58f743abae9f5e
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Without double-inverting it (and having a knob and the blue filling
mirroring each other relative to the center of the slider's bar).
Pick-to: 5.15
Fixes: QTBUG-85342
Change-Id: I4f0e8dd6d76e5e078a2db5c2ca63ba6bb2a661ed
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Add internal documentation how to map configure options to CMake
arguments. This patch adds a markdown file with a giant table, and
cmake/README.md links to it.
Change-Id: I94a6a4ee24ed0114ccb3095d2c13cf5d84e2de72
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
The tab has to be repainted even f the mouse release event happened
outside the tab bar, otherwise it will look like the tab is still
pressed.
As a drive-by, replace the repaint() call with update(); there is
no need for synchronous painting in an event handler.
Pick-to: 5.15
Fixes: QTBUG-81637
Change-Id: Ia55182be906511ac3b462f00add8a621c6c05fc3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
QPluginLoader does not call unload() on the QLibraryPrivate without an
explicit call to QPluginLoader::unload(). QFactoryLoader should behave
the same. We want to avoid unload() if possible as we generally don't
unload plugins and the resulting behavior varies between platforms. In
particular, macOS does make the address space of libraries only the
plugin links to inaccessible on close() even if RTLD_NODELETE is given.
For code that actually wants to unload(), an explicit function to do so
could be added. As QFactoryLoader is private API, there is no need to do
that until such a case is found.
Change-Id: I4e57259a9dcb4ceb60dfbfeda55abc0b995f436a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
It wasn't possible to create a cross, non-prefix build with
CMAKE_INSTALL_PREFIX set to something else but the qtbase build dir
and CMAKE_STAGING_PREFIX set to the qtbase build dir.
This would be equivalent to
configure -prefix /usr \
-extprefix ~/my/qtbase/build/dir
Fix this by comparing the qtbase build dir against
CMAKE_STAGING_PREFIX if it is set. We also have to adjust the
QT_BUILD_DIR variable in a similar way.
Change-Id: Iaba5cf0f6954ae4b15d8af1fc62634f5d7f68835
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This patch modifies the two preprocessor definitions
QT_CONFIGURE_HOSTBINDIR_TO_HOSTPREFIX_PATH and
QT_CONFIGURE_HOSTBINDIR_TO_EXTPREFIX_PATH which are exclusively used
by qmake (and not QtCore's QLibraryInfo) to determine the ext prefix
and the host prefix.
In the qmake build of Qt, qmake considers the host prefix as "location
where qmake is installed". This is usually the same as the ext prefix
but can be modified by the user at configure time.
In the CMake build, we don't build tools for the host but always for
the target platform. The QT_HOST_PATH is an external prefix we never
install to. That means, the qmake we build is always installed into
the ext prefix (CMAKE_STAGING_PREFIX or CMAKE_INSTALL_PREFIX).
Therefore, we can calculate the path of <ext_prefix>/bin relative to
<ext_prefix> and use this value for both,
QT_CONFIGURE_HOSTBINDIR_TO_HOSTPREFIX_PATH and
QT_CONFIGURE_HOSTBINDIR_TO_EXTPREFIX_PATH.
The "path of <ext_prefix>/bin relative to <ext_prefix>" is equivalent to
just the "path <prefix>/bin relative to <prefix>", meaning we can
safely use <prefix>, which is just CMAKE_INSTALL_PREFIX.
Task-number: QTBUG-84886
Change-Id: Ie1d4628a7049ddfd0d0a56dfe4ee2f2bb4952277
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Rather than naming a "GMT" string so as to repeatedly test whether a
date-time's string representation ends in it, use a simple lambda to
do the test, so that the string is only used in one place anyway.
Makes the test code more readable.
Change-Id: I5afad9ad5d58702bea7f24e5e5688ea4d738ae0d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
We're not going to replace these any time soon, so remove the warning.
Change-Id: If020d2d3cf752e9a11558a55df5d05e2d2b3c567
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
QPlatformOpenGLContext takes care of that via QPlatformOpenGLContextPrivate,
which is set up in QOpenGLContext::create().
Change-Id: I1088c2e18efe6023c8e76f126d967a607746e980
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Skip crashing tests and ignore failing tests on CMake platforms.
Add missing QTEST_ENVIRONMENT=ci env var assignment to Coin test
instructions. This was hardcoded by the Coin code for qmake
configurations.
Task-number: QTBUG-85364
Change-Id: Id2312e504a0d36b8f8596d4cebaa49c63731406e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Certain tests fail only on CMake configurations. We need the
capability to ignore these failures, without removing the
qmake-built-Qt coverage for now.
The keyword is enabled when Qt is built with CMake. So it doesn't
matter if the final test is built with CMake or qmake.
Task-number: QTBUG-85364
Change-Id: I157fe3d9254b589ef1e84022c01f4487ff834d27
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Amend d934fd7f54, which was too naive in
assuming that any change to the popup stack while a popup had been
pressed into should result in mouse move events to be delivered without
buttons.
Instead, add a new flag that is set explicitly when the qt_popup_down
widget is closed, and remove buttons from the move move events only when
that flag is set.
Add the sorely missing test case as well, even if we have to accept that
not all behavior can be tested reliably. Ie. on macOS, the simulated
mouse event differs from the event we do get from the QPA plugin or the
system; on Xcb, some of the behavior depends on the window manager.
This is something we could try to clean up for Qt 6.
Change-Id: Ibf0a0a6fb7d401915057365788947e5a35aa20c3
Fixes: QTBUG-84926
Task-number: QTBUG-82538
Pick-to: 5.15
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Liang Qi <liang.qi@qt.io>
We had such an overloaded version in QSslSocket, it was deprecated without
providing any alternative. Now this function has some use and may be
introduced in Qt6, as QSslConfiguration::setCiphers(const QString &).
Last but not the least - a useless and strange auto-test was removed
(it was creating a list of 5 QSslCiphers each with isNull() == true).
That's becasue '!MD5' or 'ALL' (for example) is not a cipher to be found
in supportedCiphers.
Change-Id: I47eb4c0faa9b52885e883751dd992cd9cb3d26fe
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The qmake we're building is always built for the target platform.
Therefore, QT_CONFIGURE_CROSSBUILD can always be set to a falsy value.
Change-Id: I0f03c4ce0c75d3b4e97be5141adf742276131dcb
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Becaues the database objects were created as globals, there was a
possible use-after-free issue when deleting the objects on application
exit.
Move the initialization of the database objects into static variables
inside the test constructor.
As a drive-by, also add one missing test to the CMake projects.
Fixes: QTBUG-85357
Change-Id: I2c8f2c5daee96bb9d1d21dae37950a2da5ffdf27
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Building an iOS app with qmake failed because Qt itself was not built
with bitcode enabled.
Enable building with bitcode.
Make sure qrc resource files and bundled 3rd party libraries also
build with the regular Qt module flags and thus with bitcode enabled.
As a consequence gc_sections has to be disabled for UIKIT platforms.
Task-number: QTBUG-82581
Task-number: QTBUG-84781
Task-number: QTBUG-85240
Change-Id: I15fe668725a139c02f2a32a5db849b46d4ce325c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
When building qtbase for iOS with CMake, and then trying to mix build
qtsvg with qmake, the value of MODULE_BASE_OUTDIR was wrongly set
to the host prefix because that usually coincides with the target
prefix when doing builds with just qmake.
That is not the case for CMake builds, where the host and target
prefix locations are necessarily different.
This caused syncqt to place the forwarding headers inside the host
prefix location instead of the target prefix location, and thus
compiling qtsvg files failed.
Make sure to use the target install prefix instead of the host one.
Task-number: QTBUG-82581
Task-number: QTBUG-84781
Task-number: QTBUG-85240
Change-Id: I592be0b2799c72c11497c8adc12be13106082cfc
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This is required for qmake to correctly pick up and use plugins that
have strange characters in the types (slashes for platforms/darwin
type and dashes for wayland plugin types).
This fixes some issues with trying to build an iOS application
using qmake due to the qiosnsphotolibrarysupport plugin.
Task-number: QTBUG-85240
Task-number: QTBUG-84781
Task-number: QTBUG-82581
Change-Id: I94faf2d3dbbdeb22dbd96dfb11c7bff00645b524
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
The EffectivePaths section does not inherit the Prefix value from
the Paths section.
Specfiy it explicitly, otherwise the paths reported by qmake -query
for /get variants ended up containing an extra "./bin/" part, which
ended up breaking building iOS apps with qmake.
Amends d7fd684861
Task-number: QTBUG-85240
Task-number: QTBUG-84781
Task-number: QTBUG-82581
Change-Id: I288a6e76a21d779a7e03443777f8a4ce28df9974
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
target_link_libraries expects a quoted string like
"-framework CoreFoundation" when linking frameworks and not 2
different arguments like "-framework" "CoreFoundation".
Fix that in the FindWrapOpenGL and FindGLESv2 find modules.
Make sure to not quote the framework link flags when generating
.pri files even if there are spaces, otherwise building apps
with qmake fails.
Amends 7fcc9cf055
Amends 2ed63e587e
Amends 55a15a1c1b
Amends 2a767ab4bb
Task-number: QTBUG-85240
Change-Id: I66ba36760ad704d65e712072a528d9e25c336dfa
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Promotes qt_find_package()'d targets and their transitive dependency
targets to global scope. This will allow .prl file generation to
access targets in a sibling repo scope.
Retrofits qt_collect_libs() to be a bit more general, so it can be
reused both for prl lib collection, and traversing of dependencies
of qt_find_package() provided targets.
Removes the bail out checks for top-level static builds.
Amends 8c8c0f65e3
Amends dde11715d3
Task-number: QTBUG-84874
Fixes: QTBUG-84917
Change-Id: Id95b4cb7a0887c52f35c40bfdb96ad4a68dd6794
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
The platform plugins are implemented to grab the entire screen if
no window ID is provided. They do not grab the entire virtual
screen, just the screen the method is called on.
On macOS, the implementation ignored the window parameter, and
always grabbed the entire virtual screen. This change fixes the
cocoa implementation. The test passes in local tests (with two
displays with different dpr). Since grabbing a screen returns an
image with managed colors, we need to convert it to sRGB color
spec first, otherwise displaying a grabbed image will produce
different results. This will need to be changed once Qt supports
a fully color managed flow.
The test does not cover the case where a window spans multiple
displays, since this is generally not supported at least on macOS.
The code that exists in QCocoaScreen to handle that case is
untested, but with the exception of the optimization it is also
unchanged.
Done-with: Morten Sørvig <morten.sorvig@qt.io>
Change-Id: I8ac1233e56d559230ff9e10111abfb6227431e8c
Fixes: QTBUG-84876
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
At least it will look polymorphic by doing dispatch internally.
Adding pointingDeviceType avoids the need for qobject_cast,
and will probably also be useful in other contexts.
Change-Id: I3b6d13765bdf3add9a8208de6f0e98018e40cc42
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
As a drive by, fix recursive inclusion in qxcbscreen.h.
Task-number: QTBUG-83255
Change-Id: Ia008921b559ef450c07aa17ca554c6b35e0a88bd
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Align with int16_t in xcb_create_window() and xcb_get_geometry_reply_t.
Fixes: QTBUG-85275
Pick-to: 5.15
Change-Id: Ibbc0fab6b3d725a96ac4545857a4f04b026c4175
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
idx has already been tested for being >=0, so it's pointless
retesting it.
Change-Id: I2f5d7e1b7a70097de2601c1ed83752f6aa707cd9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The insert() overloads have generally a very wide contract. The very
next line accepts negative positions, so remove the related assert.
Change-Id: I89b67615c59287825942047a28572bf896cf30e3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Fix the signature of an assignment operator.
Change-Id: I125c0129bb2607e5d8beb932da843a0393f2cfeb
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
We only support one display (X server connection), so there's no reason
to have the user pass in the display. We can always use the one we know
from the QXCbScreen (which also matches the QXcbIntegration connection).
Change-Id: Ifc43dac4c74ba16490d3dee25fc3d43ee053a7d5
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
For all of these we know in advance that the vast majority of usages
will not exceed a certain number of elements. Also, none of these are
copied or moved ever.
Change-Id: I48aedf143e221dc178d661e23454d1e4fb7a271b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>