Fix tileset editor crash caused by the TilesetEditor instance being destroyed while still running
This commit is contained in:
parent
d7282ac5c7
commit
8b843855f0
4 changed files with 14 additions and 13 deletions
|
@ -100,7 +100,6 @@ private slots:
|
||||||
void onAddNewMapToGroupClick(QAction* triggeredAction);
|
void onAddNewMapToGroupClick(QAction* triggeredAction);
|
||||||
void onTilesetChanged(QString);
|
void onTilesetChanged(QString);
|
||||||
void currentMetatilesSelectionChanged();
|
void currentMetatilesSelectionChanged();
|
||||||
void onTilesetEditorClosed();
|
|
||||||
|
|
||||||
void on_action_Export_Map_Image_triggered();
|
void on_action_Export_Map_Image_triggered();
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,6 @@ private:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void tilesetsSaved(QString, QString);
|
void tilesetsSaved(QString, QString);
|
||||||
void closed();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TILESETEDITOR_H
|
#endif // TILESETEDITOR_H
|
||||||
|
|
|
@ -1735,7 +1735,8 @@ void MainWindow::on_actionTileset_Editor_triggered()
|
||||||
if (!this->tilesetEditor) {
|
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);
|
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(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()) {
|
if (!this->tilesetEditor->isVisible()) {
|
||||||
|
@ -1746,10 +1747,3 @@ void MainWindow::on_actionTileset_Editor_triggered()
|
||||||
this->tilesetEditor->activateWindow();
|
this->tilesetEditor->activateWindow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onTilesetEditorClosed() {
|
|
||||||
if (this->tilesetEditor) {
|
|
||||||
delete this->tilesetEditor;
|
|
||||||
this->tilesetEditor = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,6 +17,18 @@ TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QStr
|
||||||
TilesetEditor::~TilesetEditor()
|
TilesetEditor::~TilesetEditor()
|
||||||
{
|
{
|
||||||
delete ui;
|
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) {
|
void TilesetEditor::init(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel) {
|
||||||
|
@ -392,16 +404,13 @@ void TilesetEditor::closeEvent(QCloseEvent *event)
|
||||||
if (result == QMessageBox::Yes) {
|
if (result == QMessageBox::Yes) {
|
||||||
this->on_actionSave_Tileset_triggered();
|
this->on_actionSave_Tileset_triggered();
|
||||||
event->accept();
|
event->accept();
|
||||||
emit closed();
|
|
||||||
} else if (result == QMessageBox::No) {
|
} else if (result == QMessageBox::No) {
|
||||||
event->accept();
|
event->accept();
|
||||||
emit closed();
|
|
||||||
} else if (result == QMessageBox::Cancel) {
|
} else if (result == QMessageBox::Cancel) {
|
||||||
event->ignore();
|
event->ignore();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
event->accept();
|
event->accept();
|
||||||
emit closed();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue