diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index e0dc107..b091e91 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -566,6 +566,11 @@ agent or engineer to remove them without reconstructing context from chat. 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-12: DEBT-0063 was narrowed again. Toolbar popup restoration from + docked floating stroke/layer/grid panels and restored floating color-panel + title cleanup now use retained detach/close/destroy helpers in + `src/legacy_ui_overlay_services.*`. Dock/drop child ownership and raw panel + globals remain legacy-owned. - 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 2026 generator validation does not depend on an older `cmake` on PATH, and diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index f4b2c74..2c19e24 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -526,6 +526,9 @@ brush-preset item removal, and retained popup-panel parent detach now use named 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. +Toolbar popup restoration from docked floating stroke/layer/grid panels and +restored floating color-panel title cleanup now use the retained detach/close/ +destroy helpers. Raw popup callback captures and full close/capture ownership remain part of `DEBT-0063`. `pano_cli inspect-image` exposes PNG IHDR metadata as JSON, diff --git a/src/app_layout.cpp b/src/app_layout.cpp index ee7eb8a..8de401b 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -469,8 +469,8 @@ void App::init_sidebar() { if (auto fp = dynamic_cast(stroke->m_parent->m_parent)) { - stroke->remove_from_parent(); - fp->destroy(); + pp::panopainter::detach_legacy_node_from_parent(*stroke); + pp::panopainter::close_legacy_dialog_node(*fp); } } (void)pp::panopainter::attach_legacy_overlay_node(*this, stroke); @@ -543,8 +543,8 @@ void App::init_sidebar() { if (auto fp = dynamic_cast(layers->m_parent->m_parent)) { - layers->remove_from_parent(); - fp->destroy(); + pp::panopainter::detach_legacy_node_from_parent(*layers); + pp::panopainter::close_legacy_dialog_node(*fp); } } (void)pp::panopainter::attach_legacy_overlay_node(*this, layers); @@ -576,8 +576,8 @@ void App::init_sidebar() { if (auto fp = dynamic_cast(grid->m_parent->m_parent)) { - grid->remove_from_parent(); - fp->destroy(); + pp::panopainter::detach_legacy_node_from_parent(*grid); + pp::panopainter::close_legacy_dialog_node(*fp); } } (void)pp::panopainter::attach_legacy_overlay_node(*this, grid); @@ -1737,7 +1737,7 @@ void App::ui_restore() { auto floating_color = f->m_container->add_child(); floating_color->SetHeightP(100); - floating_color->find("title")->destroy(); + pp::panopainter::destroy_legacy_node(*floating_color->find("title")); floating_color->on_color_changed = [this](Node* target, glm::vec4 color) { apply_brush_color_plan(*this, color, false, false); }; @@ -1811,7 +1811,7 @@ void App::ui_restore() { auto floating_color = f->m_container->add_child(); floating_color->SetHeightP(100); - floating_color->find("title")->destroy(); + pp::panopainter::destroy_legacy_node(*floating_color->find("title")); floating_color->on_color_changed = [this](Node* target, glm::vec4 color) { apply_brush_color_plan(*this, color, false, false); };