From 356e2810a4f91cb5e71ba6e5031430ad2fdaaa5c Mon Sep 17 00:00:00 2001 From: DeepSOIC Date: Fri, 10 Nov 2017 17:31:00 +0300 Subject: [PATCH] Sketcher: fix false detection of doubleclick Double-click detector code was comparing double-click threshold (value = 5) with distance between clicked objects in model space (i.e. double-click distance threshold was equal to 5 mm in model space regardless of zoom). The fix changes the comparison to pixels on screen instead. This fixes the inability to select sketch entities in quick succession, when the sketch is small (i.e. less than 40 mm or so). --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 10 +++++----- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index ab3239441c..eaf406e2fe 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -147,7 +147,7 @@ SbColor ViewProviderSketch::SelectColor (0.11f,0.68f,0.11f); // SbColor ViewProviderSketch::PreselectSelectedColor (0.36f,0.48f,0.11f); // #5D7B1C -> ( 93,123, 28) // Variables for holding previous click SbTime ViewProviderSketch::prvClickTime; -SbVec3f ViewProviderSketch::prvClickPoint; +SbVec2s ViewProviderSketch::prvClickPos; SbVec2s ViewProviderSketch::prvCursorPos; SbVec2s ViewProviderSketch::newCursorPos; @@ -617,19 +617,19 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe float dci = (float) QApplication::doubleClickInterval()/1000.0f; if (done && - (point - prvClickPoint).length() < dblClickRadius && + SbVec2f(cursorPos - prvClickPos).length() < dblClickRadius && (SbTime::getTimeOfDay() - prvClickTime).getValue() < dci) { // Double Click Event Occurred editDoubleClicked(); // Reset Double Click Static Variables prvClickTime = SbTime(); - prvClickPoint = SbVec3f(0.0f, 0.0f, 0.0f); - Mode = STATUS_NONE; + prvClickPos = SbVec2s(-16000,-16000); //certainly far away from any clickable place, to avoid re-trigger of double-click if next click happens fast. + Mode = STATUS_NONE; } else { prvClickTime = SbTime::getTimeOfDay(); - prvClickPoint = point; + prvClickPos = cursorPos; prvCursorPos = cursorPos; newCursorPos = cursorPos; if (!done) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index e9dd81d229..a023dc59a6 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -378,7 +378,7 @@ protected: static SbColor InformationColor; static SbTime prvClickTime; - static SbVec3f prvClickPoint; + static SbVec2s prvClickPos; //used by double-click-detector static SbVec2s prvCursorPos; static SbVec2s newCursorPos;