diff --git a/rtgui/lensgeom.cc b/rtgui/lensgeom.cc index 69c4737bc6..1d39ced424 100644 --- a/rtgui/lensgeom.cc +++ b/rtgui/lensgeom.cc @@ -43,6 +43,11 @@ LensGeometry::LensGeometry () : FoldableToolPanel(this, "lensgeom", M("TP_LENSGE show_all (); } +LensGeometry::~LensGeometry () +{ + g_idle_remove_by_data(this); +} + void LensGeometry::read (const ProcParams* pp, const ParamsEdited* pedited) { @@ -113,3 +118,26 @@ void LensGeometry::setBatchMode (bool batchMode) ToolPanel::setBatchMode (batchMode); removeIfThere (this, autoCrop); } + +void LensGeometry::disableAutoFillIfActive () +{ + g_idle_add(doDisableAutoFillIfActive, this); +} + +int LensGeometry::doDisableAutoFillIfActive (void* data) +{ + GThreadLock lock; // Is this really needed? + + LensGeometry* const instance = static_cast(data); + + if (!instance->batchMode) { + if (instance->fill->get_active()) { + instance->fillConn.block (true); + instance->fill->set_active(false); + if (instance->listener) { + instance->listener->panelChanged (EvTransAutoFill, M("GENERAL_DISABLED")); + } + instance->fillConn.block (false); + } + } +} diff --git a/rtgui/lensgeom.h b/rtgui/lensgeom.h index f6b41b632c..51a6e108c0 100644 --- a/rtgui/lensgeom.h +++ b/rtgui/lensgeom.h @@ -32,11 +32,12 @@ class LensGeometry : public ToolParamBlock, public FoldableToolPanel Gtk::CheckButton* fill; bool lastFill; sigc::connection fillConn; - ToolParamBlock* packBox; + ToolParamBlock* packBox; public: LensGeometry (); + ~LensGeometry (); Gtk::Box* getPackBox () { @@ -53,6 +54,11 @@ class LensGeometry : public ToolParamBlock, public FoldableToolPanel { rlistener = l; } + void disableAutoFillIfActive (); + +private: + static int doDisableAutoFillIfActive (void* data); + }; #endif diff --git a/rtgui/lensprofile.cc b/rtgui/lensprofile.cc index eda3992c34..5555d6dd71 100644 --- a/rtgui/lensprofile.cc +++ b/rtgui/lensprofile.cc @@ -142,6 +142,10 @@ void LensProfilePanel::write( rtengine::procparams::ProcParams* pp, ParamsEdited void LensProfilePanel::onLCPFileChanged() { + + // Disable Auto-Fill when enabling LCP Distortion Correction, #1791 + lensgeomLcpFill->disableAutoFillIfActive(); + lcpFileChanged = true; updateDisabled(lcpStore->isValidLCPFileName(fcbLCPFile->get_filename())); @@ -164,6 +168,12 @@ void LensProfilePanel::onLCPFileReset() void LensProfilePanel::onUseDistChanged() { + + // Disable Auto-Fill when enabling LCP Distortion Correction, #1791 + if (ckbUseDist->get_active()) { + lensgeomLcpFill->disableAutoFillIfActive(); + } + useDistChanged = true; if (listener) { diff --git a/rtgui/lensprofile.h b/rtgui/lensprofile.h index 0397388d5a..23d02b9a2e 100644 --- a/rtgui/lensprofile.h +++ b/rtgui/lensprofile.h @@ -22,6 +22,7 @@ #include #include "toolpanel.h" #include "guiutils.h" +#include "lensgeom.h" class LensProfilePanel : public ToolParamBlock, public FoldableToolPanel { @@ -38,6 +39,7 @@ class LensProfilePanel : public ToolParamBlock, public FoldableToolPanel void updateDisabled(bool enable); bool allowFocusDep; bool isRaw; + LensGeometry *lensgeomLcpFill; public: @@ -52,6 +54,7 @@ class LensProfilePanel : public ToolParamBlock, public FoldableToolPanel void onUseDistChanged(); void onUseVignChanged(); void onUseCAChanged(); + void setLensGeomRef( LensGeometry *foo) { lensgeomLcpFill = foo ;}; }; #endif diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index fe53565d2d..0bc3bd5333 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -1807,6 +1807,7 @@ void MyFlatCurve::setPoints (const std::vector& p) stopNumericalAdjustment(); FlatCurveType t = (FlatCurveType)p[ix++]; curve.type = t; + lit_point = -1; if (t == FCT_MinMaxCPoints) { curve.x.clear (); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index a9f78273e3..a130730189 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -53,6 +53,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n colortoning = Gtk::manage (new ColorToning ()); lensgeom = Gtk::manage (new LensGeometry ()); lensProf = Gtk::manage (new LensProfilePanel ()); + lensProf->setLensGeomRef(lensgeom); distortion = Gtk::manage (new Distortion ()); rotate = Gtk::manage (new Rotate ()); vibrance = Gtk::manage (new Vibrance ());