summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Guichard <nicolas.guichard@kdab.com>2021-02-25 13:55:01 +0100
committerTarja Sundqvist <tarja.sundqvist@qt.io>2021-05-06 12:08:07 +0300
commitf2fb2f3ca5d2ba4e62bf39689324974aea5b3b98 (patch)
tree16d0149b5cb76e43bf798e80306d48504fccd6fc
parent40b3a441ceb9d766a024e85db78bbe3d96f3a896 (diff)
downloadqt3d-f2fb2f3ca5d2ba4e62bf39689324974aea5b3b98.tar.gz
ObjectPicker: ensure pristine pickers are handled
When adding a QObjectPicker component to a QEntity, the object couldn't actually be picked until one of hoverEnabled, dragEnabled or priority changed. This fixes the issue by ensuring notifyJob is called at least once, when the picker is initialized. Change-Id: I5b035cf5be6ef1da35c2d24cf76bc2daaad9bc57 Reviewed-by: Paul Lemire <paul.lemire@kdab.com> (cherry picked from commit 1641eae01636ddb82b668c4f91d2c26f89e5bc06)
-rw-r--r--src/render/picking/objectpicker.cpp5
-rw-r--r--tests/auto/render/objectpicker/tst_objectpicker.cpp15
2 files changed, 20 insertions, 0 deletions
diff --git a/src/render/picking/objectpicker.cpp b/src/render/picking/objectpicker.cpp
index 341769ce8..07a630857 100644
--- a/src/render/picking/objectpicker.cpp
+++ b/src/render/picking/objectpicker.cpp
@@ -83,6 +83,11 @@ void ObjectPicker::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstT
BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ if (firstTime) {
+ markDirty(AbstractRenderer::AllDirty);
+ notifyJob();
+ }
+
if (node->isHoverEnabled() != m_hoverEnabled) {
m_hoverEnabled = node->isHoverEnabled();
markDirty(AbstractRenderer::AllDirty);
diff --git a/tests/auto/render/objectpicker/tst_objectpicker.cpp b/tests/auto/render/objectpicker/tst_objectpicker.cpp
index 24fa2159d..b1898e040 100644
--- a/tests/auto/render/objectpicker/tst_objectpicker.cpp
+++ b/tests/auto/render/objectpicker/tst_objectpicker.cpp
@@ -40,6 +40,21 @@ class tst_ObjectPicker : public Qt3DCore::QBackendNodeTester
Q_OBJECT
private Q_SLOTS:
+ void checkInitialSync()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ Qt3DRender::Render::ObjectPicker objectPicker;
+ Qt3DRender::QObjectPicker picker;
+
+ // WHEN
+ objectPicker.setRenderer(&renderer);
+ simulateInitializationSync(&picker, &objectPicker);
+
+ // THEN
+ QVERIFY(renderer.dirtyBits() != 0);
+ }
+
void checkPeerPropertyMirroring()
{
// GIVEN