修复初始化条件默认值BUG

This commit is contained in:
gb 2023-12-28 16:40:56 +08:00
parent f08f2ac612
commit cc01febafb
1 changed files with 22 additions and 20 deletions

View File

@ -1198,24 +1198,24 @@ void device_option::insert_option(gb_json* opt, sane_opt_provider* from, const c
from->add_ref(); from->add_ref();
} }
if (added) //if (added) // error occurs when condition default value, move to after to_now ...
{ //{
// restore to default value ... // // restore to default value ...
int size = 0; // int size = 0;
bool can_auto = false; // bool can_auto = false;
std::string val(get_option_value(opt->key().c_str(), SANE_ACTION_GET_DEFAULT_VALUE, &size)); // std::string val(get_option_value(opt->key().c_str(), SANE_ACTION_GET_DEFAULT_VALUE, &size));
//
if (!opt->get_value("auto", can_auto) || can_auto) // if (!opt->get_value("auto", can_auto) || can_auto)
{ // {
std::string type(""); // std::string type("");
opt->get_value("type", type); // opt->get_value("type", type);
val.resize(size); // val.resize(size);
type = sane_opt_provider::sane_value_2_text(type.c_str(), &val[0]); // type = sane_opt_provider::sane_value_2_text(type.c_str(), &val[0]);
utils::to_log(LOG_LEVEL_ALL, "Set option '%s' to default value: '%s'\n", opt->key().c_str(), type.c_str()); // utils::to_log(LOG_LEVEL_ALL, "Set option '%s' to default value: '%s'\n", opt->key().c_str(), type.c_str());
from->set_value(opt->key().c_str(), &val[0]); // from->set_value(opt->key().c_str(), &val[0]);
sane_opt_provider::set_opt_value(opt, &val[0]); // sane_opt_provider::set_opt_value(opt, &val[0]);
} // }
} //}
} }
bool device_option::arrange_raw_json(sane_opt_provider* sop) bool device_option::arrange_raw_json(sane_opt_provider* sop)
{ {
@ -1703,7 +1703,9 @@ bool device_option::add(sane_opt_provider* sop)
if (arrange_raw_json(sop)) if (arrange_raw_json(sop))
{ {
ret = to_now(true, nullptr); ret = to_now(true, nullptr);
if (!ret) if (ret)
restore(nullptr);
else
clear(); clear();
} }
else else
@ -1909,7 +1911,7 @@ int device_option::restore(sane_opt_provider* holder)
child = cur->first_child(); child = cur->first_child();
while (child) while (child)
{ {
if (src_.count(child->key()) && src_[child->key()] == holder if ((!holder || src_.count(child->key()) && src_[child->key()] == holder)
&& is_auto_restore_default(child->key().c_str())) && is_auto_restore_default(child->key().c_str()))
{ {
std::string val(device_option::option_value(child, true)); std::string val(device_option::option_value(child, true));