From 59cf1296ae773dd56e5c0997b9951002bad57010 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Fri, 22 May 2026 11:38:21 +0800 Subject: [PATCH] fix: bambu slice hover popup disappears too fast macos --- src/slic3r/GUI/FilamentGroupPopup.cpp | 20 ++++++++++++++++---- src/slic3r/GUI/FilamentGroupPopup.hpp | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/FilamentGroupPopup.cpp b/src/slic3r/GUI/FilamentGroupPopup.cpp index 2cff9c3c82..cd374652f0 100644 --- a/src/slic3r/GUI/FilamentGroupPopup.cpp +++ b/src/slic3r/GUI/FilamentGroupPopup.cpp @@ -166,11 +166,11 @@ FilamentGroupPopup::FilamentGroupPopup(wxWindow *parent) : PopupWindow(parent, w radio_btns[idx]->Bind(wxEVT_LEFT_DOWN, [this, idx](auto &) { OnRadioBtn(idx);}); - radio_btns[idx]->Bind(wxEVT_ENTER_WINDOW, [this, idx](auto &) { UpdateButtonStatus(idx); }); + radio_btns[idx]->Bind(wxEVT_ENTER_WINDOW, [this, idx](auto &) { ResetTimer(); UpdateButtonStatus(idx); }); radio_btns[idx]->Bind(wxEVT_LEAVE_WINDOW, [this](auto &) { UpdateButtonStatus(); }); button_labels[idx]->Bind(wxEVT_LEFT_DOWN, [this, idx](auto &) { OnRadioBtn(idx);}); - button_labels[idx]->Bind(wxEVT_ENTER_WINDOW, [this, idx](auto &) { UpdateButtonStatus(idx); }); + button_labels[idx]->Bind(wxEVT_ENTER_WINDOW, [this, idx](auto &) { ResetTimer(); UpdateButtonStatus(idx); }); button_labels[idx]->Bind(wxEVT_LEAVE_WINDOW, [this](auto &) { UpdateButtonStatus(); }); } @@ -338,7 +338,13 @@ void FilamentGroupPopup::OnRadioBtn(int idx) } } -void FilamentGroupPopup::OnTimer(wxTimerEvent &event) { Dismiss(); } +void FilamentGroupPopup::OnTimer(wxTimerEvent&) +{ + if (IsMouseInPopup()) + return; + + Dismiss(); +} void FilamentGroupPopup::Dismiss() { m_active = false; @@ -361,6 +367,12 @@ void FilamentGroupPopup::OnEnterWindow(wxMouseEvent &) ResetTimer(); } +bool FilamentGroupPopup::IsMouseInPopup() const +{ + wxPoint pos = this->ScreenToClient(wxGetMousePosition()); + return this->GetClientRect().Contains(pos); +} + void FilamentGroupPopup::UpdateButtonStatus(int hover_idx) { for (int i = 0; i < ButtonType::btCount; ++i) { @@ -394,4 +406,4 @@ void FilamentGroupPopup::UpdateButtonStatus(int hover_idx) Fit(); } -}} // namespace Slic3r::GUI \ No newline at end of file +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/FilamentGroupPopup.hpp b/src/slic3r/GUI/FilamentGroupPopup.hpp index 2355b13e9e..b7d3b920db 100644 --- a/src/slic3r/GUI/FilamentGroupPopup.hpp +++ b/src/slic3r/GUI/FilamentGroupPopup.hpp @@ -36,6 +36,7 @@ private: void OnEnterWindow(wxMouseEvent &); void OnTimer(wxTimerEvent &event); void Dismiss(); + bool IsMouseInPopup() const; void CreateBmps();