Add an getProcAddress(const char *) overload to QOpenGLContext,
and refactor the QPA interface to take a const char *. Like this
we can avoid lots of mallocs when resoving GL methods.
Change-Id: Ic45b985fbaa0da8d32ba3e3b485351173352ca6f
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
We already have these symbols resolved in QOpenGLFunctions,
so simply use those.
Change-Id: I6047181dbe47be9b0a83656af454d0ca1f3df6eb
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Directly resolve the GL symbols in the constructor instead
of wrapping them in another method that resolves on
first call.
Simplifies the code and reduces the the size of QtGui
by around 50k.
Change-Id: If1fc575d0113d3d9b48ad1918429254c827e42c7
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
They are private classes and only called from non inline code in
Qt, so the change is safe.
Reduces the size of QtGui by another 10k.
Change-Id: I67e0592089b9ac89d3f2ab4456024ad7c5a55eca
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Use some macro magic to declare the opengl symbols and use that
to call getProcAddress in a loop instead of doing it individually
for each method.
Cuts the amount of generated object code down from 300 to around 50k.
Change-Id: I386d278fde41a1a30827c6232e79f9156090f8b0
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Saves around 200k in QtGui.so.
Change-Id: I1a020445093a5612ed64ca98bf51435580478cda
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Fix tst_qwindow::testInputEvents() to pass when High DPI scaling is in effect.
FAIL! : tst_QWindow::testInputEvents() Compared values are not the same
Actual (window.mousePressLocalPos): QPointF(6,17)
Expected (local) : QPointF(12,34)
.\tst_qwindow.cpp(771) : failure location
Task-number: QTBUG-46615
Change-Id: I1ccacc807f3390b6ab26a369d13fd7896e64cbca
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
If the image was unable to do the smooth scaling due to running out of
memory then it will return a null QImage, so this should be checked before
copying the data to prevent a crash.
Change-Id: I82a6443ce2d701c45110b5dd3c5ed4813d078312
Reviewed-by: aavit <eirik.aavitsland@theqtcompany.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
currentInterface.serviceActive is relatively expensive and causes
significant spikes in cpu load. Luckily, we can easily memorize
the result.
Change-Id: Ic7983b63bba5507bc1e34b0644e73365dc44f200
Task-number: QTBUG-45798
Task-number: QTCREATORBUG-15741
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
under certain conditions, a WM_ERASEBKGND message is sent, to a window
without update region. in this case we declare the message as 'handled'
to avoid flickering.
Task-number: QTBUG-48235
Change-Id: I2ed27e020db4b54ec93a445cb219de00f38a62fd
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Inherit the type-classification from the underlying type.
This amends commit 4889269ff0,
which introduced a QVector<QJsonPrivate::offset>, but failed
to mark the payload as primitive.
Change-Id: I525a0456a550e0694b33b36b4aa71475aeac192b
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
These four methods do not need to be separate, the compiler can figure
generate the optimal version from the template arguments.
Change-Id: I45b30a9c2f2ce4da46c47f2e6e1fbd7561213c4a
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Using shuffle and align storing our quint24 format can be done much
faster. This in particular improves conversions to RGB888.
Change-Id: I179748706a33a43fd6f60f5c40287317418c8867
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
The fonts directory is removed in 5.7. Avoid creating a broken
symlink.
Change-Id: I95d1970737f54810006c084436411fc95743f72d
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Suppose the user connects QProcess::readyReadStandardOutput with a
slot that calls QCoreApplication::processEvents.
Assume the event loop did not handle events between QProcess::start
and QProcess::waitForFinished. The process writes to stdout and exits.
QProcessPrivate::waitForFinished calls drainOutputPipes which calls
QWindowsPipeWriter::waitForReadyRead. This in turn will trigger
_q_processDied via the readyRead signal and processEvents.
_q_processDied will delete the pid object and set pid to null.
After drainOutputPipes returns, _q_processDied is called again but it
must not be called if pid is already destroyed.
Prevent calling _q_processDied if pid is null.
Task-number: QTBUG-48697
Change-Id: Iee047938ee1529057a1a43d71f4e882750903c7e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Remove the member variable and instantiate only where needed
on the stack to prevent it from interfering with windows created
by other tests.
Remove flag Qt::X11BypassWindowManagerHint as it does not seem
to have any effect.
Task-number: QTBUG-51516
Change-Id: I3bf88bf148f365c57aaf989671f8b9c3c3f0d8e2
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Remove outdated static functions to convert touch points and use
QWindowSystemInterfacePrivate::fromNativeTouchPoints().
Fix tst_QWidget::underMouse() to pass when High DPI scaling is in effect.
.\tst_qwidget.cpp(9000) : failure location
FAIL! : tst_QWidget::underMouse() 'childWidget1.underMouse()' returned FALSE. ()
.\tst_qwidget.cpp(10161) : failure location
Task-number: QTBUG-46615
Change-Id: Ie73dba610da357e7be396f2ea0229987f7503462
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Use default timeouts for wait functions. The increased timeouts will
only have an effect if the tests fail.
Print process errors if the process could not be started, while we're at
it.
Contract consecutive "#ifndef Q_OS_WINCE" blocks.
Change-Id: I6324e4c5b91b89ebb2580635b88705bbda922907
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
This issue is reproducible on OS X when using a Magic Mouse
or a combination of Magic Trackpad and regular mouse. In these
cases it's possible to start a scrolling gesture on one widget
and move the mouse cursor over another widget.
Although we send the wheel event phase information, we never
made any use of it. This means that a widget would start
scrolling even though it never received a ScrollBegin event.
In this patch, we make sure the scrolling cycle is respected
and that once a widget starts scrolling, it'll be recieving
all the wheel events until a ScrollEnd event reaches the
application.
For those input devices not supporting a proper phase cycle,
we introduce a new (undocumented) phase value, NoScrollPhase.
If the wheel event phase is NoScrollPhase, then we ignore
the current scroll widget and proceed as usual. This value
is the default for wheel events. It's up to the platform
plugin to set the proper phase value according to the data
received from the OS.
Finally, we fix a few of QWheelEvent constructors to properly
initialize the phase and source properties.
Task-number: QTBUG-50199
Change-Id: I3773729a9c757e2d2fcc5100dcd79f0ed26cb808
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
... by replacing them with C++11 ramge-for loops.
In one case, I took the liberty to remove a useless
if(isEmpty()) check around a for loop. Now that we
don't use Q_FOREACH anymore, we don't incur the copy
for empty containers anymore. Left the indention of
the loop level to avoid code churn.
Saves 1.8KiB in text size on optimized GCC 5.3 Linux
AMD64 builds.
Change-Id: I1b1fb34847f6a631f0d580fd5261c7f5fed8475c
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This is what std::vector implementations usually do,
because it minimizes memory fragmentation and useless
allocations since no user will call clear() unless
she intends to append new data afterwards.
Fix calls to resize(0) that show how existing code
tried to work around the issue.
Adjust test. Port from QVERIFY(==) to QCOMPARE as a
drive-by.
[ChangeLog][QtCore][QVector] clear() now preserves
capacity. To shed capacity, call squeeze() or swap
with a default-constructed QVector object, see the
documentation for an example.
Change-Id: I9cebe611a97e027a89e821e64408a4741b31f1f6
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
... by replacing them with C++11 range-for loops.
This is the simplest of the patch series: Q_FOREACH took a
copy, so we do, too. Except we don't, since we're just
catching the return value that comes out of the function
(RVO). We can't feed the rvalues into range-for, because
they are non-const and would thus detach.
Saves 2.2KiB in test size on optimized GCC 5.3 Linux AMD64
builds.
Change-Id: I914aa20fe65577b2e32ea7ea89d51a8d003a57ba
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Q_FOREACH over a QVarLengthArray or std containers
is a particularly bad idea (because of the deep
copy that Q_FOREACH then performs).
Use C++11 range-for (without qAsConst(), because
neither QVLA nor std containers are CoW).
Saves 5.7KiB in text size on optimized GCC 5.3
Linux AMD64 builds.
Change-Id: I4c1fb0b488bb08726912528b559840a45c1397df
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
`ar' tool from latest binutils shows warning:
ar error: `u' modifier ignored since `D' is the default (see `U')
Warning message includes word "error" so QtCreator processes it as
error in UI.
`ar' command-line option `u' might be dropped safely because it is
unnecessary. Option `c' is added to suppress extra `ar' warnings.
Other build systems are also affected. For example, automake:
https://bugzilla.redhat.com/1155273
Change-Id: Ia378b720503d93b0c0c12ae7a5f38f4d7c32eee5
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Given the flakyness of cursor positioning, loosen the check to only verify
that the cursor is outside the window. The hint is only active on Windows
depending on a system setting.
Task-number: QTBUG-51516
Change-Id: I474d251cc41e68f182baf8dba84eaf38d914d7ee
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
The algorithm used was:
- If possible, just declare the container const
- Otherwise, for first()/last(), use constFirst()/constLast()
and for front()/back(), to not destroy the use of the STL
API subset, use qAsConst()
Did some caching of function returns here and there, and
converted one 0 to nullptr as a drive-by.
Also saves almost 4KiB in text size on optimized GCC 4.9
Linux AMD64 builds.
Change-Id: I04b7bfd68dc85c22de247cb65a310e1cbbca1e8c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
The user-defined copy assignment, copy constructor
and dtor inhibit the move special member functions.
Implement them manually.
Change-Id: I0d38d7cf6c9611e13b5b081d734d01d6fe4d5276
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Use mapToGlobal() only for foreign windows passing relative coordinates.
Amend change 9915630d08.
Task-number: QTBUG-50206
Task-number: QTBUG-51320
Change-Id: Idee60cc8ea8004c0355ce78a00f807798836b49c
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
... wherever it allocates memory.
Since the string literal is used in more than one function, to
avoid duplication of .rodata, wrap the QStringLiteral in an
inline function.
Change-Id: If4fca7443b3150b1c8360c850da32f5c567c1065
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
It made us skip the rest of the test, not just the small set of
sub-tests that were conditioned by the if () in whose else it sat.
Change-Id: I5e914e0aeb9d5ba44b21966d071aaccbc590365d
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
QTypeInfoQuery was introduced for 5.6 to decouple isStatic
and isRelocatable so old code continues to work. But since
this test still uses !isStatic to mean trivially-relocatable,
it will fail as soon as one of the checked types is marked as
Q_RELOCATABLE_TYPE instead of Q_MOVABLE_TYPE.
Incidentally, such a change is in the pipeline for Qt 5.7/5.8,
so fix the test by porting to QTypeInfoQuery. Do this in 5.6,
because that's when QTypeInfoQuery was introduced.
Change-Id: I06f815f26ca9b430e124c4a2f8de2a729999762b
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
The source argument can be nullptr, e.g. if debug information
has been stripped out.
Task-number: QTBUG-51195
Change-Id: Ie229c82278c420200cad33c19e8c3f52ab7f12c3
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Introduce C++ casts and add some conversions. Where possible, increase
const-correctness. Remove trivial conversion function
BSTRToQString().
Task-number: QTBUG-50804
Change-Id: I1820d4693db8bc0dfa6c4a5fecd768cf64a4405c
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Introduce a convenience function for allocating arrays and use
algorithms.
Task-number: QTBUG-50804
Change-Id: Iead75f8297923fd13efcfc7987f76262777d074b
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
QWindowsIA2Accessible does not implement IAccessibleRelation (found
when replacing the C-style casts by static_cast<>). Remove the
corresponding branch.
Task-number: QTBUG-50804
Change-Id: I80901634044f85e413666f34b91be2e6ad70da91
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Use GET_WHEEL_DELTA_WPARAM() instead of HIWORD and casting.
Fix breakage introduced by b20548f999 .
Change-Id: I11bd97d73c12d72e824e3f769e9c402975f27d48
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Windows 10: SHGetFileInfo() (as called by item views on file system
models has been observed to trigger a WM_PAINT on the mainwindow
for totally obscure reasons, causing a recursive repaint. Suppress
this by running it via QThreadPool.
Task-number: QTBUG-45298
Task-number: QTBUG-48823
Task-number: QTCREATORBUG-14888
Change-Id: I7479102b9b8fb0771681260298c3d735e66f220f
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
The coordinates need to be scaled before calling QPlatformScreen::grabWindow()
On return, set a devicePixelRatio on the pixmap.
Adapt the QWidget test to scale the grabbed pixmaps.
Fixes pixeltool displaying the wrong part of the screen when High DPI scaling
is in effect.
Task-number: QTBUG-46615
Change-Id: I12de7df0da669230cf0fae74f4a42d43f061d5ff
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
As already reported in 2009 (Qt 4.6) QPrinter never actually set the
printer resolution. This change adds the necessary call to
PMPrinterSetOutputResolution (available since OS X 10.5).
[ChangeLog][QtPrintSupport][OS X] QMacPrintEngine now really sets the
printer resolution.
Task-number: QTBUG-7000
Change-Id: I3e851b62e1a7ed78564a8a6fd576b0a18d7eff63
Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com>
Other platform menu implementations check that the index is not out of
bounds, so make QDBusPlatformMenu::menuItemAt() do the same.
Change-Id: I1d2e42681f2dbfff8b80044141d620bddbc3b6aa
Task-number: QTBUG-51372
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>