diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 62a6aa784..ecef4dc44 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6388,7 +6388,7 @@ bool GLCanvas3D::_init_main_toolbar() item.icon_filename = m_is_dark ? "toolbar_add_plate_dark.svg" : "toolbar_add_plate.svg"; item.tooltip = _utf8(L("Add plate")); item.sprite_id++; - item.left.toggable = true; + item.continuous_click = true; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ADD_PLATE)); }; item.enabling_callback = []()->bool {return wxGetApp().plater()->can_add_plate(); }; if (!m_main_toolbar.add_item(item)) diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 1fc2fb795..fe695d081 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -842,8 +842,11 @@ void GLToolbar::do_action(GLToolbarItem::EActionType type, int item_id, GLCanvas case GLToolbarItem::Left: { item->do_left_action(); break; } case GLToolbarItem::Right: { item->do_right_action(); break; } } - - if ((m_type == Normal) && (item->get_state() != GLToolbarItem::Disabled)) + if (item->get_continuous_click_flag()) { + item->set_state(GLToolbarItem::Hover); + parent.render(); + } + else if ((m_type == Normal) && (item->get_state() != GLToolbarItem::Disabled) && !item->get_continuous_click_flag()) { // the item may get disabled during the action, if not, set it back to normal state item->set_state(GLToolbarItem::Normal); diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 25291ec52..0b21be272 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -138,6 +138,7 @@ public: // mouse right click Option right; bool visible; + bool continuous_click{false}; VisibilityCallback visibility_callback; EnablingCallback enabling_callback; @@ -155,6 +156,7 @@ public: left = data.left; right = data.right; visible = data.visible; + continuous_click = data.continuous_click; visibility_callback = data.visibility_callback; enabling_callback = data.enabling_callback; image_data = data.image_data; @@ -224,6 +226,7 @@ public: bool update_enabled_state(); //BBS: GUI refactor: GLToolbar + bool get_continuous_click_flag() const { return m_data.continuous_click; } bool is_action() const { return m_type == Action; } bool is_action_with_text() const { return m_type == ActionWithText; } bool is_action_with_text_image() const { return m_type == ActionWithTextImage; }