From 3e4ac0c6625a86ca1b3d0b5e98ebdda8f191ca02 Mon Sep 17 00:00:00 2001 From: Aesylwinn Date: Sun, 14 Aug 2016 14:43:29 -0400 Subject: [PATCH] Potential fix for context sensitive select mode issues. --- apps/opencs/view/render/instancemode.cpp | 31 +++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/apps/opencs/view/render/instancemode.cpp b/apps/opencs/view/render/instancemode.cpp index feca6fa6a2..aa6408fef2 100644 --- a/apps/opencs/view/render/instancemode.cpp +++ b/apps/opencs/view/render/instancemode.cpp @@ -215,23 +215,26 @@ bool CSVRender::InstanceMode::primaryEditStartDrag (const QPoint& pos) if (mDragMode!=DragMode_None || mLocked) return false; - WorldspaceHitResult hit = getWorldspaceWidget().mousePick (pos, getWorldspaceWidget().getInteractionMask()); - if (hit.tag && CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue()) - { - getWorldspaceWidget().clearSelection (Mask_Reference); - if (CSVRender::ObjectTag *objectTag = dynamic_cast (hit.tag.get())) - { - CSVRender::Object* object = objectTag->mObject; - object->setSelected (true); - } - } - - std::vector > selection = - getWorldspaceWidget().getSelection (Mask_Reference); + std::vector > selection = getWorldspaceWidget().getSelection (Mask_Reference); if (selection.empty()) - return false; + { + // Only change selection at the start of drag if no object is already selected + if (hit.tag && CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue()) + { + getWorldspaceWidget().clearSelection (Mask_Reference); + if (CSVRender::ObjectTag *objectTag = dynamic_cast (hit.tag.get())) + { + CSVRender::Object* object = objectTag->mObject; + object->setSelected (true); + } + } + + selection = getWorldspaceWidget().getSelection (Mask_Reference); + if (selection.empty()) + return false; + } for (std::vector >::iterator iter (selection.begin()); iter!=selection.end(); ++iter)