From bc77c0cb426c0074748b1d0122992a381367ee61 Mon Sep 17 00:00:00 2001 From: Kravickas Date: Mon, 30 Mar 2026 01:52:59 +0200 Subject: [PATCH] ui send help --- rpcs3/rpcs3qt/update_manager.cpp | 64 ++++++++++++++++---------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/rpcs3/rpcs3qt/update_manager.cpp b/rpcs3/rpcs3qt/update_manager.cpp index 8c90630837..01ab77ab37 100644 --- a/rpcs3/rpcs3qt/update_manager.cpp +++ b/rpcs3/rpcs3qt/update_manager.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -389,23 +388,37 @@ void update_manager::update(bool auto_accept) // Build HTML changelog with clickable PR links when available QString changelog_html; + QString changelog_html_capped; // First 6 entries only, for height measurement + int changelog_count = 0; for (const changelog_data& entry : m_update_info.changelog) { const QString version_str = entry.version.isEmpty() ? tr("N/A") : entry.version; const QString title_str = entry.title.isEmpty() ? tr("N/A") : entry.title; - if (!changelog_html.isEmpty()) - changelog_html += QStringLiteral("
"); + QString entry_html; if (entry.pr > 0) { - changelog_html += tr("  • %0: %1 (#%2)").arg(version_str, title_str, QString::number(entry.pr)); + entry_html = tr("  • %0: %1 (#%2)").arg(version_str, title_str, QString::number(entry.pr)); } else { - changelog_html += tr("  • %0: %1").arg(version_str, title_str); + entry_html = tr("  • %0: %1").arg(version_str, title_str); } + + if (!changelog_html.isEmpty()) + changelog_html += QStringLiteral("
"); + changelog_html += entry_html; + + if (changelog_count < 6) + { + if (!changelog_html_capped.isEmpty()) + changelog_html_capped += QStringLiteral("
"); + changelog_html_capped += entry_html; + } + + changelog_count++; } QMessageBox mb(QMessageBox::Icon::Question, tr("Update Available"), update_message, QMessageBox::Yes | QMessageBox::No, m_downloader->get_progress_dialog() ? m_downloader->get_progress_dialog() : m_parent); @@ -434,23 +447,22 @@ void update_manager::update(bool auto_accept) changelog_browser->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); changelog_browser->setHtml(QStringLiteral("

%0

%1").arg(tr("Changelog:"), changelog_html)); - // Let Qt measure the actual rendered HTML content - const int doc_width = static_cast(changelog_browser->document()->idealWidth()) + 20; - const int doc_height = static_cast(changelog_browser->document()->size().height()) + 10; + // Measure height for 6 entries directly + int browser_height; - // For >6 entries, subtract the excess entry heights from the full document height - const int entry_count = static_cast(m_update_info.changelog.size()); - int browser_height = doc_height; - - if (entry_count > 6) + if (changelog_count > 6) { - const QFontMetrics fm = changelog_browser->fontMetrics(); - browser_height = doc_height - (entry_count - 6) * fm.lineSpacing(); + // Temporarily render only 6 entries to get exact pixel height + changelog_browser->setHtml(QStringLiteral("

%0

%1").arg(tr("Changelog:"), changelog_html_capped)); + browser_height = static_cast(changelog_browser->document()->size().height()) + 10; + changelog_browser->setHtml(QStringLiteral("

%0

%1").arg(tr("Changelog:"), changelog_html)); + } + else + { + browser_height = static_cast(changelog_browser->document()->size().height()) + 10; } - changelog_browser->setMinimumWidth(doc_width); - changelog_browser->setMinimumHeight(browser_height); - changelog_browser->setMaximumHeight(browser_height); + changelog_browser->setFixedSize(500, browser_height); changelog_browser->setVisible(false); const QString show_text = tr("Show Changelog"); @@ -465,11 +477,7 @@ void update_manager::update(bool auto_accept) const bool becoming_visible = !changelog_browser->isVisible(); changelog_browser->setVisible(becoming_visible); toggle_btn->setText(becoming_visible ? hide_text : show_text); - - // Keep width locked, only adjust height - const int w = mb.width(); mb.adjustSize(); - mb.setFixedWidth(w); }); } @@ -486,21 +494,11 @@ void update_manager::update(bool auto_accept) QLabel* prompt_label = new QLabel(prompt_text, &mb); grid->addWidget(prompt_label, row++, 0, 1, cols); + // Re-add button box at the bottom if (button_box) grid->addWidget(button_box, row, 0, 1, cols); } - // Lock dialog width: temporarily expand to measure, then collapse - if (QTextBrowser* browser = mb.findChild()) - { - browser->setVisible(true); - mb.adjustSize(); - const int expanded_width = mb.width(); - browser->setVisible(false); - mb.setFixedWidth(expanded_width); - mb.adjustSize(); - } - update_log.notice("Asking user for permission to update..."); if (mb.exec() == QMessageBox::No)