The value is changed to true. It is a common bug that developers expect
this proxy model to reflect the source model when the source changes.
That requires setDynamicSortFilter(true), so we change the default to
optimize for the common case.
Change-Id: I9bf7efdbda10309fa77aed9391c33054aaae4a29
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Instead of only from QApplication in QtWidgets, as we need these events
for example in QDeclarativeApplication.
Task-number: QTBUG-21573
Task-number: QTBUG-23331
Change-Id: I0c960bd1c7911d306d274a6e9a1838f158235ed0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
GCC 4.3 introduced the alloc_size attribute to hint the compiler
that allocated memory will be returned, inform the compiler which
parameter holds the size of the allocation.
Change-Id: I8734868f6bd19e201abdacd0a1b0fb80a27883c0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Pure syntactical sugar, to match up with what the other container
classes offer.
Change-Id: I0f97de011923d9d204cca0fa906b059dc5054a89
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Qt5 modules are supposed to be in a namespace, but if the namespace definition
is hidden in a macro, then moc doesn't know about it and generates invalid
moc_xx.cpp that cannot be compiled due to usage of classes outside of their
namespaces - e.g. in qtjsondb we have QtAddOn::JsonDb::Foo class, but the
moc_foo.cpp expects to find that class in the global namespace instead.
Fixed it in QtJsonDb to define QT_BEGIN_MOC_NAMESPACE="QT_USE_NAMESPACE
QT_ADDON_JSONDB_USE_NAMESPACE", however we need to ensure qglobal.h doesn't
re-define that macro back.
Change-Id: Ic8407f50c11d2d787167ad2f92457aa3ec126d45
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Toby Tomkins <toby.tomkins@nokia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
gray_conic_to, gray_cubic_to and gray_line_to were all single line wrappers
around their equivilent gray_render counterparts, with an additional lie of
error handling that never actually happened.
Since this doesn't really do anything except confuse the reader, let's ... not
do it :)
Change-Id: Id5d86c49174acb92514b628a70bd32d6c6640a5d
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Usually we don't have a plugin for this on linux anyway.
But if we do, we should actually allow it to interface with the
system.
When using AT-SPI the plugin can detect if it should be active.
Other plugins can fall back to using an env var if really needed.
Change-Id: Ic9dcfa305e7cdafbf4a93bcc2dc9a0fcd9b9a7a2
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
The original intention was to identify a clipping bug, it turns out
that during a ::begin() (and systemChanged) we should forward the
QPaintEnginePrivate state to our proxy engine.
Instead of using the proxy-pattern subclass rasterengine and
specialize the paths we are able to accelerate using the blitter
interface. This will avoid similiar problems in the future. I have
no performance measurement to show which of the two approaches is
faster/slower.
Change-Id: I39bff11b32b1fe20284c7e8df60050de5991bb6e
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
* Group code responsible for tracking the render pipeline state
to check if we can easily accelerate it
* Code that will call into the QBlittable
* Code that will lock the QBlittable before calling into raster
Change-Id: I862e242d59805de5094ed363b486afcdbc23ff78
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
A default QPainter will set a QBrush with Qt::NoBrush BrushStyle, the
current code detects this as a non solid fill and all calls with fillRect
and a color will not go through QBlittable. Check for Solid or NoBrush
style. Manually verified that a p.fillRect(rect, Qt::red) goes through
the accelerated path now.
Change-Id: Ic0d98030e94f5d11abbe61628fbf71d1e08219c2
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Create updateCompleteState(QPainterState*) so we don't need to
call into the paintengine, move all state methods into the
QBlitterPaintEnginePrivate class.
Change-Id: If30fdcc3f63755e0443bced7d9d9fb993d4ec2b7
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Cosmetic change to remove four spaces of indention from some of the
deeply nested methods.
Change-Id: I67fdd0ab722b7c7c67c4da7a0a0bd86459751700
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
It starts with being initialized wrongly, the call to buffer() will
lock the data while we think it is not locked, it can also get out of
sync by someone calling buffer() again. Remove the variable and
check with the QBlittable if we need to lock the resource into memory.
Change-Id: I350375011138d1b4c2c48c100b7b30b8ea2ae460
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Move the bit helper functions into CapabilitiesToStateMask as they
are only used in this class, allocate the class as part of the
QBlitterPaintEnginePrivate, shorten the name as well.
Change-Id: If22ddd117a9789cd98edb08f23fd0ffabb17d5a5
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Spend some bytes for spaces after comma and keywords. This should
now mostly follow the Qt style guidelines.
Change-Id: I3298c8d41d40ab5b0153a33d44b1b607a2edca8e
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
CoarseTimers are worst in their first firing, so we prefer a
PreciseTimer for something that happens only once. If the timeout is
too big, we use a CoarseTimer anyway (current threshold is 2000ms).
Author: Thiago Macieira <thiago.macieira@nokia.com>
Change-Id: I30b20acf506e442cd58126abfe3a4d70fc13b075
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The API passes the interval as an int, there's no reason to convert
it to a timeval struct. This also prepares for changing the UNIX
timer code to support the different timer types.
Author: Thiago Macieira <thiago.macieira@nokia.com>
Change-Id: Ie3cc1ae8f1be6a9ad3f1766051642cbf3e614418
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... and deprecate the old registerTimer() functions. The new pure-
virtual registerTimer() breaks source-compatibility. Subclasses cannot
be instantiated anymore, since the pure virtual function signature has
changed.
QAbstractEventDispatcher::TimerInfo is no longer a QPair. It is now a
struct with timerId, interval, and timerType members. This is a source
incompatibility that should only affect subclasses of
QAbstractEventDispatcher, which will need to pass 3 arguments to the
TimerInfo constructor instead of 2. If the subclass used QPair<int,int>
instead of the TimerInfo typedef, the QPair<int,int> declarations will
need to be replaced with TimerInfo.
Call the new registerTimer() function with the type from
QObject::startTimer(). Change all subclasses of QAbstractEventDispatcher
to reimplement the new virtual function. The type argument is unused at
the momemnt, except to ensure that registeredTimers() returns the type
each timer was registered with. Implementations for the various
dispatchers will be done in separate commits.
Author: Thiago Macieira <thiago.macieira@nokia.com>
Change-Id: Ia22697e0ab0847810c5d162ef473e0e5a17a904b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The timer type will control the accuracy of the timer. By default, all
timers are CoarseTimers, which allows for +/- 5% interval adjustment.
PreciseTimers will not have any interval adjustments, VeryCoarseTimers
will have intervals adjusted to full second resolution.
Use QTimer::setTimerType() or the QTimer::singleShot() overload to
specify the type.
QObject::startTimer() now takes a Qt::TimerType argument which defaults
to Qt::CoarseTimer. QBasicTimer::startTimer() gets an overload that
takes a Qt::TimerType argument. The argument is unused for now, since
the QAbstractEventDispatcher interface needs to change (done in a
separate commit).
Author: Thiago Macieira <thiago.macieira@nokia.com>
Change-Id: I3100da5aa1fe17ec30b8644897d0fe6ec4a07f52
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Previously they would fall into the unicode handling and return very
strange values.
Change-Id: I62a53894c0983bf53fd79f924b40a6fd3ba02993
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
These tests used requires(contains(QT_CONFIG,private_tests)) in their
.pro file, but did not subtract themselves from their parent project
SUBDIRS when private_tests weren't enabled.
In the best case, this wastes a little time as qmake iterates over these
projects which won't be built. In some worse esoteric cases, this may
break compilation or packaging.
Change-Id: If36b1b8f69c3509128786fec67899ae18ffaa2bc
Reviewed-by: Toby Tomkins <toby.tomkins@nokia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This testcase fails on the Ubuntu 11.10 x64 platform, add flag to .pro
file so test is ignored on this platform.
Task-number: QTBUG-23380
Change-Id: I51831df8c8e9bfcf63d3689e37552ca1a62691cd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Several of the test functions in the QDebug autotest call
qInstallMsgHandler() to temporarily use a custom message handler.
Unfortunately, these test functions were then resetting the message
handler back to Qt's default handler at the end of the test.
QTestLib also calls qInstallMsgHandler() to set a message handler that
redirects debug/warning/fatal messages into the test log. When the test
resets the message handler back to Qt's default handler, testlib's
message handler is bypassed for the rest of the test, preventing any
subsequent debug/warning/fatal messages from being visible in the test
log or subject to testlib's ignoreMessage() function.
This error also caused several of the test functions to fail if they
were run manually. The "defaultMessagehandler" test would fail if it
was run before any other test function and the "assignment" test would
fail if it was run after any other test function.
This commit fixes these failures by using a helper class to ensure that
the previously active message handler is restored at the end of each
test function, even if the test function fails or throws an exception.
Change-Id: I51376724d164c8ad126e5b9be76890bf3e6a9fb0
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
When verifying nonzero results (i.e. that something expected *did* happen),
using these macros allows bailing out of the timer much earlier than the
potential 5 seconds.
My running this on Linux goes from ~147 seconds to ~91 seconds.
Change-Id: Ie1e41252eb4eb295b5c8e795ded02f00eb7f9387
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
Don't call QSKIP when omitting the optional part of the test, as doing
so hides the fact that the rest of the test passed.
Change-Id: I9c102e8daeaf9586b2e510c4c9ce697ead290795
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Use QTRY_VERIFY() to fail after a reasonable timeout rather than putting
the test into an infinite loop.
Change-Id: Ie0917556e15999a94cc0587f3f4c11c0d743a228
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
Register the meta-type in initTestCase(), which is run once, rather than
in init(), which is run before every test function is run.
Change-Id: Ic62a2469da6a2a85254ffc7c4d893395202c50d8
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
The threadCount() test function is unstable and had been disabled by
making it not be a slot. It is better to disable it with QSKIP so that
the test output shows that the test function exists and is in need of
repair.
Change-Id: Iccdc8da31e0d15d922f7e9606835d1ff1a3a4966
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
Avoid using bug tracker identifiers in test function names. These
identifiers lose their meaning when the bug tracker is replaced.
Change-Id: Ia867f7c2ec2ab9ed546588843d532ac615a34031
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
The restored test data was marked as failing, but appears to pass, and
the available history does not explain why it was commented out.
Change-Id: I7e9e3ba72fc8fef42c91ee882efa98d25b3d8317
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
When using QSignalSpy, always verify that the signal spy is valid. This
will cause the test to give a meaningful failure when spying on a
non-existant signal. Without this change, tests that spy on a signal to
ensure that it is not emitted (i.e. by comparing the spy count to zero)
could pass erroneously if something went wrong when creating the signal
spy, as an invalid QSignalSpy will always return a count of zero.
Change-Id: I41f4a63d9f0de9190a86de237662dc96be802446
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>