GTK threads cleanup
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#include <multilangmgr.h>
|
#include <multilangmgr.h>
|
||||||
#include <rtengine.h>
|
#include <rtengine.h>
|
||||||
#include <options.h>
|
#include <options.h>
|
||||||
|
#include <guiutils.h>
|
||||||
|
|
||||||
extern Glib::ustring argv0;
|
extern Glib::ustring argv0;
|
||||||
|
|
||||||
@@ -258,10 +259,9 @@ Glib::ustring Adjuster::getTextValue () {
|
|||||||
|
|
||||||
bool Adjuster::notifyListener () {
|
bool Adjuster::notifyListener () {
|
||||||
|
|
||||||
if (adjusterListener!=NULL && !blocked) {
|
if (adjusterListener!=NULL && !blocked) {
|
||||||
gdk_threads_enter();
|
GThreadLock lock;
|
||||||
adjusterListener->adjusterChanged (this, spin->get_value ());
|
adjusterListener->adjusterChanged (this, spin->get_value ());
|
||||||
gdk_threads_leave();
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -271,6 +271,7 @@ void Adjuster::setEnabled (bool enabled) {
|
|||||||
spin->set_sensitive (enabled);
|
spin->set_sensitive (enabled);
|
||||||
slider->set_sensitive (enabled);
|
slider->set_sensitive (enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adjuster::setEditedState (EditedState eState) {
|
void Adjuster::setEditedState (EditedState eState) {
|
||||||
|
|
||||||
if (editedState!=eState) {
|
if (editedState!=eState) {
|
||||||
|
@@ -209,12 +209,10 @@ Glib::ustring BatchQueue::getTempFilenameForParams( const Glib::ustring filename
|
|||||||
return savedParamPath;
|
return savedParamPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
int deleteitem (void* data)
|
int cancelItemUI (void* data)
|
||||||
{
|
{
|
||||||
safe_g_remove( ((BatchQueueEntry*)data)->savedParamsFile );
|
safe_g_remove( ((BatchQueueEntry*)data)->savedParamsFile );
|
||||||
gdk_threads_enter ();
|
|
||||||
delete (BatchQueueEntry*)data;
|
delete (BatchQueueEntry*)data;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,7 +233,7 @@ void BatchQueue::cancelItems (std::vector<ThumbBrowserEntryBase*>* items) {
|
|||||||
rtengine::ProcessingJob::destroy (entry->job);
|
rtengine::ProcessingJob::destroy (entry->job);
|
||||||
if (entry->thumbnail)
|
if (entry->thumbnail)
|
||||||
entry->thumbnail->imageRemovedFromQueue ();
|
entry->thumbnail->imageRemovedFromQueue ();
|
||||||
g_idle_add (deleteitem, entry);
|
g_idle_add (cancelItemUI, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i=0; i<fd.size(); i++)
|
for (int i=0; i<fd.size(); i++)
|
||||||
@@ -351,8 +349,8 @@ void BatchQueue::startProcessing () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
|
rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
|
||||||
|
GThreadLock lock;
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
// save image img
|
// save image img
|
||||||
Glib::ustring fname;
|
Glib::ustring fname;
|
||||||
SaveFormat saveFormat;
|
SaveFormat saveFormat;
|
||||||
@@ -443,7 +441,7 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImage16* img) {
|
|||||||
|
|
||||||
redraw ();
|
redraw ();
|
||||||
notifyListener ();
|
notifyListener ();
|
||||||
gdk_threads_leave ();
|
|
||||||
return processing ? processing->job : NULL;
|
return processing ? processing->job : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,11 +573,8 @@ Glib::ustring BatchQueue::autoCompleteFileName (const Glib::ustring& fileName, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int bqredraw (void* p) {
|
int setProgressUI (void* p) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
((BatchQueue*)p)->redraw();
|
((BatchQueue*)p)->redraw();
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -588,7 +583,7 @@ void BatchQueue::setProgress (double p) {
|
|||||||
if (processing)
|
if (processing)
|
||||||
processing->progress = p;
|
processing->progress = p;
|
||||||
|
|
||||||
g_idle_add (bqredraw, this);
|
g_idle_add (setProgressUI, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionData) {
|
void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionData) {
|
||||||
@@ -609,13 +604,10 @@ struct NLParams {
|
|||||||
int qsize;
|
int qsize;
|
||||||
};
|
};
|
||||||
|
|
||||||
int bqnotifylistener (void* data) {
|
int bqnotifylistenerUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
NLParams* params = (NLParams*)data;
|
NLParams* params = (NLParams*)data;
|
||||||
params->listener->queueSizeChanged (params->qsize);
|
params->listener->queueSizeChanged (params->qsize);
|
||||||
delete params;
|
delete params;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,7 +617,7 @@ void BatchQueue::notifyListener () {
|
|||||||
NLParams* params = new NLParams;
|
NLParams* params = new NLParams;
|
||||||
params->listener = listener;
|
params->listener = listener;
|
||||||
params->qsize = fd.size();
|
params->qsize = fd.size();
|
||||||
g_idle_add (bqnotifylistener, params);
|
g_idle_add (bqnotifylistenerUI, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -109,7 +109,6 @@ struct BQUpdateParam {
|
|||||||
|
|
||||||
int updateImageUIThread (void* data) {
|
int updateImageUIThread (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
BQUpdateParam* params = (BQUpdateParam*)data;
|
BQUpdateParam* params = (BQUpdateParam*)data;
|
||||||
|
|
||||||
BatchQueueEntryIdleHelper* bqih = params->bqih;
|
BatchQueueEntryIdleHelper* bqih = params->bqih;
|
||||||
@@ -122,14 +121,13 @@ int updateImageUIThread (void* data) {
|
|||||||
bqih->pending--;
|
bqih->pending--;
|
||||||
delete [] params->img;
|
delete [] params->img;
|
||||||
delete params;
|
delete params;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bqih->bqentry->_updateImage (params->img, params->w, params->h);
|
bqih->bqentry->_updateImage (params->img, params->w, params->h);
|
||||||
bqih->pending--;
|
bqih->pending--;
|
||||||
|
|
||||||
gdk_threads_leave ();
|
|
||||||
delete params;
|
delete params;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -436,34 +436,28 @@ void Crop::enabledChanged () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int notifylistener (void* data) {
|
int notifyListenerUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
((Crop*)data)->notifyListener ();
|
((Crop*)data)->notifyListener ();
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int refreshspins (void* data) {
|
int refreshSpinsUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
RefreshSpinHelper* rsh = (RefreshSpinHelper*) data;
|
RefreshSpinHelper* rsh = (RefreshSpinHelper*) data;
|
||||||
rsh->crop->refreshSpins (rsh->notify);
|
rsh->crop->refreshSpins (rsh->notify);
|
||||||
delete rsh;
|
delete rsh;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crop::hFlipCrop () {
|
void Crop::hFlipCrop () {
|
||||||
|
|
||||||
nx = maxw - nx - nw;
|
nx = maxw - nx - nw;
|
||||||
g_idle_add (refreshspins, new RefreshSpinHelper (this, false));
|
g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crop::vFlipCrop () {
|
void Crop::vFlipCrop () {
|
||||||
|
|
||||||
ny = maxh - ny - nh;
|
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) {
|
void Crop::rotateCrop (int deg) {
|
||||||
@@ -493,7 +487,7 @@ void Crop::rotateCrop (int deg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lastRotationDeg = deg;
|
lastRotationDeg = deg;
|
||||||
g_idle_add (refreshspins, new RefreshSpinHelper (this, false));
|
g_idle_add (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crop::positionChanged () {
|
void Crop::positionChanged () {
|
||||||
@@ -506,7 +500,7 @@ void Crop::positionChanged () {
|
|||||||
int W = nw;
|
int W = nw;
|
||||||
int H = nh;
|
int H = nh;
|
||||||
cropMoved (X, Y, W, H);
|
cropMoved (X, Y, W, H);
|
||||||
g_idle_add (notifylistener, this);
|
g_idle_add (notifyListenerUI, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crop::widthChanged () {
|
void Crop::widthChanged () {
|
||||||
@@ -518,7 +512,7 @@ void Crop::widthChanged () {
|
|||||||
int W = (int)w->get_value ();
|
int W = (int)w->get_value ();
|
||||||
int H = nh;
|
int H = nh;
|
||||||
cropWidth2Resized (X, Y, W, H);
|
cropWidth2Resized (X, Y, W, H);
|
||||||
g_idle_add (notifylistener, this);
|
g_idle_add (notifyListenerUI, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crop::heightChanged () {
|
void Crop::heightChanged () {
|
||||||
@@ -530,7 +524,7 @@ void Crop::heightChanged () {
|
|||||||
int W = nw;
|
int W = nw;
|
||||||
int H = (int)h->get_value ();
|
int H = (int)h->get_value ();
|
||||||
cropHeight2Resized (X, Y, W, H);
|
cropHeight2Resized (X, Y, W, H);
|
||||||
g_idle_add (notifylistener, this);
|
g_idle_add (notifyListenerUI, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -563,7 +557,7 @@ void Crop::ratioChanged () {
|
|||||||
else
|
else
|
||||||
cropHeight2Resized (X, Y, W, H);
|
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 y;
|
||||||
};
|
};
|
||||||
|
|
||||||
int setdim (void* data) {
|
int sizeChangedUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
setdimparams* params = (setdimparams*)data;
|
setdimparams* params = (setdimparams*)data;
|
||||||
params->crop->setDimensions (params->x, params->y);
|
params->crop->setDimensions (params->x, params->y);
|
||||||
delete params;
|
delete params;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,7 +635,7 @@ void Crop::sizeChanged (int x, int y, int ow, int oh) {
|
|||||||
params->x = x;
|
params->x = x;
|
||||||
params->y = y;
|
params->y = y;
|
||||||
params->crop = this;
|
params->crop = this;
|
||||||
g_idle_add (setdim, params);
|
g_idle_add (sizeChangedUI, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Crop::refreshSpins (bool notify) {
|
bool Crop::refreshSpins (bool notify) {
|
||||||
@@ -697,7 +688,7 @@ void Crop::cropMoved (int &X, int &Y, int &W, int &H) {
|
|||||||
nw = W;
|
nw = W;
|
||||||
nh = H;
|
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));
|
// 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;
|
nw = W;
|
||||||
nh = H;
|
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));
|
// 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;
|
nw = W;
|
||||||
nh = H;
|
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));
|
// 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;
|
nw = W;
|
||||||
nh = H;
|
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));
|
// 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;
|
nw = W;
|
||||||
nh = H;
|
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));
|
// 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);
|
econn.block (true);
|
||||||
enabled->set_active (1);
|
enabled->set_active (1);
|
||||||
econn.block (false);
|
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));
|
// 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;
|
nw = W;
|
||||||
nh = H;
|
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));
|
// Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crop::cropManipReady () {
|
void Crop::cropManipReady () {
|
||||||
|
|
||||||
g_idle_add (notifylistener, this);
|
g_idle_add (notifyListenerUI, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
double Crop::getRatio () {
|
double Crop::getRatio () {
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#undef THREAD_PRIORITY_NORMAL
|
#undef THREAD_PRIORITY_NORMAL
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <guiutils.h>
|
||||||
|
|
||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
|
|
||||||
@@ -157,7 +158,7 @@ void CropHandler::getPosition (int& x, int& y) {
|
|||||||
|
|
||||||
int createpixbufs (void* data) {
|
int createpixbufs (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
GThreadLock lock;
|
||||||
|
|
||||||
CropHandlerIdleHelper* chi = (CropHandlerIdleHelper*) data;
|
CropHandlerIdleHelper* chi = (CropHandlerIdleHelper*) data;
|
||||||
if (chi->destroyed) {
|
if (chi->destroyed) {
|
||||||
@@ -165,7 +166,7 @@ int createpixbufs (void* data) {
|
|||||||
delete chi;
|
delete chi;
|
||||||
else
|
else
|
||||||
chi->pending--;
|
chi->pending--;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +181,6 @@ int createpixbufs (void* data) {
|
|||||||
delete [] ch->cropimgtrue;
|
delete [] ch->cropimgtrue;
|
||||||
ch->cropimgtrue = NULL;
|
ch->cropimgtrue = NULL;
|
||||||
ch->cimg.unlock ();
|
ch->cimg.unlock ();
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +221,6 @@ int createpixbufs (void* data) {
|
|||||||
|
|
||||||
chi->pending--;
|
chi->pending--;
|
||||||
|
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#include <safegtk.h>
|
#include <safegtk.h>
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <guiutils.h>
|
||||||
|
|
||||||
#define CHECKTIME 5000
|
#define CHECKTIME 5000
|
||||||
extern Glib::ustring argv0;
|
extern Glib::ustring argv0;
|
||||||
@@ -142,7 +143,7 @@ void DirBrowser::updateVolumes () {
|
|||||||
|
|
||||||
int nvolumes = GetLogicalDrives ();
|
int nvolumes = GetLogicalDrives ();
|
||||||
if (nvolumes!=volumes) {
|
if (nvolumes!=volumes) {
|
||||||
gdk_threads_enter();
|
GThreadLock lock;
|
||||||
|
|
||||||
for (int i=0; i<32; i++)
|
for (int i=0; i<32; i++)
|
||||||
if (((volumes >> i) & 1) && !((nvolumes >> i) & 1)) { // volume i has been deleted
|
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))
|
else if (!((volumes >> i) & 1) && ((nvolumes >> i) & 1))
|
||||||
addRoot ('A'+i); // volume i has been added
|
addRoot ('A'+i); // volume i has been added
|
||||||
volumes = nvolumes;
|
volumes = nvolumes;
|
||||||
|
|
||||||
gdk_threads_leave();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int _updateVolumes (void* br) {
|
int updateVolumesUI (void* br) {
|
||||||
|
|
||||||
((DirBrowser*)br)->updateVolumes ();
|
((DirBrowser*)br)->updateVolumes ();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
int _updateDirTree (void* br) {
|
int updateDirTreeUI (void* br) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
((DirBrowser*)br)->updateDirTreeRoot ();
|
((DirBrowser*)br)->updateDirTreeRoot ();
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirBrowser::winDirChanged () {
|
void DirBrowser::winDirChanged () {
|
||||||
|
|
||||||
g_idle_add (_updateDirTree, this);
|
g_idle_add (updateDirTreeUI, this);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -187,7 +182,7 @@ void DirBrowser::fillRoot () {
|
|||||||
if ((volumes >> i) & 1)
|
if ((volumes >> i) & 1)
|
||||||
addRoot ('A'+i);
|
addRoot ('A'+i);
|
||||||
// since sigc++ is not thread safe, we have to use the glib function
|
// 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
|
#else
|
||||||
Gtk::TreeModel::Row rootRow = *(dirTreeModel->append());
|
Gtk::TreeModel::Row rootRow = *(dirTreeModel->append());
|
||||||
rootRow[dtColumns.filename] = "/";
|
rootRow[dtColumns.filename] = "/";
|
||||||
|
@@ -502,7 +502,6 @@ struct spsparams {
|
|||||||
|
|
||||||
int setProgressStateUIThread (void* data) {
|
int setProgressStateUIThread (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
spsparams* p = (spsparams*)data;
|
spsparams* p = (spsparams*)data;
|
||||||
|
|
||||||
if (p->epih->destroyed) {
|
if (p->epih->destroyed) {
|
||||||
@@ -511,14 +510,14 @@ int setProgressStateUIThread (void* data) {
|
|||||||
else
|
else
|
||||||
p->epih->pending--;
|
p->epih->pending--;
|
||||||
delete p;
|
delete p;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->epih->epanel->refreshProcessingState (p->inProcessing);
|
p->epih->epanel->refreshProcessingState (p->inProcessing);
|
||||||
p->epih->pending--;
|
p->epih->pending--;
|
||||||
delete p;
|
delete p;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -637,9 +636,7 @@ void EditorPanel::displayError (Glib::ustring descr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int disperror (void* data) {
|
int disperrorUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
errparams* p = (errparams*)data;
|
errparams* p = (errparams*)data;
|
||||||
|
|
||||||
if (p->epih->destroyed) {
|
if (p->epih->destroyed) {
|
||||||
@@ -648,14 +645,14 @@ int disperror (void* data) {
|
|||||||
else
|
else
|
||||||
p->epih->pending--;
|
p->epih->pending--;
|
||||||
delete p;
|
delete p;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->epih->epanel->displayError (p->descr);
|
p->epih->epanel->displayError (p->descr);
|
||||||
p->epih->pending--;
|
p->epih->pending--;
|
||||||
delete p;
|
delete p;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,7 +662,7 @@ void EditorPanel::error (Glib::ustring descr) {
|
|||||||
errparams* p = new errparams;
|
errparams* p = new errparams;
|
||||||
p->descr = descr;
|
p->descr = descr;
|
||||||
p->epih = epih;
|
p->epih = epih;
|
||||||
g_idle_add (disperror, p);
|
g_idle_add (disperrorUI, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPanel::info_toggled () {
|
void EditorPanel::info_toggled () {
|
||||||
|
@@ -313,8 +313,6 @@ int AddEntryUIThread (void* data) {
|
|||||||
addparams* ap = (addparams*) data;
|
addparams* ap = (addparams*) data;
|
||||||
FileBrowserIdleHelper* fbih = ap->fbih;
|
FileBrowserIdleHelper* fbih = ap->fbih;
|
||||||
|
|
||||||
gdk_threads_enter();
|
|
||||||
|
|
||||||
if (fbih->destroyed) {
|
if (fbih->destroyed) {
|
||||||
if (fbih->pending == 1)
|
if (fbih->pending == 1)
|
||||||
delete fbih;
|
delete fbih;
|
||||||
@@ -322,14 +320,14 @@ int AddEntryUIThread (void* data) {
|
|||||||
fbih->pending--;
|
fbih->pending--;
|
||||||
delete ap->entry;
|
delete ap->entry;
|
||||||
delete ap;
|
delete ap;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ap->fbih->fbrowser->addEntry_ (ap->entry);
|
ap->fbih->fbrowser->addEntry_ (ap->entry);
|
||||||
delete ap;
|
delete ap;
|
||||||
fbih->pending--;
|
fbih->pending--;
|
||||||
gdk_threads_leave();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -158,13 +158,11 @@ struct tiupdate {
|
|||||||
rtengine::procparams::CropParams cropParams;
|
rtengine::procparams::CropParams cropParams;
|
||||||
};
|
};
|
||||||
|
|
||||||
int fbeupdate (void* data) {
|
int updateImageUI (void* data) {
|
||||||
|
|
||||||
tiupdate* params = (tiupdate*)data;
|
tiupdate* params = (tiupdate*)data;
|
||||||
FileBrowserEntryIdleHelper* feih = params->feih;
|
FileBrowserEntryIdleHelper* feih = params->feih;
|
||||||
|
|
||||||
GThreadLock lock;
|
|
||||||
|
|
||||||
if (feih->destroyed) {
|
if (feih->destroyed) {
|
||||||
if (feih->pending == 1)
|
if (feih->pending == 1)
|
||||||
delete feih;
|
delete feih;
|
||||||
@@ -204,7 +202,7 @@ void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengi
|
|||||||
param->img = img;
|
param->img = img;
|
||||||
param->scale = scale;
|
param->scale = scale;
|
||||||
param->cropParams = cropParams;
|
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) {
|
void FileBrowserEntry::_updateImage (rtengine::IImage8* img, double s, rtengine::procparams::CropParams cropParams) {
|
||||||
|
@@ -550,19 +550,18 @@ void FileCatalog::_refreshProgressBar () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int refreshpb (void* data) {
|
int refreshProgressBarUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
((FileCatalog*)data)->_refreshProgressBar ();
|
((FileCatalog*)data)->_refreshProgressBar ();
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileCatalog::previewReady (int dir_id, FileBrowserEntry* fdn) {
|
void FileCatalog::previewReady (int dir_id, FileBrowserEntry* fdn) {
|
||||||
GThreadLock lock;
|
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 )
|
if ( dir_id != selectedDirectoryId )
|
||||||
{
|
{
|
||||||
@@ -597,18 +596,18 @@ void FileCatalog::_previewReady (int dir_id, FileBrowserEntry* fdn) {
|
|||||||
dirEFS.cameras.insert (cfs->camera);
|
dirEFS.cameras.insert (cfs->camera);
|
||||||
dirEFS.lenses.insert (cfs->lens);
|
dirEFS.lenses.insert (cfs->lens);
|
||||||
previewsLoaded++;
|
previewsLoaded++;
|
||||||
g_idle_add (refreshpb, this);
|
|
||||||
|
g_idle_add (refreshProgressBarUI, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
int prevfinished (void* data) {
|
int prevfinished (void* data) {
|
||||||
|
GThreadLock lock;
|
||||||
gdk_threads_enter();
|
((FileCatalog*)data)->previewsFinishedUI ();
|
||||||
((FileCatalog*)data)->_previewsFinished ();
|
|
||||||
gdk_threads_leave();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileCatalog::_previewsFinished () {
|
// Called within GTK UI thread
|
||||||
|
void FileCatalog::previewsFinishedUI () {
|
||||||
|
|
||||||
redrawAll ();
|
redrawAll ();
|
||||||
previewsToLoad = 0;
|
previewsToLoad = 0;
|
||||||
@@ -631,8 +630,6 @@ void FileCatalog::_previewsFinished () {
|
|||||||
|
|
||||||
void FileCatalog::previewsFinished (int dir_id) {
|
void FileCatalog::previewsFinished (int dir_id) {
|
||||||
|
|
||||||
GThreadLock lock;
|
|
||||||
|
|
||||||
if ( dir_id != selectedDirectoryId )
|
if ( dir_id != selectedDirectoryId )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -684,13 +681,11 @@ struct FCOIParams {
|
|||||||
std::vector<Thumbnail*> tmb;
|
std::vector<Thumbnail*> tmb;
|
||||||
};
|
};
|
||||||
|
|
||||||
int fcopenimg (void* p) {
|
int openRequestedUI (void* p) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
FCOIParams* params = (FCOIParams*)p;
|
FCOIParams* params = (FCOIParams*)p;
|
||||||
params->catalog->_openImage (params->tmb);
|
params->catalog->_openImage (params->tmb);
|
||||||
delete params;
|
delete params;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,7 +696,7 @@ void FileCatalog::openRequested (std::vector<Thumbnail*> tmb) {
|
|||||||
params->tmb = tmb;
|
params->tmb = tmb;
|
||||||
for (size_t i=0; i<tmb.size(); i++)
|
for (size_t i=0; i<tmb.size(); i++)
|
||||||
tmb[i]->increaseRef ();
|
tmb[i]->increaseRef ();
|
||||||
g_idle_add (fcopenimg, params);
|
g_idle_add (openRequestedUI, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileCatalog::deleteRequested (std::vector<FileBrowserEntry*> tbe, bool inclBatchProcessed) {
|
void FileCatalog::deleteRequested (std::vector<FileBrowserEntry*> tbe, bool inclBatchProcessed) {
|
||||||
@@ -1275,10 +1270,7 @@ void FileCatalog::reparseDirectory () {
|
|||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int winDirChangedUITread (void* cat) {
|
int winDirChangedUITread (void* cat) {
|
||||||
gdk_threads_enter ();
|
|
||||||
((FileCatalog*)cat)->reparseDirectory ();
|
((FileCatalog*)cat)->reparseDirectory ();
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1331,13 +1323,13 @@ void FileCatalog::addAndOpenFile (const Glib::ustring& fname) {
|
|||||||
Thumbnail* tmb = cacheMgr->getEntry (file->get_parse_name());
|
Thumbnail* tmb = cacheMgr->getEntry (file->get_parse_name());
|
||||||
if (tmb) {
|
if (tmb) {
|
||||||
FileBrowserEntry* entry = new FileBrowserEntry (tmb, file->get_parse_name());
|
FileBrowserEntry* entry = new FileBrowserEntry (tmb, file->get_parse_name());
|
||||||
_previewReady (selectedDirectoryId,entry);
|
previewReadyUI (selectedDirectoryId,entry);
|
||||||
// open the file
|
// open the file
|
||||||
FCOIParams* params = new FCOIParams;
|
FCOIParams* params = new FCOIParams;
|
||||||
params->catalog = this;
|
params->catalog = this;
|
||||||
params->tmb.push_back (tmb);
|
params->tmb.push_back (tmb);
|
||||||
tmb->increaseRef ();
|
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);
|
void refreshEditedState (const std::set<Glib::ustring>& efiles);
|
||||||
|
|
||||||
// previewloaderlistener interface
|
// previewloaderlistener interface
|
||||||
void _previewReady (int dir_id, FileBrowserEntry* fdn);
|
void previewReadyUI (int dir_id, FileBrowserEntry* fdn);
|
||||||
void previewReady (int dir_id, FileBrowserEntry* fdn);
|
void previewReady (int dir_id, FileBrowserEntry* fdn);
|
||||||
void previewsFinished (int dir_id);
|
void previewsFinished (int dir_id);
|
||||||
void _previewsFinished ();
|
void previewsFinishedUI ();
|
||||||
void _refreshProgressBar ();
|
void _refreshProgressBar ();
|
||||||
|
|
||||||
// filterpanel interface
|
// filterpanel interface
|
||||||
|
@@ -21,12 +21,8 @@
|
|||||||
#include <rtwindow.h>
|
#include <rtwindow.h>
|
||||||
#include <safegtk.h>
|
#include <safegtk.h>
|
||||||
|
|
||||||
int fbinit (void* data) {
|
int FilePanelInitUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
((FilePanel*)data)->init ();
|
((FilePanel*)data)->init ();
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +108,7 @@ FilePanel::FilePanel () : parent(NULL) {
|
|||||||
fileCatalog->setFileSelectionChangeListener (tpc);
|
fileCatalog->setFileSelectionChangeListener (tpc);
|
||||||
|
|
||||||
fileCatalog->setFileSelectionListener (this);
|
fileCatalog->setFileSelectionListener (this);
|
||||||
g_idle_add (fbinit, this);
|
g_idle_add (FilePanelInitUI, this);
|
||||||
|
|
||||||
show_all ();
|
show_all ();
|
||||||
}
|
}
|
||||||
|
@@ -112,9 +112,7 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw) {
|
|||||||
renderHistogram ();
|
renderHistogram ();
|
||||||
}
|
}
|
||||||
|
|
||||||
int histupdate (void* data) {
|
int histupdateUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
|
|
||||||
HistogramAreaIdleHelper* haih = (HistogramAreaIdleHelper*)data;
|
HistogramAreaIdleHelper* haih = (HistogramAreaIdleHelper*)data;
|
||||||
|
|
||||||
@@ -123,7 +121,7 @@ int histupdate (void* data) {
|
|||||||
delete haih;
|
delete haih;
|
||||||
else
|
else
|
||||||
haih->pending--;
|
haih->pending--;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +129,7 @@ int histupdate (void* data) {
|
|||||||
haih->harea->queue_draw ();
|
haih->harea->queue_draw ();
|
||||||
|
|
||||||
haih->pending--;
|
haih->pending--;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,7 +146,7 @@ void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu
|
|||||||
valid = false;
|
valid = false;
|
||||||
|
|
||||||
haih->pending++;
|
haih->pending++;
|
||||||
g_idle_add (histupdate, haih);
|
g_idle_add (histupdateUI, haih);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistogramArea::renderHistogram () {
|
void HistogramArea::renderHistogram () {
|
||||||
|
@@ -701,9 +701,7 @@ void MyDiagonalCurve::setActiveParam (int ac) {
|
|||||||
queue_draw ();
|
queue_draw ();
|
||||||
}
|
}
|
||||||
|
|
||||||
int diagonalmchistupdate (void* data) {
|
int diagonalmchistupdateUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
|
|
||||||
MyCurveIdleHelper* mcih = (MyCurveIdleHelper*)data;
|
MyCurveIdleHelper* mcih = (MyCurveIdleHelper*)data;
|
||||||
|
|
||||||
@@ -712,7 +710,7 @@ int diagonalmchistupdate (void* data) {
|
|||||||
delete mcih;
|
delete mcih;
|
||||||
else
|
else
|
||||||
mcih->pending--;
|
mcih->pending--;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -720,7 +718,7 @@ int diagonalmchistupdate (void* data) {
|
|||||||
mcih->myCurve->queue_draw ();
|
mcih->myCurve->queue_draw ();
|
||||||
|
|
||||||
mcih->pending--;
|
mcih->pending--;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -736,7 +734,7 @@ void MyDiagonalCurve::updateBackgroundHistogram (LUTu & hist) {
|
|||||||
bghistvalid = false;
|
bghistvalid = false;
|
||||||
|
|
||||||
mcih->pending++;
|
mcih->pending++;
|
||||||
g_idle_add (diagonalmchistupdate, mcih);
|
g_idle_add (diagonalmchistupdateUI, mcih);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1279,43 +1279,6 @@ void MyFlatCurve::setType (FlatCurveType t) {
|
|||||||
pixmap.clear ();
|
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() {
|
void MyFlatCurve::reset() {
|
||||||
innerWidth = get_allocation().get_width() - RADIUS * 2;
|
innerWidth = get_allocation().get_width() - RADIUS * 2;
|
||||||
innerHeight = get_allocation().get_height() - RADIUS * 2;
|
innerHeight = get_allocation().get_height() - RADIUS * 2;
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include <options.h>
|
#include <options.h>
|
||||||
#include <toolpanel.h>
|
#include <toolpanel.h>
|
||||||
#include <safegtk.h>
|
#include <safegtk.h>
|
||||||
|
#include <guiutils.h>
|
||||||
|
|
||||||
PlacesBrowser::PlacesBrowser () : listener (NULL) {
|
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) {
|
void PlacesBrowser::mountChanged (const Glib::RefPtr<Gio::Mount>& m) {
|
||||||
|
GThreadLock lock;
|
||||||
gdk_threads_enter ();
|
|
||||||
refreshPlacesList ();
|
refreshPlacesList ();
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlacesBrowser::volumeChanged (const Glib::RefPtr<Gio::Volume>& m) {
|
void PlacesBrowser::volumeChanged (const Glib::RefPtr<Gio::Volume>& m) {
|
||||||
|
GThreadLock lock;
|
||||||
gdk_threads_enter ();
|
|
||||||
refreshPlacesList ();
|
refreshPlacesList ();
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlacesBrowser::driveChanged (const Glib::RefPtr<Gio::Drive>& m) {
|
void PlacesBrowser::driveChanged (const Glib::RefPtr<Gio::Drive>& m) {
|
||||||
|
GThreadLock lock;
|
||||||
gdk_threads_enter ();
|
|
||||||
refreshPlacesList ();
|
refreshPlacesList ();
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlacesBrowser::selectionChanged () {
|
void PlacesBrowser::selectionChanged () {
|
||||||
|
@@ -48,10 +48,7 @@ struct iaimgpar {
|
|||||||
CropParams cp;
|
CropParams cp;
|
||||||
};
|
};
|
||||||
|
|
||||||
int setImageThread (void* data) {
|
int setImageUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
|
|
||||||
iaimgpar* iap = (iaimgpar*)data;
|
iaimgpar* iap = (iaimgpar*)data;
|
||||||
PreviewHandlerIdleHelper* pih = iap->pih;
|
PreviewHandlerIdleHelper* pih = iap->pih;
|
||||||
|
|
||||||
@@ -61,7 +58,7 @@ int setImageThread (void* data) {
|
|||||||
else
|
else
|
||||||
pih->pending--;
|
pih->pending--;
|
||||||
delete iap;
|
delete iap;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,8 +75,6 @@ int setImageThread (void* data) {
|
|||||||
pih->phandler->previewScale = iap->scale;
|
pih->phandler->previewScale = iap->scale;
|
||||||
pih->pending--;
|
pih->pending--;
|
||||||
delete iap;
|
delete iap;
|
||||||
|
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -94,13 +89,11 @@ void PreviewHandler::setImage (rtengine::IImage8* i, double scale, rtengine::pro
|
|||||||
iap->scale = scale;
|
iap->scale = scale;
|
||||||
iap->cp = cp;
|
iap->cp = cp;
|
||||||
|
|
||||||
g_idle_add (setImageThread, iap);
|
g_idle_add (setImageUI, iap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int delImageThread (void* data) {
|
int delImageUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
|
|
||||||
iaimgpar* iap = (iaimgpar*)data;
|
iaimgpar* iap = (iaimgpar*)data;
|
||||||
PreviewHandlerIdleHelper* pih = iap->pih;
|
PreviewHandlerIdleHelper* pih = iap->pih;
|
||||||
@@ -111,7 +104,7 @@ int delImageThread (void* data) {
|
|||||||
else
|
else
|
||||||
pih->pending--;
|
pih->pending--;
|
||||||
delete iap;
|
delete iap;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,8 +122,6 @@ int delImageThread (void* data) {
|
|||||||
pih->pending--;
|
pih->pending--;
|
||||||
delete iap;
|
delete iap;
|
||||||
|
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,12 +133,10 @@ void PreviewHandler::delImage (IImage8* i) {
|
|||||||
iap->image = i;
|
iap->image = i;
|
||||||
iap->pih = pih;
|
iap->pih = pih;
|
||||||
|
|
||||||
g_idle_add (delImageThread, iap);
|
g_idle_add (delImageUI, iap);
|
||||||
}
|
}
|
||||||
|
|
||||||
int imageReadyThread (void* data) {
|
int imageReadyUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
|
|
||||||
iaimgpar* iap = (iaimgpar*)data;
|
iaimgpar* iap = (iaimgpar*)data;
|
||||||
PreviewHandlerIdleHelper* pih = iap->pih;
|
PreviewHandlerIdleHelper* pih = iap->pih;
|
||||||
@@ -158,7 +147,7 @@ int imageReadyThread (void* data) {
|
|||||||
else
|
else
|
||||||
pih->pending--;
|
pih->pending--;
|
||||||
delete iap;
|
delete iap;
|
||||||
gdk_threads_leave ();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +159,6 @@ int imageReadyThread (void* data) {
|
|||||||
pih->pending--;
|
pih->pending--;
|
||||||
delete iap;
|
delete iap;
|
||||||
|
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,7 +168,7 @@ void PreviewHandler::imageReady (CropParams cp) {
|
|||||||
iaimgpar* iap = new iaimgpar;
|
iaimgpar* iap = new iaimgpar;
|
||||||
iap->pih = pih;
|
iap->pih = pih;
|
||||||
iap->cp = cp;
|
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) {
|
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 {
|
class PreviewHandler : public rtengine::PreviewImageListener {
|
||||||
|
|
||||||
friend int setImageThread (void* data);
|
friend int setImageUI (void* data);
|
||||||
friend int delImageThread (void* data);
|
friend int delImageUI (void* data);
|
||||||
friend int imageReadyThread (void* data);
|
friend int imageReadyUI (void* data);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
rtengine::IImage8* image;
|
rtengine::IImage8* image;
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#include <sigc++/sigc++.h>
|
#include <sigc++/sigc++.h>
|
||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
#include <rtengine.h>
|
#include <rtengine.h>
|
||||||
|
#include <guiutils.h>
|
||||||
|
|
||||||
#undef THREAD_PRIORITY_NORMAL
|
#undef THREAD_PRIORITY_NORMAL
|
||||||
|
|
||||||
@@ -35,28 +36,24 @@ class PLDBridge : public rtengine::ProgressListener {
|
|||||||
|
|
||||||
// ProgressListener interface
|
// ProgressListener interface
|
||||||
void setProgress (double p) {
|
void setProgress (double p) {
|
||||||
gdk_threads_enter ();
|
GThreadLock lock;
|
||||||
pl->setProgress(p);
|
pl->setProgress(p);
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
void setProgressStr (Glib::ustring str) {
|
void setProgressStr (Glib::ustring str) {
|
||||||
gdk_threads_enter ();
|
GThreadLock lock;
|
||||||
Glib::ustring progrstr;
|
Glib::ustring progrstr;
|
||||||
progrstr = M(str);
|
progrstr = M(str);
|
||||||
pl->setProgressStr(progrstr);
|
pl->setProgressStr(progrstr);
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setProgressState (bool inProcessing){
|
void setProgressState (bool inProcessing){
|
||||||
gdk_threads_enter ();
|
GThreadLock lock;
|
||||||
pl->setProgressState(inProcessing);
|
pl->setProgressState(inProcessing);
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void error (Glib::ustring descr){
|
void error (Glib::ustring descr){
|
||||||
gdk_threads_enter ();
|
GThreadLock lock;
|
||||||
pl->error(descr);
|
pl->error(descr);
|
||||||
gdk_threads_leave ();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -68,18 +65,18 @@ class ProgressConnector {
|
|||||||
T retval;
|
T retval;
|
||||||
Glib::Thread *workThread;
|
Glib::Thread *workThread;
|
||||||
|
|
||||||
static int emitEndSignal (void* data) {
|
static int emitEndSignalUI (void* data) {
|
||||||
gdk_threads_enter ();
|
|
||||||
sigc::signal0<bool>* opEnd = (sigc::signal0<bool>*) data;
|
sigc::signal0<bool>* opEnd = (sigc::signal0<bool>*) data;
|
||||||
int r = opEnd->emit ();
|
int r = opEnd->emit ();
|
||||||
delete opEnd;
|
delete opEnd;
|
||||||
gdk_threads_leave ();
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void workingThread () {
|
void workingThread () {
|
||||||
retval = opStart.emit ();
|
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;
|
workThread = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -305,11 +305,8 @@ void ToneCurve::waitForAutoExp () {
|
|||||||
curveEditorG->set_sensitive (false);
|
curveEditorG->set_sensitive (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
int aexpcomputed (void* data) {
|
int autoExpChangedUI (void* data) {
|
||||||
|
|
||||||
gdk_threads_enter();
|
|
||||||
((ToneCurve*)data)->autoExpComputed_ ();
|
((ToneCurve*)data)->autoExpComputed_ ();
|
||||||
gdk_threads_leave();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,7 +314,7 @@ void ToneCurve::autoExpChanged (double expcomp, int black) {
|
|||||||
|
|
||||||
nextBlack = black;
|
nextBlack = black;
|
||||||
nextExpcomp = expcomp;
|
nextExpcomp = expcomp;
|
||||||
g_idle_add (aexpcomputed, this);
|
g_idle_add (autoExpChangedUI, this);
|
||||||
|
|
||||||
// Glib::signal_idle().connect (sigc::mem_fun(*this, &ToneCurve::autoExpComputed_));
|
// Glib::signal_idle().connect (sigc::mem_fun(*this, &ToneCurve::autoExpComputed_));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user