Linux specific: Fix for #7531, #8055, #8408

This commit is contained in:
YuSanka 2022-06-20 15:13:59 +02:00 committed by Lukas Matena
parent 9aca685dd4
commit 9d20b01c5b

View File

@ -342,18 +342,26 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent,
this->Bind(wxEVT_TEXT_ENTER, [this, edit_fn](wxEvent&) this->Bind(wxEVT_TEXT_ENTER, [this, edit_fn](wxEvent&)
{ {
m_enter_pressed = true; m_enter_pressed = true;
// If LayersList wasn't updated/recreated, we can call wxEVT_KILL_FOCUS.Skip() // Workaround! Under Linux we have to use CallAfter() to avoid crash after pressing ENTER key
if (m_type&etLayerHeight) { // see #7531, #8055, #8408
if (!edit_fn(get_value(), true, false)) #ifdef __linux__
wxTheApp->CallAfter([this, edit_fn]() {
#endif
// If LayersList wasn't updated/recreated, we can call wxEVT_KILL_FOCUS.Skip()
if (m_type & etLayerHeight) {
if (!edit_fn(get_value(), true, false))
SetValue(m_valid_value);
else
m_valid_value = double_to_string(get_value());
m_call_kill_focus = true;
}
else if (!edit_fn(get_value(), true, false)) {
SetValue(m_valid_value); SetValue(m_valid_value);
else m_call_kill_focus = true;
m_valid_value = double_to_string(get_value()); }
m_call_kill_focus = true; #ifdef __linux__
} });
else if (!edit_fn(get_value(), true, false)) { #endif
SetValue(m_valid_value);
m_call_kill_focus = true;
}
}, this->GetId()); }, this->GetId());
this->Bind(wxEVT_KILL_FOCUS, [this, edit_fn](wxFocusEvent& e) this->Bind(wxEVT_KILL_FOCUS, [this, edit_fn](wxFocusEvent& e)