Fix tileset editor crash caused by the TilesetEditor instance being destroyed while still running

This commit is contained in:
Marcus Huderle 2018-12-26 16:49:43 -06:00
parent d7282ac5c7
commit 8b843855f0
4 changed files with 14 additions and 13 deletions

View file

@ -100,7 +100,6 @@ private slots:
void onAddNewMapToGroupClick(QAction* triggeredAction);
void onTilesetChanged(QString);
void currentMetatilesSelectionChanged();
void onTilesetEditorClosed();
void on_action_Export_Map_Image_triggered();

View file

@ -107,7 +107,6 @@ private:
signals:
void tilesetsSaved(QString, QString);
void closed();
};
#endif // TILESETEDITOR_H

View file

@ -1735,7 +1735,8 @@ void MainWindow::on_actionTileset_Editor_triggered()
if (!this->tilesetEditor) {
this->tilesetEditor = new TilesetEditor(this->editor->project, this->editor->map->layout->tileset_primary_label, this->editor->map->layout->tileset_secondary_label, this);
connect(this->tilesetEditor, SIGNAL(tilesetsSaved(QString, QString)), this, SLOT(onTilesetsSaved(QString, QString)));
connect(this->tilesetEditor, SIGNAL(closed()), this, SLOT(onTilesetEditorClosed()));
connect(this->tilesetEditor, &QObject::destroyed, [=](QObject *) { this->tilesetEditor = nullptr; });
this->tilesetEditor->setAttribute(Qt::WA_DeleteOnClose);
}
if (!this->tilesetEditor->isVisible()) {
@ -1746,10 +1747,3 @@ void MainWindow::on_actionTileset_Editor_triggered()
this->tilesetEditor->activateWindow();
}
}
void MainWindow::onTilesetEditorClosed() {
if (this->tilesetEditor) {
delete this->tilesetEditor;
this->tilesetEditor = nullptr;
}
}

View file

@ -17,6 +17,18 @@ TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QStr
TilesetEditor::~TilesetEditor()
{
delete ui;
delete metatileSelector;
delete tileSelector;
delete metatileLayersItem;
delete paletteEditor;
delete metatile;
delete primaryTileset;
delete secondaryTileset;
delete metatilesScene;
delete tilesScene;
delete selectedTilePixmapItem;
delete selectedTileScene;
delete metatileLayersScene;
}
void TilesetEditor::init(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel) {
@ -392,16 +404,13 @@ void TilesetEditor::closeEvent(QCloseEvent *event)
if (result == QMessageBox::Yes) {
this->on_actionSave_Tileset_triggered();
event->accept();
emit closed();
} else if (result == QMessageBox::No) {
event->accept();
emit closed();
} else if (result == QMessageBox::Cancel) {
event->ignore();
}
} else {
event->accept();
emit closed();
}
}