--- gigedit/trunk/src/gigedit/dimregionedit.h 2017/01/02 22:13:01 3068 +++ gigedit/trunk/src/gigedit/dimregionedit.h 2017/05/11 20:59:46 3177 @@ -37,6 +37,7 @@ #include #include "paramedit.h" +#include "global.h" class VelocityCurve : public Gtk::DrawingArea { public: @@ -98,6 +99,19 @@ sigc::signal instrument_changed; sigc::signal select_sample_signal; + /** + * Ensures that the 2 signals DimRegionEdit::dimreg_to_be_changed_signal and + * DimRegionEdit::dimreg_changed_signal are always triggered correctly as a + * pair. It behaves similar to a "mutex lock guard" design pattern. + */ + class DimRegionChangeGuard : public SignalGuard { + public: + DimRegionChangeGuard(DimRegionEdit* edit, gig::DimensionRegion* pDimReg) : + SignalGuard(edit->dimreg_to_be_changed_signal, edit->dimreg_changed_signal, pDimReg) + { + } + }; + gig::DimensionRegion* dimregion; #ifdef OLD_TOOLTIPS @@ -290,7 +304,7 @@ for (std::set::iterator i = dimregs.begin() ; i != dimregs.end() ; ++i) { - dimreg_changed_signal(*i); + DimRegionChangeGuard(this, *i); setter(this, *i, value); } }