mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-08-01 23:32:10 +00:00
fix: stuck hover state after opening printer preset dialog (#14082)
* fix: stuck hover state after opening printer preset dialog
This commit is contained in:
@@ -1747,19 +1747,23 @@ Sidebar::Sidebar(Plater *parent)
|
|||||||
e.Skip();
|
e.Skip();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// hover state data for printer panel
|
||||||
|
auto printer_preset_hovered = std::make_shared<std::unordered_set<wxWindow*>>();
|
||||||
|
|
||||||
p->btn_edit_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "edit");
|
p->btn_edit_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "edit");
|
||||||
p->btn_edit_printer->SetToolTip(_L("Click to edit preset"));
|
p->btn_edit_printer->SetToolTip(_L("Click to edit preset"));
|
||||||
p->btn_edit_printer->Hide(); // hide for first launch
|
p->btn_edit_printer->Hide(); // hide for first launch
|
||||||
p->btn_edit_printer->Bind(wxEVT_BUTTON, [this, panel_color](wxCommandEvent){
|
p->btn_edit_printer->Bind(wxEVT_BUTTON, [this, panel_color, printer_preset_hovered](wxCommandEvent){
|
||||||
p->editing_filament = -1;
|
p->editing_filament = -1;
|
||||||
if (p->combo_printer->switch_to_tab())
|
if (p->combo_printer->switch_to_tab())
|
||||||
p->editing_filament = 0;
|
p->editing_filament = 0;
|
||||||
// ORCA: FIX crash on wxGTK, directly modifying UI (self->Hide() / parent->Layout()) inside a button event can crash because callbacks are not re-entrant, leaving widgets in an inconsistent state
|
// ORCA: FIX crash on wxGTK, directly modifying UI (self->Hide() / parent->Layout()) inside a button event can crash because callbacks are not re-entrant, leaving widgets in an inconsistent state
|
||||||
wxGetApp().CallAfter([this, panel_color]() {
|
wxGetApp().CallAfter([this, panel_color, printer_preset_hovered]() {
|
||||||
// ORCA clicking edit button not triggers wxEVT_KILL_FOCUS wxEVT_LEAVE_WINDOW make changes manually to prevent stucked colors when opening printer settings
|
// ORCA clicking edit button not triggers wxEVT_KILL_FOCUS wxEVT_LEAVE_WINDOW make changes manually to prevent stucked colors when opening printer settings
|
||||||
if (!p || !p->panel_printer_preset || !p->btn_edit_printer)
|
if (!p || !p->panel_printer_preset || !p->btn_edit_printer)
|
||||||
return;
|
return;
|
||||||
p->panel_printer_preset->SetBorderColor(panel_color.bd_normal);
|
p->panel_printer_preset->SetBorderColor(panel_color.bd_normal);
|
||||||
|
printer_preset_hovered->clear();
|
||||||
p->btn_edit_printer->Hide();
|
p->btn_edit_printer->Hide();
|
||||||
p->panel_printer_preset->Layout();
|
p->panel_printer_preset->Layout();
|
||||||
});
|
});
|
||||||
@@ -1797,7 +1801,6 @@ Sidebar::Sidebar(Plater *parent)
|
|||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
// ORCA use Show/Hide to gain text area instead using blank icon. also manages hover effect for border
|
// ORCA use Show/Hide to gain text area instead using blank icon. also manages hover effect for border
|
||||||
auto printer_preset_hovered = std::make_shared<std::unordered_set<wxWindow*>>();
|
|
||||||
for (wxWindow *w : std::initializer_list<wxWindow *>{p->panel_printer_preset, p->btn_edit_printer, p->image_printer, p->combo_printer}) {
|
for (wxWindow *w : std::initializer_list<wxWindow *>{p->panel_printer_preset, p->btn_edit_printer, p->image_printer, p->combo_printer}) {
|
||||||
w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, printer_preset_hovered](wxMouseEvent &e) {
|
w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, printer_preset_hovered](wxMouseEvent &e) {
|
||||||
printer_preset_hovered->insert(w);
|
printer_preset_hovered->insert(w);
|
||||||
|
|||||||
Reference in New Issue
Block a user