From 401ac1adef49442478bb47bf6bbd43073122dca7 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Thu, 21 Dec 2023 14:19:22 +0800 Subject: [PATCH] Fix crash on MacOS when clicking filament dropdown in object list (#3205) * Disable optimization for `RelWithDebInfo` for Clang as well * Fix crash on MacOS (#3134, #3202) --- CMakeLists.txt | 10 ++++++++++ src/slic3r/GUI/GUI_ObjectList.cpp | 15 +++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c546b087b0..3d9ad7861c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -332,6 +332,16 @@ if(CMAKE_CXX_FLAGS_RELWITHDEBINFO MATCHES "/O2") string(REGEX REPLACE "/O2" "/Od" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") endif() +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES "-O2") + string(REGEX REPLACE "-O2" "-O0" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + endif() + + if(CMAKE_CXX_FLAGS_RELWITHDEBINFO MATCHES "-O2") + string(REGEX REPLACE "-O2" "-O0" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + endif() +endif() + if(MSVC) if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES "/Ob1") string(REGEX REPLACE "/Ob1" "/Ob0" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index e98069820f..e7f06a1c74 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -5533,12 +5533,6 @@ void GUI::ObjectList::OnStartEditing(wxDataViewEvent &event) // Here the last active column is forgotten, so when leaving the editing mode, the next mouse click will not enter the editing mode of the newly selected column. void ObjectList::OnEditingStarted(wxDataViewEvent &event) { - // Orca: Automatically show drop down on editing start and finish editing when the combobox is closed - if (event.GetColumn() == colFilament) { - ::ComboBox*c = static_cast<::ComboBox *>(event.GetDataViewColumn()->GetRenderer()->GetEditorCtrl()); - c->ToggleDropDown(); - c->Bind(wxEVT_COMBOBOX_CLOSEUP, [event](wxCommandEvent& evt){ event.GetDataViewColumn()->GetRenderer()->FinishEditing(); }); - } #ifdef __WXMSW__ m_last_selected_column = -1; #else @@ -5603,6 +5597,15 @@ void ObjectList::OnEditingStarted(wxDataViewEvent &event) SetCustomRendererPtr(dynamic_cast(renderer)); #endif #endif //__WXMSW__ + + // Orca: Automatically show drop down on editing start and finish editing when the combobox is closed + // Note: this must placed AFTER the above `renderer->StartEditing` call, otherwise `c` will be nullptr on MacOS, + // due to the code in MacDarkMode.mm + if (event.GetColumn() == colFilament) { + ::ComboBox*c = static_cast<::ComboBox *>(event.GetDataViewColumn()->GetRenderer()->GetEditorCtrl()); + c->ToggleDropDown(); + c->Bind(wxEVT_COMBOBOX_CLOSEUP, [event](wxCommandEvent& evt){ event.GetDataViewColumn()->GetRenderer()->FinishEditing(); }); + } } void ObjectList::OnEditingDone(wxDataViewEvent &event)