Previously, accessing QObject pointer properties from QML would require
these types to be registered with qRegisterMetaType(), but this
shouldn't be necessary if we're able to read/write the property, because
the moc generates code that calls qRegisterMetaType in the static meta-call
implementation. So when resolving a property in the property cache and we
can't resolve, fall back to placing the static meta-call to register the
type, similar to what QMetaType::userType() does.
Change-Id: Ic8b00ed93a1e5e42cf7aaaf1c355e89557485c59
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
We don't need to go deep through the QObject wrapper, we can use QObjectMethod
directly after we've determined a Q_INVOKABLE property.
Change-Id: I2a8e3e827991a365758dd106d2ba92a1bd0d7aab
Reviewed-by: Michael Brasser <michael.brasser@live.com>
The property cache excludes the destroyed() signals as well as the deleteLater()
slot from the accessible methods. It does that by comparing the method index
against the indices of these signals/slots, which works as long as every
meta-object is through some way derived from QObject's meta object. However
that's not the case for gadgets, where these indices don't apply and
will instead accidentally hide methods.
Change-Id: I5f2b3f578192ff0df607af67832389c30bb11beb
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
This reverts commit f06daaf3d8.
The only things actually specified by the ECMAScript standard on dates
are:
1. Reparsing a date output from any of the to*String() functions has to
result in the same date representation.
2. The ISO 8601 standard has to be followed for the ISO format.
Currently we clearly don't follow rule 1. Date.parse(d.toString()) will
not yield the same as d.valueOf() for negative dates.
The ISO 8601 standard clearly has a year 0 while common human language
has not. All non ISO date representations are considered
"implementation-dependent" in the ECMAScript standard. We can thus
define the relation between our representations and the ISO standard any
way we like. If we try to match up the dates so that the negative years
look equal in each representation we cannot properly interact with QDate
for dates in the year 0 as that doesn't exist in QDate. We can, however,
choose not to make the dates look equal. That means a date with a
negative year will be "one off" when represented in ISO 8601. "333 BC"
in human language is "-332" in ISO 8601. Our internal representation is
aligned to ISO 8601 and the to*String() methods may output something
else. That means we can easily set the year in ISO 8601 sense from the
Date constructor as well as from setYear() and setFullYear().
This, of course, is somewhat unintuitive and also differs from most
other JavaScript implementations (which don't have to interoperate with
QDate). However, it is still correct.
Change-Id: I5fc26b709a486cb520a075918b184a80bec56c9b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reorganize the rendercontrol example to demonstrate both the single
and multi threaded approaches.
A small helper function is introduced to the QQuickRenderControl API:
The QSGRenderContext has to live on the render thread. Previously there
was no way for applications to move it to the desired thread. This is
now possible.
Pass --threaded to the rendercontrol example to use a separate render thread.
[ChangeLog][QtQuick] QQuickRenderControl can now be used to render the Qt Quick
scene on a dedicated render thread, similarly to how the built-in threaded render
loop operates.
Task-number: QTBUG-42813
Change-Id: I01c3b2ffca8a174d9d2c267a51f2e484ed7b34b3
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
87a055bc8e broke the build and
introduced invalid writes to chunks outside of the existing
VALGRIND_DISABLE_ERROR_REPORTING block.
Fix the build by using MemoryManager::Data* instead of MemoryManager*
as the pool argument to VALGRIND MEMPOOL calls since the Data pointer
is protected.
Change-Id: I24136e25291570ade825dcd84a9568d8169a235b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This appplies only when using opengl32.dll. When using ANGLE or
when using another non-opengl32 DLL, the "windows" single-threaded
loop is chosen, just like before.
One badly written autotest is fixed. We must never assume that
performing some QQuickWindow related work will leave a context
current on the main thread. The assumption worked by accident with
the single-threaded render loop.
[ChangeLog][QtQuick] Changed to use the threaded render loop by
default on Windows when running with desktop OpenGL (opengl32.dll).
Change-Id: I21798622c19ca510a97a96c19c1e70e29f086e3a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
This feature is effectively not maintained, experimental and undocumented.
Consensus on the mailing list is to remove it:
http://lists.qt-project.org/pipermail/development/2014-December/019384.html
Change-Id: Iaa73b3e90806c338ef81bbd4307ddd2addd37964
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
This changes the way that available items are linked together to
allow releasing chunks not containing any inUse item after being
swept. Instead of putting a freed item at the top of the stack and
make it link to the item previously at the top, relink all
items !inUse to point to the previously visited unused item during
sweeping.
This allows any chunk to be released in the process while making sure
that no previous or next item will link to an address in that chunk.
The performance penality of relinking the list has been measured
to be ~0.6% with v8-bench.js tst_QJSEngine::largeSweep. In exchange,
this helps keeping the amount of chunks to sweep lower after peaks
of heap allocation, even though that ability will be restrained by
heap fragmentation in long running applications.
Task-number: QTBUG-41099
Change-Id: I81a70f0a930b679a1bef47e630b23dab5f6d1218
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This is the only way we can support a GC that moves
objects around in memory.
Change-Id: I1d168fae4aa9f575b730e469e762bc5b5549b886
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
We used to encode property index and value type property index in one int
with 16 bits each, for example font.pixelSize with index of "font" in the
lower 16 bits and "pixelSize" in the upper 16 bits.
Detecting if a given encoded index was using value types or not was based on
whether the value type index (upper 16 bits) were non-zero. That assumption
holds given that all valid property indicies of value types are > 0 because
they are all sub-classes of QObject, which provides the first property
(objectName).
With the introduction of gadgets property index zero will become popular again,
and value types are a core use-case for gadgets. Therefore we need to change
the encoding to allow for zero to be a valid value type property index. This is
implemented by centralizing all decoding call sites to call one function that
indicates -1 as non-present value type core index return value. That way we can
encode the index with an offset of 1.
Change-Id: I266abf140211a4f7204b47b94d07c364f0a8f408
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
these methods don't modify the object, so it's safe to have them
there and this simplifies quite a bit of the code.
Change-Id: I2f591758efba9cb8d17b956bc7c02e2d7a468ea4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
isConcurrent is not virtual and always returns true, so we can remove
it and remove the if() on the caller side.
Change-Id: Ie750fdeddaf8c339e1fcab99ebd967e3446bd975
Reviewed-by: Michael Brasser <michael.brasser@live.com>
There exists only one sub-class of QQmlDataLoader and there are no virtual
functions.
This also clears up a confusion reported in Jira that suggested QQmlDataLoader
should get a virtual destructor as it is being subclassed and somebody might
have a pointer only to a QQmlDataLoader and deleting that would not do proper
polymorphic destruction.
Change-Id: I34611be5a95522bc85a87fb7df97b6d1de7a3d37
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Remove unused function that wouldn't be emitted anyway.
Change-Id: I623d5d44bca9a1358cf9e66ff557992aba9ae451
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
/Users/erik/dev/qt5-stable/qtdeclarative/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp:1561:60: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int]
items << qMakePair(QString("new item " + j), QString::number(j));
~~~~~~~~~~~~^~~
Change-Id: I94bd952abf82a8f174772482330b5fdd636578ad
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
There are a couple of ways in which this code creates
temporary copies of the window list, m_windows. This is often
benign but there are also places (e.g. startOrStopAnimationTimer)
which get non-const references to items which results
in m_windows being detached from the temporary resulting in a real
copy of the list items. Again the copy is often fairly benign,
however, as the code also relies heavily on pointers to items
in the list, it can also result in crashes.
I think it might be advisable to store a list of pointers to
Window structures rather than store the structure themselves as
it appears really easy to introduce copies of the list accidentally.
The removal of the use of foreach for example is not made here for
aesthetics but because it introduces a hidden temporary copy of
the list.
Change-Id: I504951a897c4fb0cf106f5a4792b5cfcd532ba8f
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
String-based connect is relatively slow, and should be avoided in core
items. This improves performance of the
tst_librarymetrics_performance::instantiation_cached(043) image - empty
test case (approximately halving the time).
Task-number: QTBUG-43096
Change-Id: I02485c515435eceacc95c55f877fc8566e7406d7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Since the command just links back to the corresponding module page, only the
first parameter is used, and the version causes more confusion.
Change-Id: I73ed289550c576747132f77b83c1257094059cd1
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
We must handle a thrown exception and cannot pass the undefined value back to
QV8Engine::toVariant.
Change-Id: Ia466b175706dccd513895ef5bb166b811fbdc26b
Task-number: QTBUG-41860
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
With QQmlDebuggingEnabler::startTcpDebugServer you can create a debug
server for debugging or profiling also without the qmljsdebugger
command line argument.
Change-Id: I642f73680585f9c7578762bcc0b247c736fe1338
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Like this we can effectively test the port range feature of the debug
server.
Change-Id: Id0d0b47525177f0cfbb8c35a267962a82338f047
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Skip this until commit 155306ffee1941194d44dd632a7993fce4a05606 from qtbase
has hit the dev branch through merges.
Change-Id: I3e58d288fcc45c511bc1b8b4e7dbb6c41d367eba
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
QJSEngine::installTranslatorFunctions install the translator functions
to any given JS object. However, the custom string::arg() method is only
added in qqmlbuiltinfunctions.cpp, making the use of qsTr() in other
pure-JS programs quite hard.
Task-number: QTBUG-43113
Change-Id: Ia9ed97a4c07a4d167c792f3ea13e4f6e96c97423
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This commit ensures that the value type providers installed by the
QtQuick2 QML module during initialization are uninstalled when the
plugin is unloaded.
It also fixes a bug in the type compiler so that it now works with
types from plugins which get unloaded and then reloaded.
Task-number: QTBUG-43004
Change-Id: I4b3fb75aae65dfbc5de9c88701ed82514087ab7d
Reviewed-by: Matthew Vogt <matthew.vogt@qinetic.com.au>