| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
If we keep plain pointers to objects we don't own, we need to zero them
when something else deletes them.
Fixes: QTBUG-73733
Change-Id: Ib4f3e144f10f70ab6cf44af4ffa62725470d3972
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
| |
Change-Id: I738b9da5335afb048d2eda2edf2be5095a91d7e5
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add \namespace for for namespace QtQml, as it has logging functions
that previously saw no generated documentation.
Fix \qmltype name of DelegateChooser, as well as a number of related
typos and linking problems.
Task-number: QTBUG-71502
Change-Id: I5a9c635853ef73c99a1b1f55cd1c0a1a87fdf6ec
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
This is needed to fix a bug in Qt Quick Controls 2. We need
to know if items within a Menu were created by Instantiator
so that we don't try to recreate them.
Task-number: QTBUG-71066
Change-Id: Iaedaea2be6bf4f70c2c7b6fb37871d5537328e96
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
VisualDataModel, VisualDataGroup, and VisualItemModel
are replaced with DelegateModel, DelegateModelGroup, and ObjectModel
respectively (since 7cad0e52c5a020bd29635e9912fd8946a6b48124), so
shouldn't be mentioned anymore, in preparation for removal.
Task-number: QTBUG-37725
Change-Id: I9a01ec8db748f817efca638383b7a278c7b562cd
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
|
|
|
|
|
| |
Change-Id: I19545953bde10d4ccc2f37843dcda2569dc77df4
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If the context or object in question gets destroyed during incubation,
that is not a major problem. We just clean up the mess and continue.
Especially, failure to create a delegate for an item view is not fatal.
This routinely happens if the whole view has been dropped between
object creation and incubation.
Since 0412de08fd65c5fef9d010a68b40a256f521ef61 info and warning levels
are properly separated.
Task-number: QTBUG-49224
Change-Id: Ie59dfca8edf91b80dcf33e742766863feba9c8fa
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
VisualDataModel, VisualDataGroup, and VisualItemModel
are replaced with DelegateModel, DelegateModelGroup, and
ObjectModel respectively (since
7cad0e52c5a020bd29635e9912fd8946a6b48124).
Also renamed/deleted a few snippet files and an image.
Task-number: QTBUG-37725
Change-Id: I5fa93993a31d8f9b08e7a282d5550ddd9bfb813f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Get rid of Primitive and move the corresponding methods
directly into Value. Mark many methods in Value as
constexpr and turn Value into a POD type again.
Keep Primitive as a pure alias to Value for source
compatibility of other modules that might be using it.
Change-Id: Icb47458947dd3482c8852e95782123ea4346f5ec
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
|
|
|
| |
Depends on features.thread.
Change-Id: I65db68ac90c15af0ac0571ee021122f7ca2ca051
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
|
|
|
|
| |
Change-Id: I045a4844c06df9232cc8b04485ab0a39bb990e3f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
| |
Change-Id: Ic79f2e16c7b9a8c156cffd69f156e43bf565320d
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
If the application uses a DelegateChooser, but the chooser fails to
resolve a delegate for a certain index, it should not use itself
as the delegate instead. This will cause the application to crash.
Instead, we just print a warning, and return nullptr, which will let
TableView handle the situation gracefully.
Change-Id: Ibaf9da09fd11149362f5b674fc61db47593de10c
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
If the application uses a DelegateChooser, but the chooser fails to
resolve a delegate for a certain index, it should not use itself
as the delegate instead. This will cause the application to crash.
Instead, return nullptr (like we do in the function guard), which
will let the item views handle the situation gracefully.
Change-Id: I9b3b4aa2626d1f8521b4395096300ac12150c63f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Force use of the basic render loop, adapt qqmlthread
and qqmltypeloader to work on a single thread.
Disable components and features that require worker
threads: qmldb_server, worker script, shapes, folderlistmodel,
threaded render loop, software renderer.
Done-with: Lorn Potter <lorn.potter@gmail.com>
Change-Id: I77d965947f684f8b7d19284b5decd893395316cb
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As it stood, we would only emit changes to row and column if
index changed as well. But when removing rows and columns
from the model, it can happen that we reuse an item that
by accident has the same index as the one we change it
to, but belonging to a different row and column. So we need to
check for changes to the index the same way we do for
row and column.
Change-Id: I9d507a74aa5dcb0fe7630e7af1e949bd2db7fb47
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Since now each WorkerScript has its own JS engine, let's document that
to explain the reason (isolation), impact (memory consumption) as well
as how to deal with it (sharing).
Change-Id: I8007a58aaa96f989bc9e72e68dacd87655a8a8cc
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
As reported by TSAN, while registering new workers is done in the QML
engine thread with the lock held, the removal of workers from the hash
is done without a lock in the thread and therefore a data race.
Change-Id: I932ed6127fe34b3b3da0b0202f42e877ae6e0d5f
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
This is the more modern way of doing things, so demonstrate that in our
examples and documentation.
Change-Id: Icd5316fbeeb00c34d470c8d871851945dc831244
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
Similar to script imports from .qml files, the .mjs extension is used to
distinguish between ES modules and plain script files.
Change-Id: Id5f9b59fb77e99e3c9d6a404e6d091d96b501ad6
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
With one engine per worker script, we can replace the onMessage and
sendmessage wrappers with plain properties of the WorkerScript object
that we can access. The code is further simplified by merging
WorkerEngine into WorkerScript.
Change-Id: I25e9fb253b6b0dd1fe63676392b1c760a83215db
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
Now that we have one JS engine per worker script, we can get rid of the
per-script QML context and let the script simply run in the global
object, which is now also mutable.
Change-Id: I36d8616b85b2c0ff3a356ee7be9d242c3da624cf
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
| |
Multiple WorkerScript {} elements would share the same underlying
JavaScript engine. This complicates the design.
Change-Id: I17f240bc393f669c23248c96d1aeb6b5a70a2802
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds a specific abstract QQmlComponent subclass,
QQmlAbstractDelegateComponent, and a default implementation,
DelegateChooser, that, together with the type DelegateChoice
allows determining the delegate type by role and/or index.
The patch also adds QQmlAbstractDelegateComponent support
to QQmlTableInstanceModel, that is a simplified version of
the delegate model, currently only used in the new table view.
DelegateChoosers are intended to behave just like Components
in the context of the view. This means that they can be declared
outside of the view, and also in separate files, and the same
delegate component can be used at the same time in multiple views.
[ChangeLog][QtQuick][Item Views] Added a DelegateChooser Component
to host DelegateChoice instances to choose different delegates in
an Item View (e.g. TableView) depending on model roles.
Done-with: Michael Brasser <michael.brasser@live.com>
Task-number: QTBUG-26681
Change-Id: Ibe24a31daf9142c8a9ff45ef6c65da0aec8a14dc
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The enabled property was added with QtQuick/QtQml 2.3 as part of Qt 5.7,
but due to multiple bugs, the property became visible across all
versions, breaking lookup as outlined in the linked task.
The first issue was that property revisioning needs to be specified via
the REVISION tag inside Q_PROPERTY, not using Q_REVISION.
The second issue was that in type registration the unversioned type must
be registered first followed by the revisions. Otherwise the call to
QQmlMetaType::qmlType(const QMetaObject *metaObject, const QHashedStringRef &module, int version_major, int version_minor)
that will look through the metaObjectToType multi-hash will find the
last inserted type first and that satisfies the minor version
requiremend. In the case of the Connections type, that would be the base
version registered last with
qmlRegisterCustomType<QQmlConnections>(uri, versionMajor, versionMinor,"Connections", new QQmlConnectionsParser);
Lastly, if we were to just call that one first and then register
revision 1 afterwards, then only the first version would have a custom
parser attached and we would fail to process the bindings correctly if
using the newer revision.
So to fix this, we introduce another private qmlRegisterCustomType
specialization that includes a meta object revision, thus allowing us to
register the Connections type in the correct order and both with a
customer parser.
That's not ideal, but also not worse than the previous three registration
and it fixes the visibility.
[ChangeLog][QtQml][Connections] Fixed the visibility of the enabled
property to only appear when importing QtQml/QtQuick >= 2.3, which was
introduced with Qt 5.7. Otherwise it would accidentally shadow for
example an "enabled" context property.
Task-number: QTBUG-69884
Change-Id: I888374d96f19502466358df81007bcb3c65d3a79
Reviewed-by: Michael Brasser <michael.brasser@live.com>
|
|
|
|
|
|
|
|
|
|
| |
When object cache for list model items is a plain QObject that was
allocated together with declarative data in one go. Since we control the
site of deletion, we can call the destructor manually as well as
operator delete to avoid the ASAN error.
Change-Id: I346d6ef34876cb495573ba9cfbc68be92dd937ab
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There current assert turned out to not be valid for
all cases. If the model is currently incubating an
object, m_modelItems list will contain it, but
the view will not. So be more specific what we
check. Also, we need to release the object for
items that are being incubated. The code snippet
for doing that is more or less the same as found
in the destructor of QQmlDelegateModel.
Change-Id: I84b4286a037b27ad809c3a63afed94ce61febc19
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
It turns out that using a maxTime of 2 when draining
the pool was a bit naive. If e.g the width of the
table is greater than the height, it starts releasing
pooled items to quickly. So change the logic to be more
dynamic, and to calculate what the maxTime should be
based on the geometry of the table.
Change-Id: Ifeed62789575f98cff063f550f45eb54ef312fdb
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
|
|
| |
And with that get rid of the old advanceIterator methods.
Change-Id: I969fa89d25df8992a4b08c8c081b91c92ffdfddd
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
|
|
|
| |
This will simplify moving over to the new iteration model. It implies
a very small behavioral change in a few places where we used to
iterate over the proto chain before.
Change-Id: Ia62c9c51712d6b45e69ca63becdbefab6fa4bf3f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The old advanceIterator schema was extremely ugly and in addition
not flexible enough to support the requirements for Proxy.ownKeys
and some of the methods in Object
Implemented a new scheme through a OwnPropertyKeys method in the
Object VTable that creates and returns an iterator object. Ported
QJSValueIterator and for-in to use the new mechanism.
There's still many places where we use the old ObjectIterator (that
relies on advanceIterator). Those will be ported in subsequent
commits.
Change-Id: I091a9bea9ff6b2b63630cc336814700757a718be
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Equal to QQmlDelegateModel, we need to listen for changes done to
existing model items, and notify existing delegate items about it.
Otherwise, they will not stay in sync with the model.
By accident, this sort of worked in QQuickTableView already, since
it would rebuild the whole table for every model update. This
is really slow, and completely unnecessary.
Change-Id: I10750ff387f8b455d0f27c50a17926d9beb6dd03
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch will make it possible for TableView to reuse delegate items.
The API lets TableView (or any kind of view in theory) specify if an
item is reusable at the time the item is released.
Reusing delegate items is specified per item, meaning that the view
can choose to release some items as reusable, but others not. If the
view never releases any items as reusable, no items will be
added to the pool, and hence, no items will be reused.
If the view releases an item as reusable, the model will move it
to the reuse pool rather than destroying it (if the items ref-count
is zero, and not persisted). The next time the view asks the model for
a new item, the model will first check if the pool already contains an
item, and if so, use it. Otherwise it will create a new item, like before.
Items in the pool are supposed to rest there for a short while. Ideally
only from the time items are flicked out on one side of the view, until
we reuse them when new items are flicked in on the oppsite side. One big
reason for this is that we have no way of hibernating items in QML, so
they will effectively stay alive while inside the pool. This is not
ideal, but still a huge performance improvement over what we had before,
where all items are always created from scratch. If hibernating objects
will ever be possible, it should be easy to extends the current logic to
take advantage of this.
Already existing tests for QQuickTableView should verify that no
regressions are introduced with this patch. Since recycling of items
is driven from the view, auto tests for this functionality is included
with the patch for implementing reuse support in TableView (coming
in a subsequent patch).
Change-Id: I28aa687251ce3e7e1de0b1c799fdbf44d8867d45
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\
| |
| |
| | |
refs/staging/dev
|
| |\
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
.qmake.conf
Change-Id: I654a2a4b34dadc7cb7d85625b86f54691ad5904a
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This change provides a bare minimum documentation for the
ItemSelectionModel QML type.
Task-number: QTBUG-58090
Change-Id: I0e232f8e05e7629d6f573f8dce21154d0ec307e5
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The aim() function doesn't check if the model inside QQmlAdaptorModel
is a actually a QAbstractItemModel (it just does a static cast).
So we need to guard it.
This is essentially the same fix as was done for
QQmlDelegateModel (sha1: 9757d5f9c90988).
Change-Id: I9f14e1639b5e7df4190333c679e805e7f9f7481a
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This will make it easier to move the data out of CompiledData::Unit and
into a separate data structure.
Change-Id: I32e6233a66f2279b44cc06ef7c3505db4a565f98
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Replace use of CompiledData::Unit::stringAt with
CompilationUnit::stringAt as central place, in preparation for allowing
derived compilation units to retrieve strings from base units.
Change-Id: Ifafe6c18a9fd8d1e2259a60c17200124869b4c2d
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Store doubles in bindings in the constant table of the compilation unit
instead of each binding. This removes one of the two 8 byte members of
the value union and also allows for sharing of constants throughout a
.qml file.
Change-Id: I1d7daafdb7f24e34c14cd160d2dcb2c5aaac1c50
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This allows updating the constants table when the unit data is set /
changes and removes the tie to the engine.
Change-Id: Ice553650390589e30e18421c4e55422a55d0df89
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Consistently provide a smart pointer to the compilation unit in the two
virtual functions.
Change-Id: I2f43d4d17102082577f2502424d288d40eb7479d
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Coverity was complaining about an uninitialized variable, but it
was not being used then we can remove it instead.
Amends commit 3d9a59b4329cd6f4af6f5e65bc59f8ff28180eec.
Coverity-Id: 191020
Change-Id: I98cb0bac9d9985555fda2bc0d2682bd7f1bcc301
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
No longer needed since TableView will switch to use QQmlTableInstanceModel.
This reverts commit a5d2fb468cabff8dc0702c7ddcd9f5b08993b827.
Change-Id: I10c6217627a77beebd99cfa5668db05bbbe4ed15
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This change reverts 59a9c7c3d9ed.
Adding support for rows and columns to a QQmlDelegateModel
is no longer needed now that TableView will use
QQmlTableInstanceModel. Besides, QQmlDelegateModel was designed from
the ground up to only support list models, so just
adding those properties was a bit half-baked.
Change-Id: I1d58355d98999dc6a2a0b88ea64852c9eb918447
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This variable will no longer be used once QQuickTableView
starts to use the new QQmlTableInstanceModel.
Change-Id: I0a4df2b3ce16868105426dac79a8f506fe353cea
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
examples/quick/demos/photoviewer/i18n/qml_de.ts
examples/quick/demos/photoviewer/i18n/qml_fr.ts
examples/quick/demos/photoviewer/photoviewer.pro
examples/quick/demos/photoviewer/qml.qrc
src/qml/compiler/qv4instr_moth_p.h
tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
Change-Id: Ibea76b468577c2a68bd305cee82ae6444d0f8073
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add documentation for setCurrentIndex() and the select() methods.
Include SelectionFlag enum values in select(index, command)
description.
Task-number: QTBUG-56320
Change-Id: Ia43fa2903656d89a1e80bef6097500d329df0c59
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch will add a new model class: QQmlTableInstanceModel.
It will be used by QQuickTableView to communicate with the data
model, instead of using QQmlDelegateModel.
The reason we abandon QQmlDelegateModel for QQuickTableView, is because
QQmlDelegateModel was written from the start to only support list models,
not table models. And to work around this, we proxy table models as a list
models, and combine all columns to form one big list.
This as some disadvantages. First and foremost because QQmlDelegateModel
is using QQmlListCompositor internally. QQmlListCompositor can combine
many different list models into one big list model, and divide them into
groups. Any change done to a list model will also be mirrored in the list
compositor. The compositor will further create QQmlChangeSets describing
such model changes, which will then be emitted by QQmlDelegateModel so that
the view can transition in the same changes.
This flow is especially bad when adding/removing a new row in a table.
In that case, since the table looks like as a list, the list compositor will
need to update its own internal structures for each item in the new row. So
if you have 1000 columns, 1000 updates will be processed.
Even worse, since the list compositor create QQmlChangeSets for each item in
the row, the view will end up receiving 1000 signals about the change.
Combine this with the fact that QQmlDelegateModel contains a lot of
undocumented complex code for dealing with groups, which is not needed or
used by TableView (or ListView for that sake *), adding a new
QQmlTableInstanceModel that understands table models, is the right solution.
Auto testing the new class will be done from QQuickTableView, once it takes
it into use.
* Note: The fact that TableView/ListView is using QQmlDelegateModel internally
to communicate with the data model is a private implementation detail. The
application will never have access to this model (and can therefore not
create any groups on it etc). The application can, however, create its own
DelegateModel and assigns it to TableView/ListView. But this is a different
issue, and will continue to work as before.
Change-Id: If1c35c27e75f236161df84ecb1d919aa3050f5a0
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The aim() function doesn't check if the model inside QQmlAdaptorModel
is a actually a QAbstractItemModel (it just does a static cast).
So we need to guard it.
Change-Id: I397280ea7e6f81939d4030d0512a3a67877ad94c
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|