From 7c2e199472524c40bbd3f50650c2a0c7345bd4dd Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 30 Jul 2019 14:16:07 +0200 Subject: Try to fix selection of overridden option when TextCtrl is focused Note: the problem was observed only under OSX --- src/slic3r/GUI/Field.cpp | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src/slic3r/GUI/Field.cpp') diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 14386f381..ca1c57bc5 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -342,9 +342,40 @@ void TextCtrl::BUILD() { window = dynamic_cast(temp); } +bool TextCtrl::value_was_changed() +{ + if (m_value.empty()) + return true; + + boost::any val = m_value; + wxString ret_str = static_cast(window)->GetValue(); + // update m_value! + get_value_by_opt_type(ret_str); + + switch (m_opt.type) { + case coInt: + return boost::any_cast(m_value) != boost::any_cast(val); + case coPercent: + case coPercents: + case coFloats: + case coFloat: { + if (m_opt.nullable && std::isnan(boost::any_cast(m_value)) && + std::isnan(boost::any_cast(val))) + return false; + return boost::any_cast(m_value) != boost::any_cast(val); + } + case coString: + case coStrings: + case coFloatOrPercent: + return boost::any_cast(m_value) != boost::any_cast(val); + default: + return true; + } +} + void TextCtrl::propagate_value() { - if (is_defined_input_value(window, m_opt.type)) + if (is_defined_input_value(window, m_opt.type) && value_was_changed()) on_change_field(); else on_kill_focus(); -- cgit v1.2.3