diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 65eca08c1..6d7999f6e 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -205,6 +205,9 @@ class ImProcCoordinator : public StagedImageProcessor { void getSpotWB (int x, int y, int rectSize, double& temp, double& green); void getAutoCrop (double ratio, int &x, int &y, int &w, int &h); + bool updateTryLock () {return updaterThreadStart.trylock();} + void updateUnLock () {updaterThreadStart.unlock();} + void setProgressListener (ProgressListener* pl) { plistener = pl; } void setPreviewImageListener (PreviewImageListener* il) {imageListener = il; } void setSizeListener (SizeListener* il) {sizeListeners.push_back (il); } diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 430dae767..1a2a78a03 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -330,6 +330,10 @@ namespace rtengine { * @return the height of the preview image */ virtual int getPreviewHeight () =0; + virtual bool updateTryLock() = 0; + + virtual void updateUnLock() = 0; + /** Creates and returns a Crop instance that acts as a window on the image * @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber * @return a pointer to the Crop object that handles the image data trough its own pipeline */ diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 4810867af..9689d023d 100755 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -67,7 +67,7 @@ CropWindow::CropWindow (ImageArea* parent, rtengine::StagedImageProcessor* ipc_, backColor(options.bgcolor), decorated(true), titleHeight(30), sideBorderWidth(3), lowerBorderWidth(3), upperBorderWidth(1), sepWidth(2), xpos(30), ypos(30), imgX(0), imgY(0), imgW(1), imgH(1), iarea(parent), - cropZoom(0), cropgl(NULL), pmlistener(NULL), observedCropWin(NULL), isFlawnOver(false) { + cropZoom(0), cropgl(NULL), pmlistener(NULL), observedCropWin(NULL), ipc(ipc_), isFlawnOver(false) { Glib::RefPtr context = parent->get_pango_context () ; Pango::FontDescription fontd = context->get_font_description (); @@ -1585,8 +1585,11 @@ void CropWindow::buttonPressed (LWButton* button, int actionCode, void* actionDa else if (button==bZoom100) // zoom 100 zoom11 (); else if (button==bClose) {// close - deleted = true; - iarea->cropWindowClosed (this); + if(ipc->updateTryLock()) { + deleted = true; + iarea->cropWindowClosed (this); + ipc->updateUnLock(); + } } } diff --git a/rtgui/cropwindow.h b/rtgui/cropwindow.h index e5c05c0e9..8e331b083 100755 --- a/rtgui/cropwindow.h +++ b/rtgui/cropwindow.h @@ -84,6 +84,7 @@ class CropWindow : public LWButtonListener, public CropHandlerListener, public E std::list listeners; CropWindow* observedCropWin; + rtengine::StagedImageProcessor* ipc; bool onArea (CursorArea a, int x, int y); void updateCursor (int x, int y);