From 3458830d425152a61efb93ae5dba0eaa80d49021 Mon Sep 17 00:00:00 2001 From: Ice Yeti <101294194+IceYetiWins@users.noreply.github.com> Date: Wed, 10 Jun 2026 13:14:52 -0400 Subject: [PATCH] fixed datapack screen causing crash --- launcher/minecraft/MultiWorldList.cpp | 6 +++--- launcher/ui/MultiWorldListPage.cpp | 15 ++++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/launcher/minecraft/MultiWorldList.cpp b/launcher/minecraft/MultiWorldList.cpp index a01633b6c..8f892f495 100644 --- a/launcher/minecraft/MultiWorldList.cpp +++ b/launcher/minecraft/MultiWorldList.cpp @@ -240,7 +240,7 @@ QVariant MultiWorldList::data(const QModelIndex& index, int role) const return locale.formattedDataSize(instanceWorld.world.bytes()); case InfoColumn: - for (QString path : instDirPaths()) { //use canonical paths instead of for loops? iy + for (QString path : instDirPaths()) { if (instanceWorld.world.isSymLinkUnder(path)) { return tr("This world is symbolically linked from elsewhere."); } @@ -260,7 +260,7 @@ QVariant MultiWorldList::data(const QModelIndex& index, int role) const case Qt::ToolTipRole: { if (column == InfoColumn) { - for (QString path : instDirPaths()) { //use canonical paths instead of for loops? iy + for (QString path : instDirPaths()) { if (instanceWorld.world.isSymLinkUnder(path)) { return tr("Warning: This world is symbolically linked from elsewhere. Editing it will also change the original." "\nCanonical Path: %1") @@ -277,7 +277,7 @@ QVariant MultiWorldList::data(const QModelIndex& index, int role) const return QVariant::fromValue((void*)&instanceWorld); } case FolderRole: { - return QDir::toNativeSeparators(QDir(dynamic_cast(instanceWorld.instance)->worldDir()).absoluteFilePath(instanceWorld.world.folderName())); //test if canonical file path works iy + return QDir::toNativeSeparators(QDir(dynamic_cast(instanceWorld.instance)->worldDir()).absoluteFilePath(instanceWorld.world.folderName())); } case SeedRole: { return QVariant::fromValue(instanceWorld.world.seed()); diff --git a/launcher/ui/MultiWorldListPage.cpp b/launcher/ui/MultiWorldListPage.cpp index 9dd38a5a1..fbf11f777 100644 --- a/launcher/ui/MultiWorldListPage.cpp +++ b/launcher/ui/MultiWorldListPage.cpp @@ -242,10 +242,12 @@ void MultiWorldListPage::on_actionData_Packs_triggered() GenericPageProvider provider(dialog->windowTitle()); - bool isIndexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool(); - m_datapackModel.reset(new DataPackFolderModel(folder, static_cast(m_worlds->data(index, MultiWorldList::ObjectRole).value())->instance, isIndexed, true)); //these cause crashes sometimes iy with null error SIGSEGV (probably due to watchers) after every first time launched -> using index 0 for instances doesnt fix it + auto instance = (static_cast(m_worlds->data(index, MultiWorldList::ObjectRole).value()))->instance; - provider.addPageCreator([this, index] { return new DataPackPage(static_cast(m_worlds->data(index, MultiWorldList::ObjectRole).value())->instance, m_datapackModel.get(), this); }); //iy + bool isIndexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool(); + m_datapackModel.reset(new DataPackFolderModel(folder, instance, isIndexed, true)); + + provider.addPageCreator([this, instance] { return new DataPackPage(instance, m_datapackModel.get(), this); }); auto layout = new QVBoxLayout(dialog); @@ -265,9 +267,12 @@ void MultiWorldListPage::on_actionData_Packs_triggered() dialog->setLayout(layout); - dialog->exec(); + dialog->setAttribute(Qt::WA_DeleteOnClose); - APPLICATION->settings()->set("DataPackDownloadGeometry", dialog->saveGeometry().toBase64()); + connect(dialog, &QDialog::finished, this, + [dialog]() { APPLICATION->settings()->set("DataPackDownloadGeometry", dialog->saveGeometry().toBase64()); }); + + dialog->open(); } void MultiWorldListPage::on_actionReset_Icon_triggered()