diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index cbc7cedd4..462724179 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -19,7 +19,18 @@ END_EVENT_TABLE() * calling Refresh()/Update(). */ -ComboBox::ComboBox(wxWindow * parent, +static wxWindow *GetScrollParent(wxWindow *pWindow) +{ + wxWindow *pWin = pWindow; + while (pWin->GetParent()) { + auto pWin2 = pWin->GetParent(); + if (auto top = dynamic_cast(pWin2)) return dynamic_cast(pWin); + pWin = pWin2; + } + return pWin; +} + +ComboBox::ComboBox(wxWindow *parent, wxWindowID id, const wxString &value, const wxPoint & pos, @@ -50,6 +61,8 @@ ComboBox::ComboBox(wxWindow * parent, } else { GetTextCtrl()->Bind(wxEVT_KEY_DOWN, &ComboBox::keyDown, this); } + if (auto scroll = GetScrollParent(this)) + scroll->Bind(wxEVT_MOVE, &ComboBox::onMove, this); drop.Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { SetSelection(e.GetInt()); e.SetEventObject(this); @@ -281,6 +294,12 @@ void ComboBox::keyDown(wxKeyEvent& event) } } +void ComboBox::onMove(wxMoveEvent &event) +{ + event.Skip(); + drop.Hide(); +} + void ComboBox::OnEdit() { auto value = GetTextCtrl()->GetValue(); diff --git a/src/slic3r/GUI/Widgets/ComboBox.hpp b/src/slic3r/GUI/Widgets/ComboBox.hpp index bac352307..e79ca3ee5 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.hpp +++ b/src/slic3r/GUI/Widgets/ComboBox.hpp @@ -88,6 +88,7 @@ private: void mouseDown(wxMouseEvent &event); void mouseWheelMoved(wxMouseEvent &event); void keyDown(wxKeyEvent &event); + void onMove(wxMoveEvent &event); DECLARE_EVENT_TABLE() };