From 7c2e199472524c40bbd3f50650c2a0c7345bd4dd Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 30 Jul 2019 14:16:07 +0200 Subject: [PATCH] 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 ++++++++++++++++++++++++++++++++- src/slic3r/GUI/Field.hpp | 1 + 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 14386f3810..ca1c57bc5a 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(); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 49ff55d039..6c16f90f27 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -281,6 +281,7 @@ public: ~TextCtrl() {} void BUILD(); + bool value_was_changed(); // Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER void propagate_value(); wxWindow* window {nullptr};