From 869a3046aa9f58ea89ad1eda2867545ed74dd8d4 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 20 Jun 2023 15:13:10 +0800 Subject: [PATCH] FIX: [STUDIO-3217] hide dropdown when combobox move by scroll Change-Id: I8d8e9ec4a54f6418843463f1bf4f1f46fd4af3df --- src/slic3r/GUI/Widgets/ComboBox.cpp | 21 ++++++++++++++++++++- src/slic3r/GUI/Widgets/ComboBox.hpp | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) 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() };