Omit GThreadLock
and use IdleRegister
in WhiteBalance
(fixes #4545)
This commit is contained in:
@@ -349,6 +349,10 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
|
|||||||
spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) );
|
spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WhiteBalance::~WhiteBalance()
|
||||||
|
{
|
||||||
|
idle_register.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
void WhiteBalance::enabledChanged()
|
void WhiteBalance::enabledChanged()
|
||||||
{
|
{
|
||||||
@@ -395,7 +399,7 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval)
|
|||||||
methconn.block(true);
|
methconn.block(true);
|
||||||
opt = setActiveMethod(wbCustom.second.GUILabel);
|
opt = setActiveMethod(wbCustom.second.GUILabel);
|
||||||
tempBias->set_sensitive(false);
|
tempBias->set_sensitive(false);
|
||||||
|
|
||||||
cache_customWB (tVal, gVal);
|
cache_customWB (tVal, gVal);
|
||||||
if (a != equal) {
|
if (a != equal) {
|
||||||
cache_customEqual(eVal);
|
cache_customEqual(eVal);
|
||||||
@@ -632,7 +636,7 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
// the equalizer's value is restored for the AutoWB
|
// the equalizer's value is restored for the AutoWB
|
||||||
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
|
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
|
||||||
tempBias->setValue (tempBias->getAddMode() ? 0.0 : pp->wb.tempBias);
|
tempBias->setValue (tempBias->getAddMode() ? 0.0 : pp->wb.tempBias);
|
||||||
|
|
||||||
// set default values first if in ADD mode, otherwise keep the current ones
|
// set default values first if in ADD mode, otherwise keep the current ones
|
||||||
if (temp->getAddMode() ) {
|
if (temp->getAddMode() ) {
|
||||||
temp->setValue (0.0);
|
temp->setValue (0.0);
|
||||||
@@ -718,7 +722,7 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited)
|
|||||||
|
|
||||||
void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited)
|
void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited)
|
||||||
{
|
{
|
||||||
|
|
||||||
equal->setDefault (defParams->wb.equal);
|
equal->setDefault (defParams->wb.equal);
|
||||||
tempBias->setDefault (defParams->wb.tempBias);
|
tempBias->setDefault (defParams->wb.tempBias);
|
||||||
|
|
||||||
@@ -895,12 +899,28 @@ inline Gtk::TreeRow WhiteBalance::getActiveMethod ()
|
|||||||
|
|
||||||
void WhiteBalance::WBChanged(double temperature, double greenVal)
|
void WhiteBalance::WBChanged(double temperature, double greenVal)
|
||||||
{
|
{
|
||||||
GThreadLock lock;
|
struct Data {
|
||||||
disableListener();
|
WhiteBalance* self;
|
||||||
setEnabled(true);
|
double temperature;
|
||||||
temp->setValue(temperature);
|
double green_val;
|
||||||
green->setValue(greenVal);
|
};
|
||||||
temp->setDefault(temperature);
|
|
||||||
green->setDefault(greenVal);
|
const auto func = [](gpointer data) -> gboolean {
|
||||||
enableListener();
|
WhiteBalance* const self = static_cast<WhiteBalance*>(static_cast<Data*>(data)->self);
|
||||||
|
const double temperature = static_cast<Data*>(data)->temperature;
|
||||||
|
const double green_val = static_cast<Data*>(data)->green_val;
|
||||||
|
delete static_cast<Data*>(data);
|
||||||
|
|
||||||
|
self->disableListener();
|
||||||
|
self->setEnabled(true);
|
||||||
|
self->temp->setValue(temperature);
|
||||||
|
self->green->setValue(green_val);
|
||||||
|
self->temp->setDefault(temperature);
|
||||||
|
self->green->setDefault(green_val);
|
||||||
|
self->enableListener();
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
};
|
||||||
|
|
||||||
|
idle_register.add(func, new Data{this, temperature, greenVal});
|
||||||
}
|
}
|
||||||
|
@@ -77,6 +77,9 @@ protected:
|
|||||||
int custom_temp;
|
int custom_temp;
|
||||||
double custom_green;
|
double custom_green;
|
||||||
double custom_equal;
|
double custom_equal;
|
||||||
|
|
||||||
|
IdleRegister idle_register;
|
||||||
|
|
||||||
void cache_customWB (int temp, double green); //cache custom WB setting to allow its recall
|
void cache_customWB (int temp, double green); //cache custom WB setting to allow its recall
|
||||||
void cache_customTemp (int temp); //cache Temperature only to allow its recall
|
void cache_customTemp (int temp); //cache Temperature only to allow its recall
|
||||||
void cache_customGreen (double green); //cache Green only to allow its recall
|
void cache_customGreen (double green); //cache Green only to allow its recall
|
||||||
@@ -92,7 +95,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
WhiteBalance ();
|
WhiteBalance ();
|
||||||
~WhiteBalance () {};
|
~WhiteBalance ();
|
||||||
|
|
||||||
static void init ();
|
static void init ();
|
||||||
static void cleanup ();
|
static void cleanup ();
|
||||||
|
Reference in New Issue
Block a user