From c0b2376b1435673ce72c90f8db3cc7042070e267 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 28 Dec 2025 23:34:13 +0600 Subject: [PATCH 1/4] Revert "Manager: Fix duplicate call on details keys" This reverts commit 1585efbef697dbe99c350195afe52520bd9ec787. --- src/qt/qt_vmmanager_detailsection.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index 635dcd0f9..9a849b892 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -200,6 +200,7 @@ VMManagerDetailSection::setSections() } else { labelKey = new QLabel(); labelKey->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft); } labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); From 7bc12acca7c375cbbe222d34811ae26607cb287b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 28 Dec 2025 23:34:25 +0600 Subject: [PATCH 2/4] Revert "Manager: Streamline details label caching code to address an incorrect assumption" This reverts commit 9bc36f74e81b40a9fe9594bc2fef92db9ddd55a7. --- src/qt/qt_vmmanager_detailsection.cpp | 28 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index 9a849b892..a025abb06 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -179,10 +179,9 @@ VMManagerDetailSection::setSections() continue; } - auto item = frameGridLayout->itemAtPosition(row, 1); - QLabel *label; - if (item) { - label = (QLabel *) item->widget(); + auto item = frameGridLayout->itemAtPosition(row, 1); + auto label = item ? ((QLabel *) item->widget()) : nullptr; + if (label) { label->setVisible(true); } else { label = new QLabel(); @@ -194,21 +193,25 @@ VMManagerDetailSection::setSections() item = frameGridLayout->itemAtPosition(row, 0); if (!labelKey) { - if (item) { + if (item) labelKey = (QLabel *) item->widget(); + if (labelKey) { labelKey->setVisible(true); } else { labelKey = new QLabel(); - labelKey->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + labelKey->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft); } labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); } else if (item) { - item->widget()->setVisible(false); + label = (QLabel *) item->widget(); + if (label) + label->setVisible(false); } - if (!frameGridLayout->itemAtPosition(row, 2)) { + item = frameGridLayout->itemAtPosition(row, 2); + if (!item || !item->widget()) { const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); frameGridLayout->addItem(hSpacer, row, 2); } @@ -221,10 +224,13 @@ VMManagerDetailSection::setSections() int prevUsedRows = usedRows; usedRows = row; for (; row < prevUsedRows; row++) { - for (int i = 0; i <= 1; i++) { + for (int i = 0; i <= 2; i++) { auto item = frameGridLayout->itemAtPosition(row, i); - if (item) - item->widget()->setVisible(false); + if (item) { + auto widget = item->widget(); + if (widget) + widget->setVisible(false); + } } } From 6adcdbe68dc2464c1904bc2fb3aae80c541bfa13 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 28 Dec 2025 23:34:35 +0600 Subject: [PATCH 3/4] Revert "Manager: Improve machine load times by caching details labels" This reverts commit 9366ddd60d83f3d0ef9984aaaedba1ed71e2cc79. --- src/qt/qt_vmmanager_details.cpp | 4 -- src/qt/qt_vmmanager_detailsection.cpp | 80 +++++++++------------------ src/qt/qt_vmmanager_detailsection.hpp | 1 - 3 files changed, 27 insertions(+), 58 deletions(-) diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index 59491d89e..396997e7d 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -263,8 +263,6 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) // * First you clear it with VMManagerDetailSection::clear() // * Then you add each line with VMManagerDetailSection::addSection() - setUpdatesEnabled(false); - // System systemSection->clear(); systemSection->addSection("Machine", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Machine)); @@ -322,8 +320,6 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) inputSection->setSections(); portsSection->setSections(); otherSection->setSections(); - - setUpdatesEnabled(true); } void diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index a025abb06..0b19f77cd 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -39,10 +39,6 @@ VMManagerDetailSection:: ui->setupUi(this); frameGridLayout = new QGridLayout(); - frameGridLayout->setContentsMargins(getMargins(MarginSection::DisplayGrid)); - ui->detailFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); - ui->detailFrame->setLayout(frameGridLayout); - // Create the collapse button, set the name and add it to the layout collapseButton = new CollapseButton(); setSectionName(sectionName); @@ -132,8 +128,6 @@ VMManagerDetailSection:: innerFrameLayout->addWidget(buttonWidget); innerFrameLayout->addWidget(frame); setLayout(outerFrameLayout); - - usedRows = 0; } VMManagerDetailSection::~VMManagerDetailSection() @@ -162,7 +156,6 @@ VMManagerDetailSection::setupMainLayout() delete mainLayout; mainLayout = new QVBoxLayout; } - void VMManagerDetailSection::setSections() { @@ -179,71 +172,52 @@ VMManagerDetailSection::setSections() continue; } - auto item = frameGridLayout->itemAtPosition(row, 1); - auto label = item ? ((QLabel *) item->widget()) : nullptr; - if (label) { - label->setVisible(true); - } else { - label = new QLabel(); - label->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); - label->setTextInteractionFlags(label->textInteractionFlags() | Qt::TextSelectableByMouse); - frameGridLayout->addWidget(label, row, 1, Qt::AlignLeft); - } - label->setText(line); + const auto labelValue = new QLabel(); + labelValue->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); + labelValue->setTextInteractionFlags(labelValue->textInteractionFlags() | Qt::TextSelectableByMouse); + labelValue->setText(line); + frameGridLayout->addWidget(labelValue, row, 1, Qt::AlignLeft); - item = frameGridLayout->itemAtPosition(row, 0); if (!labelKey) { - if (item) - labelKey = (QLabel *) item->widget(); - if (labelKey) { - labelKey->setVisible(true); - } else { - labelKey = new QLabel(); - labelKey->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); - labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); - frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft); - } + labelKey = new QLabel(); + labelKey->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + labelKey->setTextInteractionFlags(labelValue->textInteractionFlags()); labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); - } else if (item) { - label = (QLabel *) item->widget(); - if (label) - label->setVisible(false); - } - - item = frameGridLayout->itemAtPosition(row, 2); - if (!item || !item->widget()) { - const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - frameGridLayout->addItem(hSpacer, row, 2); + frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft); } + const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + frameGridLayout->addItem(hSpacer, row, 2); empty = false; row++; } } - int prevUsedRows = usedRows; - usedRows = row; - for (; row < prevUsedRows; row++) { - for (int i = 0; i <= 2; i++) { - auto item = frameGridLayout->itemAtPosition(row, i); - if (item) { - auto widget = item->widget(); - if (widget) - widget->setVisible(false); - } - } - } - collapseButton->setContent(ui->detailFrame); if (!empty) setVisible(true); } - void VMManagerDetailSection::clear() { sections.clear(); setVisible(false); + + // Clear everything out + if (frameGridLayout) { + while (frameGridLayout->count()) { + QLayoutItem *cur_item = frameGridLayout->takeAt(0); + if (cur_item->widget()) + delete cur_item->widget(); + delete cur_item; + } + } + + delete frameGridLayout; + frameGridLayout = new QGridLayout(); + frameGridLayout->setContentsMargins(getMargins(MarginSection::DisplayGrid)); + ui->detailFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + ui->detailFrame->setLayout(frameGridLayout); } #ifdef Q_OS_WINDOWS diff --git a/src/qt/qt_vmmanager_detailsection.hpp b/src/qt/qt_vmmanager_detailsection.hpp index 39ec51f16..71a3c992e 100644 --- a/src/qt/qt_vmmanager_detailsection.hpp +++ b/src/qt/qt_vmmanager_detailsection.hpp @@ -91,7 +91,6 @@ private: static QMargins getMargins(MarginSection section); QString sectionName; - int usedRows; struct DetailSection { QString name; From 909e893f4dcf516b909de0ea9ffff1fa673f70ba Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 28 Dec 2025 23:43:04 +0600 Subject: [PATCH 4/4] Improve slow loading speeds for manager --- src/include/86box/machine.h | 1 + src/machine/machine_table.c | 15 +++++++++++++++ src/qt/qt_vmmanager_system.cpp | 11 ++++------- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index b39ecdad6..de4e75ff8 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -392,6 +392,7 @@ extern const char * machine_getname_ex(int m); extern const char * machine_get_internal_name(void); extern const char * machine_get_nvr_name(void); extern int machine_get_machine_from_internal_name(const char *s); +extern int machine_get_machine_from_internal_name_ex(const char *s); /* returns -1 if internal name does not exist. */ extern void machine_init(void); #ifdef EMU_DEVICE_H extern const device_t *machine_get_kbc_device(int m); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index e404a3f4a..cefc25878 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -20709,6 +20709,21 @@ machine_get_machine_from_internal_name(const char *s) return 0; } + +int +machine_get_machine_from_internal_name_ex(const char *s) +{ + int c = 0; + + while (machines[c].init != NULL) { + if (!strcmp(machines[c].internal_name, s)) + return c; + c++; + } + + return -1; +} + int machine_has_mouse(void) { diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 5c9fd3d01..159659ebf 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -521,14 +521,11 @@ VMManagerSystem::setupVars() auto machine_name = QString(); int i = 0; int ram_granularity = 0; + int ci = machine_get_machine_from_internal_name_ex(machine_config["machine"].toUtf8()); // Machine - for (int ci = 0; ci < machine_count(); ++ci) { - if (machine_available(ci)) { - if (machines[ci].internal_name == machine_config["machine"]) { - machine_name = machines[ci].name; - ram_granularity = machines[ci].ram.step; - } - } + if (ci != -1 && machine_available(ci)) { + machine_name = machines[ci].name; + ram_granularity = machines[ci].ram.step; } display_table[VMManager::Display::Name::Machine] = machine_name;