We currently match font family names in cross-platform code, before
asking the system to load it. In the case of an empty family name, we
will return the first font in the list which matches the other
conditions.
After that, though, we would pass the empty family name to the
platform font database, and some old platform-specific matching
was invoked. In the case of Windows, we would default to
MS Sans Serif, which is the old Windows 1.0 raster font and which
is probably used by Qt exclusively in the world at this point.
The problem in the end was that the font info would be out of sync.
If the font matched by Qt happened to be smoothly scalable, then
we would treat MS Sans Serif as smoothly scalable, giving us
random glyphs when displaying text in Qt Quick. We would also
overwrite the family name with the one matched by Qt, so even
when MS Sans Serif was used to render the text, we would report
that it was something else.
For empty font families, we therefore pass the family we have
actually matched into the platform database. This will have
the side effect of trusting the font matching in Qt, but only
for the rare case where someone actually explicitly sets the
font family to the empty string.
Note that the random glyph bug that triggered the investigation is not
happening anymore after 1eedfd0e66
because we will detect the glyph outlines as unreliable in the
MS Sans Serif font now instead of trusting the smoothly scalable
flag. But there would still be a mismatch between the font used
for rendering and the matched font.
Task-number: QTBUG-63147
Change-Id: I4a09ffddf9f8a0fabe7738e2944b6d874e4728f0
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Avoid an unnecessary call to the slow base implementation on
buffered TCP socket.
Change-Id: Icc823b416b267aa8e0c1106b20872df9ef0e22d7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Remaining uses of Q_DECL_FINAL are in:
src/corelib/global/qcompilerdetection.h
src/corelib/global/qglobal.cpp
(definition and documentation of Q_DECL_FINAL)
src/tools/moc/moc.cpp
tests/auto/tools/moc/
(supported for moc for Q_DECL_FINAL)
Change-Id: I0d28946c9c3f9d37d0b303db86079129014de1f3
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
From the announcement[1]
- The GNU C Library will now detect when /etc/resolv.conf has been
modified and reload the changed configuration. The new resolver
option “no-reload” (RES_NORELOAD) disables this behavior.
Since glibc can do it, we don't have to call res_init before every
single getaddrinfo() call. And since we don't need to call res_init, we
don't need to load libresolv.so at all, until we need res_ninit.
We won't do it even if the user configured "no-reload" in
/etc/resolv.conf or RES_NORELOAD in the res variable -- let's assume
that it is the intent, like when /etc/resolv.conf is known to never
change.
[1] https://sourceware.org/ml/libc-alpha/2017-08/msg00010.html
Change-Id: I3868166e5efc45538544fffd14d738d40c375fd1
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
All Qt applications crash on startup on macOS 10.13 with an
infinite recursion in -[QNSWindow sendEvent:].
This reverts commit a980250a66.
Change-Id: I155a89e61b1695f18627bf158389eb130b98751a
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
IBus engines that call HidePreeditText() or ShowPreeditText() not work
correctly on Qt5 because the ibus platforminputcontext plugin does not
implement this functions.
Patch-By: Fuminobu Takeyama
Task-number: QTBUG-48412
Change-Id: I936d4c46518b5bee7c5ad2b03d8c24202ab1074e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Takao Fujiwara <takao.fujiwara1@gmail.com>
Remaining uses of Q_NULLPTR are in:
src/corelib/global/qcompilerdetection.h
(definition and documentation of Q_NULLPTR)
tests/manual/qcursor/qcursorhighdpi/main.cpp
(a test executable compilable both under Qt4 and Qt5)
Change-Id: If6b074d91486e9b784138f4514f5c6d072acda9a
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Remaining uses of Q_DECL_OVERRIDE are in:
src/corelib/global/qcompilerdetection.h
src/corelib/global/qglobal.cpp
doc/global/qt-cpp-defines.qdocconf
(definition and documentation of Q_DECL_OVERRIDE)
tests/manual/qcursor/qcursorhighdpi/main.cpp
(a test executable compilable both under Qt4 and Qt5)
Change-Id: Ib9b05d829add69e98a86238274b6a1fcb19b49ba
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
...to the screen, where it belongs.
Task-number: QTBUG-63088
Change-Id: I4bfc4c259f91431d12851f888a7d044e43856d63
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Expose the fd from eglfs_kms. More exposed bits will follow
later on.
[ChangeLog][Platform Specific Changes][eglfs] The DRM+GBM backend
now exposes the DRM/GBM device handle under the key "dri_fd",
queriable via nativeResourceForIntegration().
Task-number: QTBUG-63088
Change-Id: Iac95393c115bb83d1f65cb4a7acc0ea3e7d3e68f
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Clean up the includes too while we are at it.
Task-number: QTBUG-63058
Change-Id: I36eaaa5fc18219ca271b6bea8425ac8cc7cb8b6d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
The intention of choosing a different CRTC for each connector is fine,
but the code is flawed: the bitmask thas marks used crtc must be based
on the crtc index, not the id.
In practice the fix makes a difference only when multiple connectors
are in use and there are crtc ids above 31.
Task-number: QTBUG-63058
Change-Id: I74e01add72df9c6e0b8fbddab978c102573a282c
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
...and purge support from eglfs_kms. That path never worked, the environment
variable was meant for the NVIDIA backend only.
Task-number: QTBUG-63058
Change-Id: I8cf47168d5878e18eb22c839d56e2d48cbb4fdad
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This is interesting because QSemaphore now needs to allocate no memory:
it's just a simple 31-bit counter and the contention flag.
Change-Id: I6e9274c1e7444ad48c81fffd14dbc0ab42bc2e00
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
So I can use it in QSemaphore and provide a Windows implementation.
Change-Id: I6e9274c1e7444ad48c81fffd14dbc0a8e2201302
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The variable is there to work around an aliasing issue.
Since this code is likely coming straight from Qt 2 or 3,
I'm not doing any major modification, just explaining why that
variable is necessary and mark it as unused (so that a static
analyzer that knows about value classes won't complain that
we're creating a QVector without using it).
Change-Id: Ie8777563724ec3c0bf97d8bc24e1b184fe26bd2f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
In preparation to move the code into QTestLib proper.
* Move to PMF-based connect() statements
* Remove a bunch of commented out code
* Streamline the logging of debugging / warnings, use categorized logging
Change-Id: Iec0872b63959decce49487762472c9a82bcc9fa1
Reviewed-by: David Faure <david.faure@kdab.com>
For self-consistency with QSharedPointer and minor consistency
with std::unique_ptr (although QScopedPointer isn't movable, so we
can't claim STL compatibility with it).
[ChangeLog][QtCore][QScopedPointer] Added get().
Change-Id: Ib58f936afa0e0d5bce57a61d1467b69956f37ceb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
In data(), index belongs to the proxy, not to the source. It needs
to be mapped back to it first.
Change-Id: Ie5dcbf13166dadf62f3d85b594d3227383132521
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This makes an enormous difference in responsiveness on the iPad Pro:
it actually feels like real-time drawing with hardly any lag.
Change-Id: I17c3b948e818d4ee46b4d24934c929ab9b386e69
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
The Apple Pencil now generates QTabletEvents, with tilt, rotation and pressure.
Predicted touches are not supported, because we don't yet have a suitable
QEvent or flag for that.
[ChangeLog][iOS] The Apple Pencil now generates QTabletEvents, with the
complete feature set (tilt, rotation, pressure).
Task-number: QTBUG-59042
Change-Id: Id58e22ac4cf8dfa80519d516c388309966f773f9
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Some valid UTF-16 characters cannot be expressed in XML 1.0 and a
QString may contain invalid unicode. In both cases we should not write
the respective data to the output stream, as that generates invalid XML,
which then cannot be read back by QXmlStreamReader. In addition we
should report an error if we encounter them.
The change filters the incorrect strings from the output and introduces
an "encodingError" flag which is reported from hasError().
[ChangeLog][Important Behavior Changes] Characters invalid in XML, such
as 0x0 or 0xfffe, as well as strings containing unmatched UTF-16
surrogates are now suppressed from the output of QXmlStreamWriter and
cause the error flag to be set.
Task-number: QTBUG-63150
Change-Id: Ia29bab768fed9681dd68e8934da2a7e3fcdfc3cd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
When scrolling to the bottom of the view, if there are expanded items
then it should call canFetchMore/fetchMore up the chain until it
finds one with more items that can possibly be retrieved.
This brings it in line with the QAbstractItemView implementation
which would call canFetchMore on the root index, therefore we
go up the chain to the root to see if anything before that can be fetched.
[ChangeLog][QtWidgets][QTreeView] QTreeView now calls canFetchMore and
fetchMore when the bottom of the QTreeView is scrolled to.
Task-number: QTBUG-48725
Change-Id: I2b2145684bb34c8c317bfce4a0ef14f243a64719
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
clang-qdoc must be compilable using the bootstrap library,
but clang-qdoc uses QTemporaryDir, which is not there. This
change adds it.
This also required changing some camelcase includes to their
lower case equivalents.
Change-Id: I8d03864f56e4bf474c3fdcde5e744ed31fea7fc3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
Amends cab060631
Task-number: QTBUG-62995
Change-Id: I374153ec34abad0585d2bcab0f699b42600be6ef
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
This removes the pre-dexed JAR files activated by the absence of the
bundled_jar_file CONFIG option, as versions of Android >= 5 no longer
support this deployment mechanism.
Now, the "bundled" JARs simply become normal JARs containing class
files, and are neither activated by a bundled_jar_file CONFIG entry nor
do they have a -bundled suffix in the file's base name.
Task-number: QTBUG-62995
Change-Id: I3fa6819259be365b7a697f7db1d1d01a94032395
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
As QLocalSocket keeps incoming data in the inner socket object, we
can implement the outer's skip() by simply calling the inner's. This
avoids the slow read()-based code path provided by the base class.
Change-Id: I66547601ebad1b4acf168475bebd81fbeef969f8
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Attempting to switch /dev/dri/cardX to /dev/dri/renderDY is futile
on its own now since many output-related drm operations fail and we
eventually crash.
Add a new headless mode that skips the real screen stuff and registers
a fairly dummy, headless screen, does not bother with the mouse cursor,
and disallows rendering to the screen via a QWindow (while keeping the
actual rendering still fully functional).
Such applications will not need any special privileges and will run even
if there is a DRM master (X11, Wayland compositor) active.
For example the configuration can look like this:
{
"device": "/dev/dri/renderD128",
"headless": "1024x768"
}
After this applications have two choices to perform offscreen
rendering:
1. Use an ordinary window (and its default framebuffer, meaning the
gbm_surface), e.g. a QOpenGLWindow subclass
MyOpenGLWindow w;
w.show(); // will not actually show on screen
w.grabFramebuffer().save("output.png");
Note that there is no vsync-based throttling. Also note that windows are
still sized to match the screen size, hence the need for specifying a size
in the headless property.
2. Or the typical offscreen approach with an extra FBO
QOffscreenSurface s;
s.setFormat(ctx.format());
s.create();
ctx.makeCurrent(&s0;
QOpenGLFramebufferObject fbo(1024, 768);
fbo.bind();
ctx.functions()->glClearColor(1, 0, 0, 1);
ctx.functions()->glClear(GL_COLOR_BUFFER_BIT);
fbo.toImage().save("output.png");
ctx.doneCurrent();
Task-number: QTBUG-62262
Change-Id: Ic1dbfa2b27b223bd5ef8ba36b665f0f61abf4f06
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
{
"device": "/dev/dri/card0",
"outputs": [
{ "name": "HDMI1", "mode": "1920x1080" },
{ "name": "DP1", "mode": "1920x1080", "clones": "HDMI1" }
]
}
Here, assuming the QScreen for DP1 is unused and the resolution is the same,
DP1 will simply mirror whatever is on HDMI1.
The plane-based mouse cursor is not currently supported. Same goes for any
form of scaling since this simply scans out the same framebuffer on all
target CRTCs.
Task-number: QTBUG-62262
Change-Id: I391be204264284a1bff752ebc2a1dbe5c8592013
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
In addition to "mode": "1280x720", one can now also specify the vrefresh
value: "mode": "1280x720@50".
This way if there is both a 60 and 50 Hz variant, then it is now possible
to choose the 50 Hz one.
Task-number: QTBUG-62262
Change-Id: I9ca21c5a513621c83f2f5348c411d8d7c5492b3d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Switch to drmModeAddFB2 and add mappings for RGB565 and ARGB8888,
and some BGR variants.
The default is XRGB8888, like before.
Others can be requested in the config file with
"format": "rgb565" or "argb8888" etc. on a per-output basis.
If the primary plane does not support the format, modesetting
and flipping will fail.
Task-number: QTBUG-62262
Change-Id: I8537cbeed7f046c46aa63fcea6d6946c0e0038a7
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
...unless explicitly requested via QT_QPA_EGLFS_ALWAYS_SET_MODE.
This mirrors the behavior of the EGLDevice backend.
Synchronize the "swap" behavior in other aspects too: do not retry
a failing modeset until infinity, and make the (currently limited but
soon enhanced) plane setup independent of the modesetting.
Task-number: QTBUG-62262
Change-Id: If43c4edf09c526a3d0f566994a3d632c217d2c31
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
...and make the struct initialization more readable while we are at it.
Task-number: QTBUG-62262
Change-Id: I1af82d1b2fd5a3c94dcdb720920618d4da80c21c
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
There is still one fullscreen window per screen at a time, but
there is no reason we should fail in the backend when the screen
already has the gbm_surface created. If there is really another
active GL window for this screen, then the base eglfs window
implementation will panic anyway.
This should help certain cases, where windows belonging to screen B get
created for screen A and then moved (recreated) for screen B.
Task-number: QTBUG-62262
Change-Id: Ia029f028d32a35e8e023f3132097ba9a919b8fe8
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Unlike qdatastream.h, we can be ready for future versions. Current plans
say we should do Qt 5.12 and then begin working on 6.0.
Change-Id: I38341f8155354cc4a776fffd14e13c2f1362b483
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>