GTK threads cleanup

This commit is contained in:
Oliver Duis
2011-07-04 08:11:34 +02:00
parent a24cba937d
commit 44d1d18b3c
20 changed files with 108 additions and 216 deletions

View File

@@ -22,6 +22,7 @@
#include <multilangmgr.h>
#include <rtengine.h>
#include <options.h>
#include <guiutils.h>
extern Glib::ustring argv0;
@@ -259,9 +260,8 @@ Glib::ustring Adjuster::getTextValue () {
bool Adjuster::notifyListener () {
if (adjusterListener!=NULL && !blocked) {
gdk_threads_enter();
GThreadLock lock;
adjusterListener->adjusterChanged (this, spin->get_value ());
gdk_threads_leave();
}
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) {

View File

@@ -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 ();
delete (BatchQueueEntry*)data;
gdk_threads_leave ();
return 0;
}
@@ -235,7 +233,7 @@ void BatchQueue::cancelItems (std::vector<ThumbBrowserEntryBase*>* 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; i<fd.size(); i++)
@@ -351,8 +349,8 @@ void BatchQueue::startProcessing () {
}
rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
GThreadLock lock;
gdk_threads_enter ();
// save image img
Glib::ustring fname;
SaveFormat saveFormat;
@@ -443,7 +441,7 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
redraw ();
notifyListener ();
gdk_threads_leave ();
return processing ? processing->job : 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);
}
}

View File

@@ -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;
}

View File

@@ -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 () {

View File

@@ -20,6 +20,7 @@
#undef THREAD_PRIORITY_NORMAL
#include <cstring>
#include <guiutils.h>
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;
}

View File

@@ -25,6 +25,7 @@
#include <safegtk.h>
#include <cstring>
#include <guiutils.h>
#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] = "/";

View File

@@ -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 () {

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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<Thumbnail*> 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<Thumbnail*> tmb) {
params->tmb = tmb;
for (size_t i=0; i<tmb.size(); i++)
tmb[i]->increaseRef ();
g_idle_add (fcopenimg, params);
g_idle_add (openRequestedUI, params);
}
void FileCatalog::deleteRequested (std::vector<FileBrowserEntry*> 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);
}
}
}

View File

@@ -163,10 +163,10 @@ class FileCatalog : public Gtk::VBox,
void refreshEditedState (const std::set<Glib::ustring>& 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

View File

@@ -21,12 +21,8 @@
#include <rtwindow.h>
#include <safegtk.h>
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 ();
}

View File

@@ -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 () {

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -20,6 +20,7 @@
#include <options.h>
#include <toolpanel.h>
#include <safegtk.h>
#include <guiutils.h>
PlacesBrowser::PlacesBrowser () : listener (NULL) {
@@ -211,24 +212,18 @@ bool PlacesBrowser::rowSeparatorFunc (const Glib::RefPtr<Gtk::TreeModel>& model,
}
void PlacesBrowser::mountChanged (const Glib::RefPtr<Gio::Mount>& m) {
gdk_threads_enter ();
GThreadLock lock;
refreshPlacesList ();
gdk_threads_leave ();
}
void PlacesBrowser::volumeChanged (const Glib::RefPtr<Gio::Volume>& m) {
gdk_threads_enter ();
GThreadLock lock;
refreshPlacesList ();
gdk_threads_leave ();
}
void PlacesBrowser::driveChanged (const Glib::RefPtr<Gio::Drive>& m) {
gdk_threads_enter ();
GThreadLock lock;
refreshPlacesList ();
gdk_threads_leave ();
}
void PlacesBrowser::selectionChanged () {

View File

@@ -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;
}
@@ -79,8 +76,6 @@ int setImageThread (void* data) {
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<Gdk::Pixbuf> PreviewHandler::getRoughImage (int x, int y, int w, int h, double zoom) {

View File

@@ -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;

View File

@@ -22,6 +22,7 @@
#include <sigc++/sigc++.h>
#include <gtkmm.h>
#include <rtengine.h>
#include <guiutils.h>
#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<bool>* opEnd = (sigc::signal0<bool>*) data;
int r = opEnd->emit ();
delete opEnd;
gdk_threads_leave ();
return r;
}
void workingThread () {
retval = opStart.emit ();
g_idle_add (ProgressConnector<T>::emitEndSignal, new sigc::signal0<bool> (opEnd));
g_idle_add (ProgressConnector<T>::emitEndSignalUI, new sigc::signal0<bool> (opEnd));
workThread = 0;
}

View File

@@ -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_));
}