diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 8281da91b..d12755379 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -47,11 +47,12 @@ Crop::Crop (ImProcCoordinator* parent, EditDataProvider *editDataProvider) Crop::~Crop () { MyMutex::MyLock cropLock(cropMutex); - MyMutex::MyLock processingLock(parent->mProcessing); std::vector::iterator i = std::find (parent->crops.begin(), parent->crops.end(), this); if (i!=parent->crops.end ()) parent->crops.erase (i); + + MyMutex::MyLock processingLock(parent->mProcessing); freeAll (); } diff --git a/rtgui/crophandler.cc b/rtgui/crophandler.cc index 3bc3b8218..aad8c7f28 100644 --- a/rtgui/crophandler.cc +++ b/rtgui/crophandler.cc @@ -45,7 +45,8 @@ CropHandler::~CropHandler () { setEnabled (false); if (crop) { - crop->destroy (); + //crop->destroy (); + delete crop; // will do the same than destroy, plus delete the object crop = NULL; } cimg.lock (); diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 598517d41..3143760b6 100755 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -459,8 +459,12 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) { if (decorated) buttonSet.releaseNotify (x, y); - if (deleted) + + if (deleted) { + iarea->flawnOverWindow = NULL; + delete this; return; + } state = SNormal; iarea->grabFocus (NULL); diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index df626048e..c310f4799 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -382,8 +382,9 @@ void ImageArea::addCropWindow () { cw->setPosition (col*get_width()/K + hBorder/2 + layer*30, row*get_height()/K + vBorder/2 + layer*30); } else { - cw->setPosition (lastClosedX, lastClosedY); cw->setSize(lastClosedW, lastClosedH); + cw->setPosition (lastClosedX, lastClosedY); + lastClosedX = -1; } int x0,y0,w,h,wc,hc; mainCropWindow->getCropRectangle(x0,y0,w,h ); @@ -414,7 +415,6 @@ void ImageArea::cropWindowClosed (CropWindow* cw) { std::list::iterator i = std::find (cropWins.begin(), cropWins.end(), cw); if (i!=cropWins.end()) cropWins.erase (i); - delete cw; if (!cropWins.empty()) mainCropWindow->setObservedCropWin (cropWins.front()); else diff --git a/rtgui/imagearea.h b/rtgui/imagearea.h index 97814e379..952a6c91a 100644 --- a/rtgui/imagearea.h +++ b/rtgui/imagearea.h @@ -55,7 +55,6 @@ class ImageArea : public Gtk::DrawingArea, public CropWindowListener, public Edi bool dirty; CropWindow* focusGrabber; - CropWindow* flawnOverWindow; CropGUIListener* cropgl; PointerMotionListener* pmlistener; PointerMotionListener* pmhlistener; @@ -65,6 +64,7 @@ class ImageArea : public Gtk::DrawingArea, public CropWindowListener, public Edi public: CropWindow* mainCropWindow; + CropWindow* flawnOverWindow; ZoomPanel* zoomPanel; IndicateClippedPanel* indClippedPanel; PreviewModePanel* previewModePanel;