GTK threads cleanup
This commit is contained in:
@@ -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) {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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 () {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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] = "/";
|
||||
|
@@ -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 () {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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 ();
|
||||
}
|
||||
|
@@ -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 () {
|
||||
|
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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 () {
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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_));
|
||||
}
|
||||
|
Reference in New Issue
Block a user