Crash fix assembly mode flatpak (#13413)

* Update GLCanvas3D.cpp

* Update GLCanvas3D.cpp

* update

* Update GLCanvas3D.cpp

Co-Authored-By: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>

---------

Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
This commit is contained in:
yw4z
2026-05-09 08:11:26 +03:00
committed by GitHub
parent 7aed2dc8bd
commit a29d4fc495
2 changed files with 40 additions and 7 deletions

View File

@@ -1920,6 +1920,14 @@ void GLCanvas3D::render(bool only_init)
if (!is_initialized() && !init())
return;
// If a scene reload was postponed while the canvas was hidden, consume it on first visible render.
if (m_reload_delayed) {
reload_scene(true);
if (m_reload_delayed)
return;
}
if (m_canvas_type == ECanvasType::CanvasView3D && m_gizmos.get_current_type() == GLGizmosManager::Undefined) {
enable_return_toolbar(false);
}
@@ -2398,10 +2406,11 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
if (m_canvas == nullptr || m_config == nullptr || m_model == nullptr)
return;
if (!m_initialized)
if (!m_initialized || !_set_current()) {
m_reload_delayed = true;
set_as_dirty();
return;
_set_current();
}
m_hover_volume_idxs.clear();
@@ -2456,6 +2465,10 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
auto model_volume_state_lower = [](const ModelVolumeState& m1, const ModelVolumeState& m2) { return m1.geometry_id < m2.geometry_id; };
m_reload_delayed = !m_canvas->IsShown() && !refresh_immediately && !force_full_scene_refresh;
if (m_reload_delayed) {
set_as_dirty();
return;
}
PrinterTechnology printer_technology = current_printer_technology();
@@ -2617,9 +2630,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
//BBS clean hover_volume_idxs
m_hover_volume_idxs.clear();
if (m_reload_delayed)
return;
// BBS: do not check wipe tower changes
bool update_object_list = false;
if (deleted_volumes.size() != deleted_wipe_towers.size())
@@ -3897,7 +3907,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
if (m_gizmos.on_mouse_wheel(evt))
return;
if (m_canvas_type == CanvasAssembleView && (evt.AltDown() || evt.CmdDown())) {
if (m_canvas_type == CanvasAssembleView && (evt.AltDown() || evt.CmdDown()) && m_gizmos.m_assemble_view_data != nullptr) {
float rotation = (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta();
if (evt.AltDown()) {
auto clp_dist = m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position();
@@ -8915,6 +8925,9 @@ float GLCanvas3D::_render_assembly_tooltip_button(ImGuiWrapper* imgui_wrapper) c
//BBS
void GLCanvas3D::_render_assemble_control()
{
if(m_gizmos.m_assemble_view_data == nullptr)
return;
if (m_canvas_type != ECanvasType::CanvasAssembleView) {
GLVolume::explosion_ratio = m_explosion_ratio = 1.0;
return;