This is the simplest step we take on the way to supporting color bitmap
glyphs with FreeType "out-of-the-box".
Change-Id: Iebdb7acf937734f66a7944d153026d0735cb53d1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Check that we can use std::forward, and that the compiler
synthesizes move special member functions when it should.
MSVC only supports the latter since the Nov 2013 CTP,
which, for our intents and purposes, means VC2015.
Change-Id: I8d8e4ae064abce90076a05b3b637950ab7d21dac
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
The platform is no longer supported or actively maintained, and is
in the way for improvements to the Unix event dispatcher and QProcess
implementations.
Change-Id: I3935488ca12e2139ea5f46068d7665a453e20526
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
If, after checking a condition, we issue a qWarning(),
by definition that check is unlikely to be true.
Tell the compiler so it can move the error handling
code out of the normal code path to increase the
effective icache size.
This change contains the changes to the util/,
dialogs/ and widgets/ subdirs.
Moved conditional code around where possible so that
we could always use Q_UNLIKELY, instead of having to
revert to Q_LIKELY here and there.
In QSystemTrayIcon::setVisible(), as a drive-by, I
swapped the evaluation order of an &&-expression
(newly wrapped in Q_UNLIKELY) to be more readable
and more efficient (cheaper check first) at the same
time.
Change-Id: I3564c5a5deacba49d67d3989fb0b53e680c57fcb
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This is more efficient and works even with non-US-ASCII
QStrings.
Change-Id: I4ca19de60347ded03022ef8540a6708c563bc9d7
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
QString::asprintf() has the ability to take a ushort* array as
obtained from QString::utf16() and insert that into the output
with an %ls conversion.
But no-one ever used this, because just passing QString::utf16()
to QString::asprintf() creates a warning about wchar_t* expected,
but ushort* provided.
The new qUtf16Printable() macro adds the necessary casts (via void*
to prevent any "type-punned pointer" warnings) to make
passing QString::utf16() to QString::asprintf() work silently.
This should greatly reduce the need to do a round-trip via utf-8
just to print the contents of a QString.
[ChangeLog][QtCore] Added qUtf16Printable().
Change-Id: I7ddd8d2b2a2191c9faa26aca95d49850d94b287c
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Move the QT_USE_NAMESPACE up, so any use of Q* classes won't result in
compilation errors when Qt is configured to be in a namespace.
Change-Id: Id559c86798529f6cad43a75fce303c108ce820bc
Reviewed-by: Jake Petroules <jake.petroules@theqtcompany.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Check that it works on C arrays, with auto type deduction
and with types that only provide free begin()/end()
functions that can only be found through ADL.
Change-Id: I760722a0f56c9ebe967070ff68af90b96ed77e66
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This should solve problems with our use of the noexcept
operator, because that's how std::pair is defined, too.
Mid-term, we should kill QPair and use std::pair instead.
It really has gotten way too complicated to implement a
C++11 pair correctly.
Task-number: QTBUG-48780
Change-Id: Ied0acd220e5131000a957dc356d6efcdd8f83828
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Obtain the system setting via SystemParametersInfo(),
amending fac71528cc.
Task-number: QTBUG-49561
Change-Id: Ie7a956fdc6b175ad09356949645c1e8937053abd
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Pass 0 window to High DPI scaling function to prevent it from
trying to find a screen and applying a screen offset.
Task-number: QTBUG-49516
Change-Id: Ib3e1919985f2c6df1dd8369f6e28b3ee1fdb7afe
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Applying scaling to the pixmaps used in pixmap cursors
requires applying a scale factor in a code path
now in a constructor of QWindowsWindowCursorData (nested
into QWindowsWindowCursor). This needs to be split and
the code paths for cursors created from a Qt::CursorShape
value and pixmap cursors need to be further separated.
Replace the QSharedDataPointer-based QWindowsWindowCursor
class by a simple, non-copyable class CursorHandle
managing the HCURSOR handle and pass it around using a
QSharedPointer. Split the cache in QWindowsCursor into one based
on Qt::CursorShape and one based on the cache key aggregated
from the pixmap cache keys (using QWindowsPixmapCursorCacheKey
renamed from QWindowsCursorCacheKey), simplifying the standard case
based on Qt::CursorShape.
Reuse class CursorHandle in
QWindowsOleDropSource::CursorEntryCursorEntry, which used a
similar class.
Remove QWindowsCursor::createSystemCursor().
Avoid the construction of temporary QCursor objects for the
standard cursors constructed from using resource pixmaps by
introducing a struct PixmapCursor containing pixmap
and hotspot.
Task-number: QTBUG-49511
Change-Id: I5393d64bd70f7dab68c0a8c2255c7685ac367b2f
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
When looking for the keyword in a preprocessor directive, we were
checking for non-word characters to find its end. If that check
failed (i.e. we had a word character) we would then check for EOL
(which necessarily failed, on a word character). That made no sense.
However, we genuinely have no interest in a directive with nothing
after the keyword, so do check for EOL after the loop (once we've
skipped spaces after the keyword).
The loop itself was made needlessly complicated by, on finding the end
of the keyword, skipping over later space inside the loop. Moved this
outside the loop.
Change-Id: Iccc2d445bf44deb75604e7fa60f2464e7397d8ed
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
The C preprocessor does believe in a # [nothing] line; and we may as
well give up before checking for keywords if we've run out of buffer.
Change-Id: I64dc3ad2808435389d0d7b56dcbc9d92ae72aa6e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
A loop to skip space and comments was meant to break on anything else
but would have not broken on a division operator (where it should) due
to it getting caught in the check for a comment-start, without falling
back suitably when it didn't complete that check.
Managed to contrive a suitably twisted change to findDeps test to
reveal the bug; broken previously, now fixed. Not ideal, as it relied
on another bug to fail previously - backslash-newline shouldn't end a
preprocessing directive line - but it should still pass once that's
fixed, too. Exercising a bug in qmake usually involves code that
won't compile anyway, making it tricky to write a test that reveals
the bug but that passes once it's fixed.
Change-Id: I08a1d7cc5e3d7fd1ac0a48e5c09dfdfbb7580b11
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Principally *(buffer + expr) -> buffer[expr] changes, with some hspace
normalization on affected lines. Made some empty loops more visible.
Pulled out a repeated character class test as a function.
Change-Id: I03d1b633550ad1814fa383d69ea04138dd0f82cd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
No-one is known to use it - we don't even have a test for it. It
plays poorly with the real preprocessor and it has not produced any
output since at least Qt 4.0 (unless qmake is invoked with at least
one -d flag, drowning the output in level 1 debug output).
This incidentally means no preprocessor directive we care about has an
underscore in its keyword.
Task-number: QTBUG-49487
Change-Id: I123a945c1dfe29d1d3ceee1129cfedc043f2e7d4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
... at the cost of a bunch of warnings about
ushort*/wchar_t*.
It wasn't checked at all, which isn't really a solution,
either.
Split off the %s checks into a separate function, which
makes obvious the sorry state of sprintf non-%s, non-%d
testing that's left.
Change-Id: I6312f984bacfb568b609e34b5218b3ab9a9765c4
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
We don't support that compiler anymore.
Change-Id: I6d100a2d149ce4e506c7f8be3b56a33fa9d7092f
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
In C++, signed overflow math is Undefined Behavior. However, many CPUs
do implement some way to check for overflow. Some compilers expose
intrinsics to use this functionality. If the no intrinsic is exposed,
overflow checking can be done by widening the result type and "manually"
checking for overflow. Or, for X86, by using inline assembly to use the
CPU features.
Used in QtQml.
Change-Id: I2ef2523ccaa98f6757a45e24862a2fa730a26bb0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
qt_framework and {app,lib}_bundle imply darwin, so there is no point in
testing for it.
Change-Id: I9fe48c26c8e271a5575b17e92df8674d3c3a3204
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
CONFIG+=qt_framework is actually put into qconfig.pri, so it's always
set in framework builds. things (sometimes) worked only by virtue of the
qt_framework checks being in "else" branches of "static" checks. use
lib_bundle instead, which triggers the actual framework build anyway.
amends b72d1db44.
Change-Id: Ib725c43476d9fb38bad940ce09905d29ff3edfa3
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
While all apps need to have internetClient as a capability, the option
to provide further capabilities via qmake has been removed in the
template.
Instead we add the required items inside the prf and keep the manifest
template as generic as possible.
Task-number: QTBUG-49504
Change-Id: If26b9da277a5269a57b34e74c146b40b1b64d091
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
It can speed up window resizing using on XCB platform
(like in Qt4 or GTK). It doesn't affect QRasterWindow,
but it affects all QWidget-based windows and OpenGL windows.
This code uses XCB Sync Protocol on all windows when it is supported.
In previous code the XCB Sync Protocol was used only when window
doesn't support OpenGL (on QRasterWindow),but QWidget can use OpenGL,
so it doesn't use the XCB Sync Protocol.
With XCB Sync Protocol which is implemented in Qt XCB plugin,
windows can be resized smoother/faster. You can see bigger difference
when you use non-composited window manager to test it:
- Kwin without compositing and fast style,
- Marco,
- Xfwm4,
- Openbox.
Task-number: QTBUG-46641
Change-Id: Ia18dee94616e64ba7e11bd4b062d2326ec530748
Reviewed-by: Martin Gräßlin <mgraesslin@kde.org>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
QWindowSystemInterface::handleKeyEvent runs the shortcut override
unconditionally; use QWindowSystemInterface::handleExtendedKeyEvent
instead, because it allows bypassing the override (as the back button
press is not a valid shortcut). This also prevents an unnecessary mutex
lock.
Change-Id: I8d8bb957e1556ac47e031cfe6fca6481f7c3220d
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Opt-in by setting
QT_EVENT_DISPATCHER_CORE_FOUNDATION=1
This will make QCoreApplication and QThread create
a QEventDispatcherCoreFoundation instead of a
QEventDispatcherUNIX.
With this change we can now support calling native API
that requires a running Core Foundation event loop
on the QCoreApplication main thread and secondary
threads. Previously this was only supported on the
QGuiApplication main thread.
Rewrite the #ifdef event dispatcher logic slightly:
both OSX and GLIB now gets an "else" branch for the
UNIX event dispatcher, instead of the current "dangling
else" pattern which only works for one #ifdef case.
Change-Id: If853567fa097fe007502b0804c2307a989719866
Task-number: QTBUG-46625
Task-number: QTBUG-48758
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Fix the include path of the event dispatcher which changed after
08a4b7f745.
Change-Id: Ie679b189bd65dc3388ba0d28d01036e3d05683e7
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
The QPixmapStyle class provides a mechanism for implementing pixmap based
QStyles, using the same concept introduced by the BorderImage QML component.
The bb10style plugin in qtstyleplugins uses this class and is currently the
only user.
Change-Id: Ibfa2104e95ba6a91e89a6277baa97a7fc9edaec2
Done-with: Louai Al-Khanji <louai.al-khanji@theqtcompany.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
We know that the QAbstractSocketPrivate::canReadNotification() slot is
called by the engine's read notifier only when new data is available for
reading, or when the socket has been closed. This allows us to remove
additional checks for engine validity and data availability for unbuffered
sockets.
Change-Id: Ic278cf2214d418d8fe471ea24a765b8d5840b0a5
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Currently QOpenGLWidget and QQuickWidget do not support having native
child widgets inside the same top-level window. In some cases this is
inevitable, f.ex. multimedia may require native windows when used from
widget apps. winId() calls made for various (valid or invalid) reasons
are also problematic.
There are no blockers for supporting this setup, however. By storing
multiple texture lists (one for each subtree where the root is a
native widget), adding the missing markDirtyOnScreen calls, letting
each native widget access the correct texture list (i.e. the one
corresponding to its children) when they are (separately) flushed, and
fixing composeAndFlush() to take the update region and the (native
child) offset into account, it can all be made functional.
The change also fixes the issue of keeping GL-based compositing
enabled even after all render-to-texture widgets in the window become
hidden. Due to the changes of how such widgets are gathered,
composeAndFlush() is not invoked anymore when no such widgets are
discovered for a given native parent. This is great since having
compositing enabled infinitely is an issue for applications like Qt
Creator that implement certain views with QQuickWidgets but cannot
afford the cost of texture uploads in other places (e.g. for the text
editor) on slower machines.
The openglwidget manual test is greatly enhanced to test various
situations (MDI, scroll areas, tab widgets, QOpenGLWidget as native
child, QOpenGLWidget with non-tlw native parent, etc.)
Task-number: QTBUG-48130
Task-number: QTBUG-49172
Change-Id: Iad098359c8bcf749f01c050da0853415e1550eda
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Insert a section symbol (U+00A7) to the end of a text flow instead of a
space as many text layout applications do.
Task-number: QTBUG-49252
Change-Id: Ib1276b508c24824b6329e0458ae5171bc1a288c3
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Two QObjects had no parent. This caused memory leaks on app close.
Confirmed with the valgrind memory analyzer tool from Qt Creator.
Change-Id: I9294099ca819be1a9c5b74b3cec5bf197be06433
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
... by using the new QUtf8::convertToUnicode() function in
conjunction with QString::resize().
For this to be a clear optimization, resize() must be banned
from shrinking capacity, which another patch will implement.
Change-Id: I6394af95ef1aaae131e23a4227734eb76fa685cd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
... and therefore doesn't need to allocate and thus
can be marked as nothrow.
Technically, the function doesn't have a wide
contract, because it has the precondition that
the buffer pointed to by the first argument needs
to be large enough to hold the result.
But that precondition can't be checked from within
the function, so no failure can be generated for
it and thus the nothrow guarantee is acceptable
(and desireable).
Change-Id: Iaf6ea6788ef6b4bbb6d8de59a3d0b14d66582307
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Port parse_field_width from constructing a QString and
then calling toInt() on it to use qstrtoull().
Not only do we not allocate memory anymore, we even
don't need to copy the digits out of the format
string - qstrtoull() does it all for us.
In order to preserve behavior with the previous code,
which consumed all digits before performing error
checking on them, we also consume all digits, even if
qstrtoull() would have returned the start of the range
as the end pointer.
Change-Id: Ief941ce3a8ea43d2e5475d9eab77d7d0d7abc450
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
... and reuse the function to parse precision, too.
This also allows to more easily simplify it (done in a
follow-up commit).
Change-Id: I9da27c4b06565f676e15ef9cab7c53b5d464515e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
... and simplify the method afterwards:
Drop the boolean that was used to control program
flow when the code was still part of vasprintf(),
by taking advantage of the fact that we can now
just return from the function to break out of both
the switch and the loop.
Change-Id: I97f050b63c0c309aaed3cb0fe979d53c8d970003
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Qt already assumes a working IEEE-754 implementation, so we can rely
on a working std::numeric_limits<double>.
This patch also gets rid of three cases of type-punning with unions
(which is undefined behavior in C++).
Change-Id: Ic3747f49d55e372960abf2091c1d5752c1eccdff
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This used to work by accident but now with the recent build system changes
the problem became apparent. Not listing the X11 libs is wrong anyway.
Change-Id: I6f75dafa81510d6d6a7571a9fe156cc7b968c8dc
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
The ppm decoder used a fixed size buffer to discard comment lines,
which would fail for comments longer than 100 characters.
Task-number: QTBUG-49414
Change-Id: I92e910e025cf7584a6ff1c0e5b0e8a4ab281d479
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>