diff --git a/gui/launcher.cpp b/gui/launcher.cpp index f96dd17d461..f60fecf5091 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -204,7 +204,10 @@ void LauncherDialog::clean() { while (_firstWidget) { Widget* w = _firstWidget; removeWidget(w); - delete w; + // This is called from rebuild() which may result from handleCommand being called by + // a child widget sendCommand call. In such a case sendCommand is still being executed + // so we should not delete yet the child widget. Thus delay the deletion. + g_gui.addToTrash(w, this); } delete _browser; delete _loadDialog; diff --git a/gui/options.cpp b/gui/options.cpp index 7a22a9ba3f5..179fa659911 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -423,7 +423,10 @@ void OptionsDialog::clean() { while (_firstWidget) { Widget* w = _firstWidget; removeWidget(w); - delete w; + // This is called from rebuild() which may result from handleCommand being called by + // a child widget sendCommand call. In such a case sendCommand is still being executed + // so we should not delete yet the child widget. Thus delay the deletion. + g_gui.addToTrash(w, this); } init(); }