From 88e4ca53335f2edc94de7ecead234cc699b9c73d Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 29 Aug 2026 15:29:29 +1000 Subject: [PATCH] Qt: Enable verification for unscanned files --- src/duckstation-qt/gamesummarywidget.cpp | 32 +++++++++++++++++++----- src/duckstation-qt/gamesummarywidget.ui | 30 +++++++++++----------- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/duckstation-qt/gamesummarywidget.cpp b/src/duckstation-qt/gamesummarywidget.cpp index 0d1db1688..0b0ff6a6b 100644 --- a/src/duckstation-qt/gamesummarywidget.cpp +++ b/src/duckstation-qt/gamesummarywidget.cpp @@ -7,6 +7,7 @@ #include "mainwindow.h" #include "qthost.h" #include "qtprogresscallback.h" +#include "qtutils.h" #include "settingswindow.h" #include "core/achievements.h" @@ -302,9 +303,12 @@ void GameSummaryWidget::populateUi(const GameList::Entry* entry) m_ui.inputProfile->addItem(QString::fromStdString(name)); reloadGameSettings(); - if (!entry->is_runtime_populated) + + // Don't populate tracks when we're running from disc, because the core might have exclusive access. + if (!entry->is_runtime_populated || !CDImage::IsDeviceName(m_path.c_str())) populateTracksInfo(); - else + + if (entry->is_runtime_populated) disableWidgetsForRuntimeScannedEntry(); } @@ -487,16 +491,32 @@ void GameSummaryWidget::populateTracksInfo() void GameSummaryWidget::disableWidgetsForRuntimeScannedEntry() { - m_ui.tracks->setEnabled(false); - m_ui.computeHashes->setEnabled(false); m_ui.title->setReadOnly(true); m_ui.restoreTitle->setEnabled(false); m_ui.region->setEnabled(false); m_ui.restoreRegion->setEnabled(false); + m_ui.changeSerial->setEnabled(false); m_ui.languages->setReadOnly(true); m_ui.customLanguage->setEnabled(false); - m_ui.revision->setText(tr("This game was not scanned by DuckStation. Some functionality is not available.")); - m_ui.tracks->setVisible(false); + + // Need to re-add the spacer, ugh. + const int insert_row = m_ui.mainLayout->rowCount() - 1; + QLayoutItem* const spacer_item = m_ui.mainLayout->itemAtPosition(insert_row, 0); + if (spacer_item) + m_ui.mainLayout->removeItem(spacer_item); + + QHBoxLayout* const warning_layout = new QHBoxLayout(); + QLabel* const icon = new QLabel(this); + icon->setPixmap(QIcon(QtHost::GetResourceQPath("images/warning.svg", true)).pixmap(16, 16)); + warning_layout->addWidget(icon); + + QLabel* const warning = + new QLabel(tr("This game was not scanned by DuckStation. Some functionality is not available."), this); + warning_layout->addWidget(warning, 1); + m_ui.mainLayout->addLayout(warning_layout, insert_row, 0, 1, 3); + + if (spacer_item) + m_ui.mainLayout->addItem(spacer_item, insert_row + 1, 0, 1, 3); } void GameSummaryWidget::onCompatibilityCommentsClicked() diff --git a/src/duckstation-qt/gamesummarywidget.ui b/src/duckstation-qt/gamesummarywidget.ui index 08c1b6577..29389afb9 100644 --- a/src/duckstation-qt/gamesummarywidget.ui +++ b/src/duckstation-qt/gamesummarywidget.ui @@ -24,7 +24,7 @@ 0 - + Image Path: @@ -38,7 +38,7 @@ - + Title: @@ -86,7 +86,7 @@ - + Serial: @@ -111,7 +111,7 @@ - + Region: @@ -142,14 +142,14 @@ - + Languages: - + @@ -163,7 +163,7 @@ - + Compatibility: @@ -185,14 +185,14 @@ - + Type: - + @@ -227,7 +227,7 @@ - + Metadata: @@ -241,7 +241,7 @@ - + Release Info: @@ -255,7 +255,7 @@ - + Controllers: @@ -269,14 +269,14 @@ - + Controller Preset: - + @@ -294,7 +294,7 @@ - + Tracks: