diff --git a/rtgui/controllines.cc b/rtgui/controllines.cc index c078b4322..5918a75cb 100644 --- a/rtgui/controllines.cc +++ b/rtgui/controllines.cc @@ -199,6 +199,10 @@ bool ControlLineManager::pick3(bool picked) bool ControlLineManager::drag1(int modifierKey) { + if (action != Action::DRAGGING) { + return false; + } + EditDataProvider* provider = getEditProvider(); if (!provider || selected_object < 1) { @@ -263,6 +267,20 @@ bool ControlLineManager::drag1(int modifierKey) return false; } +void ControlLineManager::releaseEdit(void) +{ + action = Action::NONE; + + if (selected_object > 0) { + mouseOverGeometry[selected_object]->state = Geometry::NORMAL; + } + + edited = true; + callbacks->lineChanged(); + drawing_line = false; + selected_object = -1; +} + bool ControlLineManager::getEdited(void) const { return edited; diff --git a/rtgui/controllines.h b/rtgui/controllines.h index 2b2d179a4..a045eedd7 100644 --- a/rtgui/controllines.h +++ b/rtgui/controllines.h @@ -87,6 +87,8 @@ public: ~ControlLineManager(); bool getEdited(void) const; + /** Release anything that is currently being dragged. */ + void releaseEdit(void); void removeAll(void); /** Sets whether or not the lines are visible and interact-able. */ void setActive(bool active); diff --git a/rtgui/perspective.cc b/rtgui/perspective.cc index 8db91ee2e..fb4797ae4 100644 --- a/rtgui/perspective.cc +++ b/rtgui/perspective.cc @@ -778,6 +778,7 @@ void PerspCorrection::linesEditButtonPressed(void) listener->unsetTweakOperator(this); listener->refreshPreview(EvPerspRender); } + lines->releaseEdit(); lines->setDrawMode(false); lines->setActive(false); if (panel_listener) {