@@ -518,17 +518,19 @@ void DockManager::newLayoutClicked()
518518 if (m_menu_bar)
519519 m_menu_bar->onCurrentLayoutChanged (m_current_layout);
520520
521- auto name_validator = [this ](const QString& name) {
521+ const auto name_validator = [this ](const QString& name) {
522522 return !hasNameConflict (name, DockLayout::INVALID_INDEX);
523523 };
524524
525- bool can_clone_current_layout = m_current_layout != DockLayout::INVALID_INDEX;
525+ const bool can_clone_current_layout = m_current_layout != DockLayout::INVALID_INDEX;
526526
527- QPointer<LayoutEditorDialog> dialog = new LayoutEditorDialog (
528- name_validator, can_clone_current_layout, g_debugger_window);
527+ LayoutEditorDialog* dialog = new LayoutEditorDialog (name_validator, can_clone_current_layout, g_debugger_window);
528+ dialog->setAttribute (Qt::WA_DeleteOnClose);
529+
530+ connect (dialog, &QDialog::accepted, this , [this , dialog, name_validator]() {
531+ if (!name_validator (dialog->name ()))
532+ return ;
529533
530- if (dialog->exec () == QDialog::Accepted && name_validator (dialog->name ()))
531- {
532534 DockLayout::Index new_layout = DockLayout::INVALID_INDEX;
533535
534536 const auto [mode, index] = dialog->initialState ();
@@ -565,9 +567,9 @@ void DockManager::newLayoutClicked()
565567 updateLayoutSwitcher ();
566568 switchToLayout (new_layout);
567569 }
568- }
570+ });
569571
570- delete dialog. get ();
572+ dialog-> open ();
571573}
572574
573575void DockManager::openLayoutSwitcherContextMenu (const QPoint& pos, QTabBar* layout_switcher)
@@ -605,26 +607,33 @@ void DockManager::editLayoutClicked(DockLayout::Index layout_index)
605607 if (layout_index >= m_layouts.size ())
606608 return ;
607609
608- DockLayout& layout = m_layouts[layout_index];
610+ const DockLayout& layout = m_layouts[layout_index];
609611
610- auto name_validator = [this , layout_index](const QString& name) {
612+ const auto name_validator = [this , layout_index](const QString& name) {
611613 return !hasNameConflict (name, layout_index);
612614 };
613615
614- QPointer< LayoutEditorDialog> dialog = new LayoutEditorDialog (
615- layout. name (), layout. cpu (), name_validator, g_debugger_window );
616+ LayoutEditorDialog* dialog = new LayoutEditorDialog (layout. name (), layout. cpu (), name_validator, g_debugger_window);
617+ dialog-> setAttribute (Qt::WA_DeleteOnClose );
616618
617- if (dialog->exec () != QDialog::Accepted || !name_validator (dialog->name ()))
618- return ;
619+ connect (dialog, &QDialog::accepted, this , [this , layout_index, dialog, name_validator]() {
620+ if (layout_index >= m_layouts.size ())
621+ return ;
619622
620- layout.setName (dialog->name ());
621- layout.setCpu (dialog->cpu ());
623+ DockLayout& layout = m_layouts[layout_index];
622624
623- layout.save (layout_index);
625+ if (!name_validator (dialog->name ()))
626+ return ;
624627
625- delete dialog.get ();
628+ layout.setName (dialog->name ());
629+ layout.setCpu (dialog->cpu ());
626630
627- updateLayoutSwitcher ();
631+ layout.save (layout_index);
632+
633+ updateLayoutSwitcher ();
634+ });
635+
636+ dialog->open ();
628637}
629638
630639void DockManager::resetLayoutClicked (DockLayout::Index layout_index)
0 commit comments