diff --git a/rtgui/adjuster.cc b/rtgui/adjuster.cc index 662fc5bf2..f35cff80e 100644 --- a/rtgui/adjuster.cc +++ b/rtgui/adjuster.cc @@ -22,6 +22,7 @@ #include #include #include +#include extern Glib::ustring argv0; @@ -258,10 +259,9 @@ Glib::ustring Adjuster::getTextValue () { bool Adjuster::notifyListener () { - if (adjusterListener!=NULL && !blocked) { - gdk_threads_enter(); - adjusterListener->adjusterChanged (this, spin->get_value ()); - gdk_threads_leave(); + if (adjusterListener!=NULL && !blocked) { + GThreadLock lock; + adjusterListener->adjusterChanged (this, spin->get_value ()); } return false; } @@ -271,6 +271,7 @@ void Adjuster::setEnabled (bool enabled) { spin->set_sensitive (enabled); slider->set_sensitive (enabled); } + void Adjuster::setEditedState (EditedState eState) { if (editedState!=eState) { diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index 6267ce48a..5d87f06e1 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -209,12 +209,10 @@ Glib::ustring BatchQueue::getTempFilenameForParams( const Glib::ustring filename return savedParamPath; } -int deleteitem (void* data) +int cancelItemUI (void* data) { - safe_g_remove( ((BatchQueueEntry*)data)->savedParamsFile ); - gdk_threads_enter (); + safe_g_remove( ((BatchQueueEntry*)data)->savedParamsFile ); delete (BatchQueueEntry*)data; - gdk_threads_leave (); return 0; } @@ -235,7 +233,7 @@ void BatchQueue::cancelItems (std::vector* items) { rtengine::ProcessingJob::destroy (entry->job); if (entry->thumbnail) entry->thumbnail->imageRemovedFromQueue (); - g_idle_add (deleteitem, entry); + g_idle_add (cancelItemUI, entry); } } for (int i=0; ijob : NULL; } @@ -575,11 +573,8 @@ Glib::ustring BatchQueue::autoCompleteFileName (const Glib::ustring& fileName, c } } -int bqredraw (void* p) { - - gdk_threads_enter (); +int setProgressUI (void* p) { ((BatchQueue*)p)->redraw(); - gdk_threads_leave (); return 0; } @@ -588,7 +583,7 @@ void BatchQueue::setProgress (double p) { if (processing) processing->progress = p; - g_idle_add (bqredraw, this); + g_idle_add (setProgressUI, this); } void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionData) { @@ -609,13 +604,10 @@ struct NLParams { int qsize; }; -int bqnotifylistener (void* data) { - - gdk_threads_enter (); +int bqnotifylistenerUI (void* data) { NLParams* params = (NLParams*)data; params->listener->queueSizeChanged (params->qsize); delete params; - gdk_threads_leave (); return 0; } @@ -625,7 +617,7 @@ void BatchQueue::notifyListener () { NLParams* params = new NLParams; params->listener = listener; params->qsize = fd.size(); - g_idle_add (bqnotifylistener, params); + g_idle_add (bqnotifylistenerUI, params); } } diff --git a/rtgui/batchqueueentry.cc b/rtgui/batchqueueentry.cc index 1d339ce20..7487c22d6 100644 --- a/rtgui/batchqueueentry.cc +++ b/rtgui/batchqueueentry.cc @@ -109,7 +109,6 @@ struct BQUpdateParam { int updateImageUIThread (void* data) { - gdk_threads_enter (); BQUpdateParam* params = (BQUpdateParam*)data; BatchQueueEntryIdleHelper* bqih = params->bqih; @@ -122,14 +121,13 @@ int updateImageUIThread (void* data) { bqih->pending--; delete [] params->img; delete params; - gdk_threads_leave (); + return 0; } bqih->bqentry->_updateImage (params->img, params->w, params->h); bqih->pending--; - gdk_threads_leave (); delete params; return 0; } diff --git a/rtgui/crop.cc b/rtgui/crop.cc index b3a2d0af3..f72f64ecd 100644 --- a/rtgui/crop.cc +++ b/rtgui/crop.cc @@ -436,34 +436,28 @@ void Crop::enabledChanged () { } } -int notifylistener (void* data) { - - gdk_threads_enter (); +int notifyListenerUI (void* data) { ((Crop*)data)->notifyListener (); - gdk_threads_leave (); return 0; } -int refreshspins (void* data) { - - gdk_threads_enter (); +int refreshSpinsUI (void* data) { RefreshSpinHelper* rsh = (RefreshSpinHelper*) data; rsh->crop->refreshSpins (rsh->notify); delete rsh; - gdk_threads_leave (); return 0; } void Crop::hFlipCrop () { nx = maxw - nx - nw; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); } void Crop::vFlipCrop () { ny = maxh - ny - nh; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); } void Crop::rotateCrop (int deg) { @@ -493,7 +487,7 @@ void Crop::rotateCrop (int deg) { } lastRotationDeg = deg; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); } void Crop::positionChanged () { @@ -506,7 +500,7 @@ void Crop::positionChanged () { int W = nw; int H = nh; cropMoved (X, Y, W, H); - g_idle_add (notifylistener, this); + g_idle_add (notifyListenerUI, this); } void Crop::widthChanged () { @@ -518,7 +512,7 @@ void Crop::widthChanged () { int W = (int)w->get_value (); int H = nh; cropWidth2Resized (X, Y, W, H); - g_idle_add (notifylistener, this); + g_idle_add (notifyListenerUI, this); } void Crop::heightChanged () { @@ -530,7 +524,7 @@ void Crop::heightChanged () { int W = nw; int H = (int)h->get_value (); cropHeight2Resized (X, Y, W, H); - g_idle_add (notifylistener, this); + g_idle_add (notifyListenerUI, this); } @@ -563,7 +557,7 @@ void Crop::ratioChanged () { else cropHeight2Resized (X, Y, W, H); - g_idle_add (refreshspins, new RefreshSpinHelper (this, true)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, true)); } } @@ -628,13 +622,10 @@ struct setdimparams { int y; }; -int setdim (void* data) { - - gdk_threads_enter (); +int sizeChangedUI (void* data) { setdimparams* params = (setdimparams*)data; params->crop->setDimensions (params->x, params->y); delete params; - gdk_threads_leave (); return 0; } @@ -644,7 +635,7 @@ void Crop::sizeChanged (int x, int y, int ow, int oh) { params->x = x; params->y = y; params->crop = this; - g_idle_add (setdim, params); + g_idle_add (sizeChangedUI, params); } bool Crop::refreshSpins (bool notify) { @@ -697,7 +688,7 @@ void Crop::cropMoved (int &X, int &Y, int &W, int &H) { nw = W; nh = H; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } @@ -727,7 +718,7 @@ void Crop::cropWidth1Resized (int &X, int &Y, int &W, int &H) { nw = W; nh = H; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } @@ -759,7 +750,7 @@ void Crop::cropWidth2Resized (int &X, int &Y, int &W, int &H) { nw = W; nh = H; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } @@ -790,7 +781,7 @@ void Crop::cropHeight1Resized (int &X, int &Y, int &W, int &H) { nw = W; nh = H; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } @@ -821,7 +812,7 @@ void Crop::cropHeight2Resized (int &X, int &Y, int &W, int &H) { nw = W; nh = H; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } @@ -837,7 +828,7 @@ void Crop::cropInit (int &x, int &y, int &w, int &h) { econn.block (true); enabled->set_active (1); econn.block (false); - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } @@ -922,13 +913,13 @@ void Crop::cropResized (int &x, int &y, int& x2, int& y2) { nw = W; nh = H; - g_idle_add (refreshspins, new RefreshSpinHelper (this, false)); + g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false)); // Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins)); } void Crop::cropManipReady () { - g_idle_add (notifylistener, this); + g_idle_add (notifyListenerUI, this); } double Crop::getRatio () { diff --git a/rtgui/crophandler.cc b/rtgui/crophandler.cc index 51f998763..f1c28be21 100644 --- a/rtgui/crophandler.cc +++ b/rtgui/crophandler.cc @@ -20,6 +20,7 @@ #undef THREAD_PRIORITY_NORMAL #include +#include using namespace rtengine; @@ -157,7 +158,7 @@ void CropHandler::getPosition (int& x, int& y) { int createpixbufs (void* data) { - gdk_threads_enter (); + GThreadLock lock; CropHandlerIdleHelper* chi = (CropHandlerIdleHelper*) data; if (chi->destroyed) { @@ -165,7 +166,7 @@ int createpixbufs (void* data) { delete chi; else chi->pending--; - gdk_threads_leave (); + return 0; } @@ -180,7 +181,6 @@ int createpixbufs (void* data) { delete [] ch->cropimgtrue; ch->cropimgtrue = NULL; ch->cimg.unlock (); - gdk_threads_leave (); return 0; } @@ -221,7 +221,6 @@ int createpixbufs (void* data) { chi->pending--; - gdk_threads_leave (); return 0; } diff --git a/rtgui/dirbrowser.cc b/rtgui/dirbrowser.cc index 4edb465d1..e95344c36 100644 --- a/rtgui/dirbrowser.cc +++ b/rtgui/dirbrowser.cc @@ -25,6 +25,7 @@ #include #include +#include #define CHECKTIME 5000 extern Glib::ustring argv0; @@ -142,7 +143,7 @@ void DirBrowser::updateVolumes () { int nvolumes = GetLogicalDrives (); if (nvolumes!=volumes) { - gdk_threads_enter(); + GThreadLock lock; for (int i=0; i<32; i++) if (((volumes >> i) & 1) && !((nvolumes >> i) & 1)) { // volume i has been deleted @@ -155,27 +156,21 @@ void DirBrowser::updateVolumes () { else if (!((volumes >> i) & 1) && ((nvolumes >> i) & 1)) addRoot ('A'+i); // volume i has been added volumes = nvolumes; - - gdk_threads_leave(); } } -int _updateVolumes (void* br) { - +int updateVolumesUI (void* br) { ((DirBrowser*)br)->updateVolumes (); return 1; } -int _updateDirTree (void* br) { - - gdk_threads_enter (); +int updateDirTreeUI (void* br) { ((DirBrowser*)br)->updateDirTreeRoot (); - gdk_threads_leave (); return 0; } void DirBrowser::winDirChanged () { - g_idle_add (_updateDirTree, this); + g_idle_add (updateDirTreeUI, this); } #endif @@ -187,7 +182,7 @@ void DirBrowser::fillRoot () { if ((volumes >> i) & 1) addRoot ('A'+i); // since sigc++ is not thread safe, we have to use the glib function - g_timeout_add (CHECKTIME, _updateVolumes, this); + g_timeout_add (CHECKTIME, updateVolumesUI, this); #else Gtk::TreeModel::Row rootRow = *(dirTreeModel->append()); rootRow[dtColumns.filename] = "/"; diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 7862db91a..c1b5eafbf 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -502,7 +502,6 @@ struct spsparams { int setProgressStateUIThread (void* data) { - gdk_threads_enter (); spsparams* p = (spsparams*)data; if (p->epih->destroyed) { @@ -511,14 +510,14 @@ int setProgressStateUIThread (void* data) { else p->epih->pending--; delete p; - gdk_threads_leave (); + return 0; } p->epih->epanel->refreshProcessingState (p->inProcessing); p->epih->pending--; delete p; - gdk_threads_leave (); + return 0; } @@ -637,9 +636,7 @@ void EditorPanel::displayError (Glib::ustring descr) { } } -int disperror (void* data) { - - gdk_threads_enter (); +int disperrorUI (void* data) { errparams* p = (errparams*)data; if (p->epih->destroyed) { @@ -648,14 +645,14 @@ int disperror (void* data) { else p->epih->pending--; delete p; - gdk_threads_leave (); + return 0; } p->epih->epanel->displayError (p->descr); p->epih->pending--; delete p; - gdk_threads_leave (); + return 0; } @@ -665,7 +662,7 @@ void EditorPanel::error (Glib::ustring descr) { errparams* p = new errparams; p->descr = descr; p->epih = epih; - g_idle_add (disperror, p); + g_idle_add (disperrorUI, p); } void EditorPanel::info_toggled () { diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index e9cd5806a..21de79db5 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -313,8 +313,6 @@ int AddEntryUIThread (void* data) { addparams* ap = (addparams*) data; FileBrowserIdleHelper* fbih = ap->fbih; - gdk_threads_enter(); - if (fbih->destroyed) { if (fbih->pending == 1) delete fbih; @@ -322,14 +320,14 @@ int AddEntryUIThread (void* data) { fbih->pending--; delete ap->entry; delete ap; - gdk_threads_leave (); + return 0; } ap->fbih->fbrowser->addEntry_ (ap->entry); delete ap; fbih->pending--; - gdk_threads_leave(); + return 0; } diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index 8ff6a2801..dd0c8841d 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -158,13 +158,11 @@ struct tiupdate { rtengine::procparams::CropParams cropParams; }; -int fbeupdate (void* data) { +int updateImageUI (void* data) { tiupdate* params = (tiupdate*)data; FileBrowserEntryIdleHelper* feih = params->feih; - GThreadLock lock; - if (feih->destroyed) { if (feih->pending == 1) delete feih; @@ -204,7 +202,7 @@ void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengi param->img = img; param->scale = scale; param->cropParams = cropParams; - g_idle_add (fbeupdate, param); + g_idle_add (updateImageUI, param); } void FileBrowserEntry::_updateImage (rtengine::IImage8* img, double s, rtengine::procparams::CropParams cropParams) { diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index d54d9f5b9..83e5335a5 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -550,19 +550,18 @@ void FileCatalog::_refreshProgressBar () { } } -int refreshpb (void* data) { - - gdk_threads_enter (); +int refreshProgressBarUI (void* data) { ((FileCatalog*)data)->_refreshProgressBar (); - gdk_threads_leave (); return 0; } void FileCatalog::previewReady (int dir_id, FileBrowserEntry* fdn) { GThreadLock lock; - _previewReady (dir_id,fdn); + previewReadyUI (dir_id,fdn); } -void FileCatalog::_previewReady (int dir_id, FileBrowserEntry* fdn) { + +// Called WITHIN gtk thread +void FileCatalog::previewReadyUI (int dir_id, FileBrowserEntry* fdn) { if ( dir_id != selectedDirectoryId ) { @@ -597,18 +596,18 @@ void FileCatalog::_previewReady (int dir_id, FileBrowserEntry* fdn) { dirEFS.cameras.insert (cfs->camera); dirEFS.lenses.insert (cfs->lens); previewsLoaded++; - g_idle_add (refreshpb, this); + + g_idle_add (refreshProgressBarUI, this); } int prevfinished (void* data) { - - gdk_threads_enter(); - ((FileCatalog*)data)->_previewsFinished (); - gdk_threads_leave(); + GThreadLock lock; + ((FileCatalog*)data)->previewsFinishedUI (); return 0; } -void FileCatalog::_previewsFinished () { +// Called within GTK UI thread +void FileCatalog::previewsFinishedUI () { redrawAll (); previewsToLoad = 0; @@ -631,8 +630,6 @@ void FileCatalog::_previewsFinished () { void FileCatalog::previewsFinished (int dir_id) { - GThreadLock lock; - if ( dir_id != selectedDirectoryId ) { return; @@ -684,13 +681,11 @@ struct FCOIParams { std::vector tmb; }; -int fcopenimg (void* p) { - - gdk_threads_enter (); +int openRequestedUI (void* p) { FCOIParams* params = (FCOIParams*)p; params->catalog->_openImage (params->tmb); delete params; - gdk_threads_leave (); + return 0; } @@ -701,7 +696,7 @@ void FileCatalog::openRequested (std::vector tmb) { params->tmb = tmb; for (size_t i=0; iincreaseRef (); - g_idle_add (fcopenimg, params); + g_idle_add (openRequestedUI, params); } void FileCatalog::deleteRequested (std::vector tbe, bool inclBatchProcessed) { @@ -1275,10 +1270,7 @@ void FileCatalog::reparseDirectory () { #ifdef WIN32 int winDirChangedUITread (void* cat) { - gdk_threads_enter (); ((FileCatalog*)cat)->reparseDirectory (); - gdk_threads_leave (); - return 0; } @@ -1331,13 +1323,13 @@ void FileCatalog::addAndOpenFile (const Glib::ustring& fname) { Thumbnail* tmb = cacheMgr->getEntry (file->get_parse_name()); if (tmb) { FileBrowserEntry* entry = new FileBrowserEntry (tmb, file->get_parse_name()); - _previewReady (selectedDirectoryId,entry); + previewReadyUI (selectedDirectoryId,entry); // open the file FCOIParams* params = new FCOIParams; params->catalog = this; params->tmb.push_back (tmb); tmb->increaseRef (); - g_idle_add (fcopenimg, params); + g_idle_add (openRequestedUI, params); } } } diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index ccaff58e6..c317cad9b 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -163,10 +163,10 @@ class FileCatalog : public Gtk::VBox, void refreshEditedState (const std::set& efiles); // previewloaderlistener interface - void _previewReady (int dir_id, FileBrowserEntry* fdn); + void previewReadyUI (int dir_id, FileBrowserEntry* fdn); void previewReady (int dir_id, FileBrowserEntry* fdn); void previewsFinished (int dir_id); - void _previewsFinished (); + void previewsFinishedUI (); void _refreshProgressBar (); // filterpanel interface diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index 05eb75588..b34279f27 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -21,12 +21,8 @@ #include #include -int fbinit (void* data) { - - gdk_threads_enter (); +int FilePanelInitUI (void* data) { ((FilePanel*)data)->init (); - gdk_threads_leave (); - return 0; } @@ -112,7 +108,7 @@ FilePanel::FilePanel () : parent(NULL) { fileCatalog->setFileSelectionChangeListener (tpc); fileCatalog->setFileSelectionListener (this); - g_idle_add (fbinit, this); + g_idle_add (FilePanelInitUI, this); show_all (); } diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index a1fddcafd..d6bbce52b 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -112,9 +112,7 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw) { renderHistogram (); } -int histupdate (void* data) { - - gdk_threads_enter (); +int histupdateUI (void* data) { HistogramAreaIdleHelper* haih = (HistogramAreaIdleHelper*)data; @@ -123,7 +121,7 @@ int histupdate (void* data) { delete haih; else haih->pending--; - gdk_threads_leave (); + return 0; } @@ -131,7 +129,7 @@ int histupdate (void* data) { haih->harea->queue_draw (); haih->pending--; - gdk_threads_leave (); + return 0; } @@ -148,7 +146,7 @@ void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu valid = false; haih->pending++; - g_idle_add (histupdate, haih); + g_idle_add (histupdateUI, haih); } void HistogramArea::renderHistogram () { diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index 6d21b4436..6face4c8d 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -701,9 +701,7 @@ void MyDiagonalCurve::setActiveParam (int ac) { queue_draw (); } -int diagonalmchistupdate (void* data) { - - gdk_threads_enter (); +int diagonalmchistupdateUI (void* data) { MyCurveIdleHelper* mcih = (MyCurveIdleHelper*)data; @@ -712,7 +710,7 @@ int diagonalmchistupdate (void* data) { delete mcih; else mcih->pending--; - gdk_threads_leave (); + return 0; } @@ -720,7 +718,7 @@ int diagonalmchistupdate (void* data) { mcih->myCurve->queue_draw (); mcih->pending--; - gdk_threads_leave (); + return 0; } @@ -736,7 +734,7 @@ void MyDiagonalCurve::updateBackgroundHistogram (LUTu & hist) { bghistvalid = false; mcih->pending++; - g_idle_add (diagonalmchistupdate, mcih); + g_idle_add (diagonalmchistupdateUI, mcih); } diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index a0af94bc6..d2cd21547 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -1279,43 +1279,6 @@ void MyFlatCurve::setType (FlatCurveType t) { pixmap.clear (); } -/*int flatmchistupdate (void* data) { - - gdk_threads_enter (); - - MyFlatCurveIdleHelper* mcih = (MyFlatCurveIdleHelper*)data; - - if (mcih->destroyed) { - if (mcih->pending == 1) - delete mcih; - else - mcih->pending--; - gdk_threads_leave (); - return 0; - } - - mcih->clearPixmap (); - mcih->myCurve->queue_draw (); - - mcih->pending--; - gdk_threads_leave (); - return 0; -}*/ - -/*void MyFlatCurve::updateBackgroundHistogram (unsigned int* hist) { - - if (hist!=NULL) { - memcpy (bghist, hist, 256*sizeof(unsigned int)); - bghistvalid = true; - } - else - bghistvalid = false; - - mcih->pending++; - g_idle_add (flatmchistupdate, mcih); - -}*/ - void MyFlatCurve::reset() { innerWidth = get_allocation().get_width() - RADIUS * 2; innerHeight = get_allocation().get_height() - RADIUS * 2; diff --git a/rtgui/placesbrowser.cc b/rtgui/placesbrowser.cc index 58c8a48f5..45332a734 100644 --- a/rtgui/placesbrowser.cc +++ b/rtgui/placesbrowser.cc @@ -20,6 +20,7 @@ #include #include #include +#include PlacesBrowser::PlacesBrowser () : listener (NULL) { @@ -211,24 +212,18 @@ bool PlacesBrowser::rowSeparatorFunc (const Glib::RefPtr& model, } void PlacesBrowser::mountChanged (const Glib::RefPtr& m) { - - gdk_threads_enter (); + GThreadLock lock; refreshPlacesList (); - gdk_threads_leave (); } void PlacesBrowser::volumeChanged (const Glib::RefPtr& m) { - - gdk_threads_enter (); + GThreadLock lock; refreshPlacesList (); - gdk_threads_leave (); } void PlacesBrowser::driveChanged (const Glib::RefPtr& m) { - - gdk_threads_enter (); + GThreadLock lock; refreshPlacesList (); - gdk_threads_leave (); } void PlacesBrowser::selectionChanged () { diff --git a/rtgui/previewhandler.cc b/rtgui/previewhandler.cc index 3ce660c14..deec8e2f4 100644 --- a/rtgui/previewhandler.cc +++ b/rtgui/previewhandler.cc @@ -48,10 +48,7 @@ struct iaimgpar { CropParams cp; }; -int setImageThread (void* data) { - - gdk_threads_enter (); - +int setImageUI (void* data) { iaimgpar* iap = (iaimgpar*)data; PreviewHandlerIdleHelper* pih = iap->pih; @@ -61,7 +58,7 @@ int setImageThread (void* data) { else pih->pending--; delete iap; - gdk_threads_leave (); + return 0; } @@ -78,8 +75,6 @@ int setImageThread (void* data) { pih->phandler->previewScale = iap->scale; pih->pending--; delete iap; - - gdk_threads_leave (); return 0; } @@ -94,13 +89,11 @@ void PreviewHandler::setImage (rtengine::IImage8* i, double scale, rtengine::pro iap->scale = scale; iap->cp = cp; - g_idle_add (setImageThread, iap); + g_idle_add (setImageUI, iap); } -int delImageThread (void* data) { - - gdk_threads_enter (); +int delImageUI (void* data) { iaimgpar* iap = (iaimgpar*)data; PreviewHandlerIdleHelper* pih = iap->pih; @@ -111,7 +104,7 @@ int delImageThread (void* data) { else pih->pending--; delete iap; - gdk_threads_leave (); + return 0; } @@ -129,8 +122,6 @@ int delImageThread (void* data) { pih->pending--; delete iap; - gdk_threads_leave (); - return 0; } @@ -142,12 +133,10 @@ void PreviewHandler::delImage (IImage8* i) { iap->image = i; iap->pih = pih; - g_idle_add (delImageThread, iap); + g_idle_add (delImageUI, iap); } -int imageReadyThread (void* data) { - - gdk_threads_enter (); +int imageReadyUI (void* data) { iaimgpar* iap = (iaimgpar*)data; PreviewHandlerIdleHelper* pih = iap->pih; @@ -158,7 +147,7 @@ int imageReadyThread (void* data) { else pih->pending--; delete iap; - gdk_threads_leave (); + return 0; } @@ -170,8 +159,6 @@ int imageReadyThread (void* data) { pih->pending--; delete iap; - gdk_threads_leave (); - return 0; } @@ -181,7 +168,7 @@ void PreviewHandler::imageReady (CropParams cp) { iaimgpar* iap = new iaimgpar; iap->pih = pih; iap->cp = cp; - g_idle_add (imageReadyThread, iap); + g_idle_add (imageReadyUI, iap); } Glib::RefPtr PreviewHandler::getRoughImage (int x, int y, int w, int h, double zoom) { diff --git a/rtgui/previewhandler.h b/rtgui/previewhandler.h index f7ced616e..314c240dc 100644 --- a/rtgui/previewhandler.h +++ b/rtgui/previewhandler.h @@ -38,9 +38,9 @@ struct PreviewHandlerIdleHelper { class PreviewHandler : public rtengine::PreviewImageListener { - friend int setImageThread (void* data); - friend int delImageThread (void* data); - friend int imageReadyThread (void* data); + friend int setImageUI (void* data); + friend int delImageUI (void* data); + friend int imageReadyUI (void* data); protected: rtengine::IImage8* image; diff --git a/rtgui/progressconnector.h b/rtgui/progressconnector.h index 4d2facdf2..54539a4a4 100644 --- a/rtgui/progressconnector.h +++ b/rtgui/progressconnector.h @@ -22,6 +22,7 @@ #include #include #include +#include #undef THREAD_PRIORITY_NORMAL @@ -35,28 +36,24 @@ class PLDBridge : public rtengine::ProgressListener { // ProgressListener interface void setProgress (double p) { - gdk_threads_enter (); + GThreadLock lock; pl->setProgress(p); - gdk_threads_leave (); } void setProgressStr (Glib::ustring str) { - gdk_threads_enter (); + GThreadLock lock; Glib::ustring progrstr; progrstr = M(str); pl->setProgressStr(progrstr); - gdk_threads_leave (); } void setProgressState (bool inProcessing){ - gdk_threads_enter (); + GThreadLock lock; pl->setProgressState(inProcessing); - gdk_threads_leave (); } void error (Glib::ustring descr){ - gdk_threads_enter (); + GThreadLock lock; pl->error(descr); - gdk_threads_leave (); } }; @@ -68,18 +65,18 @@ class ProgressConnector { T retval; Glib::Thread *workThread; - static int emitEndSignal (void* data) { - gdk_threads_enter (); + static int emitEndSignalUI (void* data) { + sigc::signal0* opEnd = (sigc::signal0*) data; int r = opEnd->emit (); delete opEnd; - gdk_threads_leave (); + return r; } void workingThread () { retval = opStart.emit (); - g_idle_add (ProgressConnector::emitEndSignal, new sigc::signal0 (opEnd)); + g_idle_add (ProgressConnector::emitEndSignalUI, new sigc::signal0 (opEnd)); workThread = 0; } diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index b262bdd61..f437de034 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -305,11 +305,8 @@ void ToneCurve::waitForAutoExp () { curveEditorG->set_sensitive (false); } -int aexpcomputed (void* data) { - - gdk_threads_enter(); +int autoExpChangedUI (void* data) { ((ToneCurve*)data)->autoExpComputed_ (); - gdk_threads_leave(); return 0; } @@ -317,7 +314,7 @@ void ToneCurve::autoExpChanged (double expcomp, int black) { nextBlack = black; nextExpcomp = expcomp; - g_idle_add (aexpcomputed, this); + g_idle_add (autoExpChangedUI, this); // Glib::signal_idle().connect (sigc::mem_fun(*this, &ToneCurve::autoExpComputed_)); }