Centralize canvas progress teardown

This commit is contained in:
2026-06-12 16:18:08 +02:00
parent b87927b456
commit 3be0f7468c
4 changed files with 16 additions and 7 deletions

View File

@@ -561,6 +561,11 @@ agent or engineer to remove them without reconstructing context from chat.
helpers in `src/legacy_ui_overlay_services.*`. Floating-panel dock/drop helpers in `src/legacy_ui_overlay_services.*`. Floating-panel dock/drop
reparenting still uses legacy child-vector ownership until checked handles reparenting still uses legacy child-vector ownership until checked handles
land. land.
- 2026-06-12: DEBT-0063/DEBT-0058 were narrowed again. Canvas export/project
progress-bar cleanup and remote-page loading placeholder cleanup now route
through retained close/destroy helpers in `src/legacy_ui_overlay_services.*`.
The long-running canvas workflows still depend on legacy `App::I` UI tasking
and raw progress-bar pointers.
- 2026-06-05: DEBT-0011 was narrowed. The Windows app package smoke target now - 2026-06-05: DEBT-0011 was narrowed. The Windows app package smoke target now
passes the configure-time CMake executable into `package-smoke.ps1`, so VS passes the configure-time CMake executable into `package-smoke.ps1`, so VS
2026 generator validation does not depend on an older `cmake` on PATH, and 2026 generator validation does not depend on an older `cmake` on PATH, and

View File

@@ -524,6 +524,8 @@ recovery message dialogs now route through the retained dialog close helper.
Floating-panel placeholder detach/destroy, cloud-loading alignment cleanup, Floating-panel placeholder detach/destroy, cloud-loading alignment cleanup,
brush-preset item removal, and retained popup-panel parent detach now use named brush-preset item removal, and retained popup-panel parent detach now use named
retained node helpers; dock/drop reparenting remains legacy-owned. retained node helpers; dock/drop reparenting remains legacy-owned.
Canvas export/project progress-bar cleanup and remote-page loading placeholder
cleanup now route through those same retained close/destroy helpers.
Raw popup callback captures and full close/capture ownership remain part of Raw popup callback captures and full close/capture ownership remain part of
`DEBT-0063`. `DEBT-0063`.
`pano_cli inspect-image` exposes PNG IHDR metadata as JSON, `pano_cli inspect-image` exposes PNG IHDR metadata as JSON,

View File

@@ -4,6 +4,7 @@
#include "app.h" #include "app.h"
#include "legacy_gl_renderbuffer_dispatch.h" #include "legacy_gl_renderbuffer_dispatch.h"
#include "legacy_ui_gl_dispatch.h" #include "legacy_ui_gl_dispatch.h"
#include "legacy_ui_overlay_services.h"
#include "app_core/document_canvas.h" #include "app_core/document_canvas.h"
#include "texture.h" #include "texture.h"
#include "node_progress_bar.h" #include "node_progress_bar.h"
@@ -2205,7 +2206,7 @@ void Canvas::export_layers_thread(std::string path)
img.save_png(fmt::format("{}-layer{:02d}-{}.png", path, i, l->m_name)); img.save_png(fmt::format("{}-layer{:02d}-{}.png", path, i, l->m_name));
pb->increment(); pb->increment();
} }
pb->destroy(); pp::panopainter::close_legacy_dialog_node(*pb);
} }
void Canvas::export_anim_frames(std::string path, std::function<void()> on_complete) void Canvas::export_anim_frames(std::string path, std::function<void()> on_complete)
@@ -2231,7 +2232,7 @@ void Canvas::export_anim_frames_thread(std::string path)
export_equirectangular_thread(fmt::format("{}-{:02d}.png", path, i)); export_equirectangular_thread(fmt::format("{}-{:02d}.png", path, i));
pb->increment(); pb->increment();
} }
pb->destroy(); pp::panopainter::close_legacy_dialog_node(*pb);
} }
void Canvas::export_anim_mp4(std::string path, std::function<void()> on_complete) void Canvas::export_anim_mp4(std::string path, std::function<void()> on_complete)
@@ -2270,7 +2271,7 @@ void Canvas::export_anim_mp4_thread(std::string path)
pb->increment(); pb->increment();
} }
mp4.write_mp4(path); mp4.write_mp4(path);
pb->destroy(); pp::panopainter::close_legacy_dialog_node(*pb);
} }
void Canvas::export_cube_faces(std::string file_name, std::function<void()> on_complete) void Canvas::export_cube_faces(std::string file_name, std::function<void()> on_complete)
@@ -2314,7 +2315,7 @@ void Canvas::export_cube_faces_thread(std::string file_name)
#endif #endif
} }
pb->destroy(); pp::panopainter::close_legacy_dialog_node(*pb);
#ifdef __OBJC__ #ifdef __OBJC__
static char name[128]; static char name[128];
@@ -2615,7 +2616,7 @@ bool Canvas::project_save_thread(std::string file_path, bool show_progress)
if (post_commit_plan.dismisses_progress_ui) if (post_commit_plan.dismisses_progress_ui)
{ {
pb->destroy(); pp::panopainter::close_legacy_dialog_node(*pb);
} }
if (post_commit_plan.updates_title) if (post_commit_plan.updates_title)
{ {
@@ -2845,7 +2846,7 @@ bool Canvas::project_open_thread(std::string file_path)
m_newdoc = false; m_newdoc = false;
if (App::I->layout.m_loaded) if (App::I->layout.m_loaded)
{ {
pb->destroy(); pp::panopainter::close_legacy_dialog_node(*pb);
App::I->ui_task([] { App::I->ui_task([] {
App::I->title_update(); App::I->title_update();
App::I->update_rec_frames(); App::I->update_rec_frames();

View File

@@ -6,6 +6,7 @@
#include "asset.h" #include "asset.h"
#include "node_text.h" #include "node_text.h"
#include "node_metadata.h" #include "node_metadata.h"
#include "legacy_ui_overlay_services.h"
Node* NodeRemotePage::clone_instantiate() const Node* NodeRemotePage::clone_instantiate() const
{ {
@@ -55,7 +56,7 @@ std::future<bool> NodeRemotePage::load_url(const std::string& url,
m_content->add_child_xml(std::string((char*)remote->m_data, (size_t)remote->m_len), "about"); m_content->add_child_xml(std::string((char*)remote->m_data, (size_t)remote->m_len), "about");
if (auto meta = m_content->find<NodeMetadata>("metadata")) if (auto meta = m_content->find<NodeMetadata>("metadata"))
m_page_id = std::stol(meta->m_props["page-id"]); m_page_id = std::stol(meta->m_props["page-id"]);
align->destroy(); pp::panopainter::destroy_legacy_node(*align);
} }
else else
{ {