From 75499ad251b5aac70f3308dc151e32e9bcd1fb92 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 16:11:04 +0500 Subject: [PATCH 01/18] Manager: Allow starting the currently selected VM by pressing Enter --- src/qt/qt_vmmanager_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 54e0c619f..f81d09b38 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -404,7 +404,7 @@ illegal_chars: ui->listView->setCurrentIndex(first_index); } - connect(ui->listView, &QListView::doubleClicked, this, &VMManagerMain::startButtonPressed); + connect(ui->listView, &QListView::activated, this, &VMManagerMain::startButtonPressed); // Load and apply settings loadSettings(); From c9fb23c5b1e143bdb7fb46151a8294791114db90 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 16:12:05 +0500 Subject: [PATCH 02/18] Manager: Fix the search field placeholder not being updated on language change --- src/qt/qt_vmmanager_main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index f81d09b38..16e6a02ad 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -834,6 +834,7 @@ VMManagerMain::onLanguageUpdated() { vm_model->refreshConfigs(); modelDataChange(); + ui->searchBar->setPlaceholderText(tr("Search")); /* Hack to work around details widgets not being re-translatable without going through layers of abstraction */ ui->detailsArea->layout()->removeWidget(vm_details); From 50023a656cd7d8cd2a05cccfeda09e05ed7a185f Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 16:15:48 +0500 Subject: [PATCH 03/18] Manager: Disconnect previous signal connections from the process object before starting the VM Fixes crash dialog appearing more than one time under certain circumstances --- src/qt/qt_vmmanager_system.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 5038732d1..898041ba4 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -440,6 +440,7 @@ VMManagerSystem::launchMainProcess() process->start(); updateTimestamp(); + disconnect(process, QOverload::of(&QProcess::finished), nullptr, nullptr); connect(process, QOverload::of(&QProcess::finished), [=](const int exitCode, const QProcess::ExitStatus exitStatus) { if (exitCode != 0 || exitStatus != QProcess::NormalExit) { @@ -501,6 +502,7 @@ VMManagerSystem::launchSettings() qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments(); process->start(); + disconnect(process, QOverload::of(&QProcess::finished), nullptr, nullptr); connect(process, QOverload::of(&QProcess::finished), [=](const int exitCode, const QProcess::ExitStatus exitStatus) { if (exitCode != 0 || exitStatus != QProcess::NormalExit) { From 457b5c3c7a1042d14b805de1843b68584bec7006 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 16:17:23 +0500 Subject: [PATCH 04/18] Manager: Fix exit code's hex readout only showing if a VM is invoked in settings-only mode --- src/qt/qt_vmmanager_system.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 898041ba4..e4618e9f4 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -446,7 +446,7 @@ VMManagerSystem::launchMainProcess() if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qInfo().nospace().noquote() << "Abnormal program termination while launching main process: exit code " << exitCode << ", exit status " << exitStatus; QMessageBox::critical(this, tr("Virtual machine crash"), - tr("The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2.").arg(displayName, QString::number(exitCode))); + tr("The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2.").arg(displayName, QString("%1 (0x%2)").arg(QString::number(exitCode), QString::number(exitCode, 16)))); return; } }); From 11da4936fd381238795c69d7faf3cb24c18a91e2 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 16:18:26 +0500 Subject: [PATCH 05/18] Manager: Increase the machine status text size in the list view Should help with readability in CJK languages with 100% scale --- src/qt/qt_vmmanager_listviewdelegate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_listviewdelegate.cpp b/src/qt/qt_vmmanager_listviewdelegate.cpp index 88d123ce9..2935cdbe4 100644 --- a/src/qt/qt_vmmanager_listviewdelegate.cpp +++ b/src/qt/qt_vmmanager_listviewdelegate.cpp @@ -246,7 +246,7 @@ VMManagerListViewDelegateStyle::statusBox(const QStyleOptionViewItem &option, qreal VMManagerListViewDelegateStyle::statusFontPointSize(const QFont &f) const { - return 0.75 * f.pointSize(); + return 0.9 * f.pointSize(); // return 1*f.pointSize(); } From fd3a79e526956de247e43e817e11f99320cef135 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 17:44:21 +0500 Subject: [PATCH 06/18] Manager: Simplify the connection chain for the configuration refresh signals This allows refreshing the config without redrawing the entire details pane Also refresh the config and screenshots on VM termination --- src/qt/qt_vmmanager_details.cpp | 11 +++++++++++ src/qt/qt_vmmanager_details.hpp | 1 + src/qt/qt_vmmanager_main.cpp | 16 ---------------- src/qt/qt_vmmanager_main.hpp | 1 - src/qt/qt_vmmanager_system.cpp | 5 ++++- src/qt/qt_vmmanager_system.hpp | 3 +-- 6 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index e0cabc53c..4d12ae1e1 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -199,6 +199,8 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) disconnect(configureButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::launchSettings); disconnect(cadButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::cadButtonPressed); + disconnect(sysconfig, &VMManagerSystem::configurationChanged, this, &VMManagerDetails::onConfigUpdated); + sysconfig = passed_sysconfig; connect(resetButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::restartButtonPressed); connect(stopButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::shutdownForceButtonPressed); @@ -234,9 +236,18 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) disconnect(sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerDetails::updateProcessStatus); connect(sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerDetails::updateProcessStatus); + connect(sysconfig, &VMManagerSystem::configurationChanged, this, &VMManagerDetails::onConfigUpdated); + updateProcessStatus(); } +void +VMManagerDetails::onConfigUpdated(VMManagerSystem *passed_sysconfig) +{ + updateConfig(passed_sysconfig); + updateScreenshots(passed_sysconfig); +} + void VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) { diff --git a/src/qt/qt_vmmanager_details.hpp b/src/qt/qt_vmmanager_details.hpp index ec71d4cd8..efd2ec6cd 100644 --- a/src/qt/qt_vmmanager_details.hpp +++ b/src/qt/qt_vmmanager_details.hpp @@ -87,6 +87,7 @@ private slots: void saveNotes() const; void nextScreenshot(); void previousScreenshot(); + void onConfigUpdated(VMManagerSystem *passed_sysconfig); protected: bool eventFilter(QObject *watched, QEvent *event) override; diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 16e6a02ad..4dd0422f3 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -456,19 +456,9 @@ VMManagerMain::currentSelectionChanged(const QModelIndex ¤t, if (!current.isValid()) return; - /* hack to prevent strange segfaults when adding a machine after - removing all machines previously */ - if (selected_sysconfig->config_signal_connected == true) { - disconnect(selected_sysconfig, &VMManagerSystem::configurationChanged, this, &VMManagerMain::onConfigUpdated); - selected_sysconfig->config_signal_connected = false; - } const auto mapped_index = proxy_model->mapToSource(current); selected_sysconfig = vm_model->getConfigObjectForIndex(mapped_index); vm_details->updateData(selected_sysconfig); - if (selected_sysconfig->config_signal_connected == false) { - connect(selected_sysconfig, &VMManagerSystem::configurationChanged, this, &VMManagerMain::onConfigUpdated); - selected_sysconfig->config_signal_connected = true; - } // Emit that the selection changed, include with the process state emit selectionChanged(current, selected_sysconfig->process->state()); @@ -593,12 +583,6 @@ VMManagerMain::currentSelectionIsValid() const return ui->listView->currentIndex().isValid() && selected_sysconfig->isValid(); } -void -VMManagerMain::onConfigUpdated(const QString &uuid) -{ - if (selected_sysconfig->uuid == uuid) - vm_details->updateData(selected_sysconfig); -} // Used from MainWindow during app exit to obtain and persist the current selection QString VMManagerMain::getCurrentSelection() const diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index b08939d1c..9336f8e23 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -83,7 +83,6 @@ public slots: #ifdef Q_OS_WINDOWS void onDarkModeUpdated(); #endif - void onConfigUpdated(const QString &uuid); int getActiveMachineCount(); QList getPaneSizes() const; diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index e4618e9f4..362ed403f 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -449,6 +449,8 @@ VMManagerSystem::launchMainProcess() tr("The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2.").arg(displayName, QString("%1 (0x%2)").arg(QString::number(exitCode), QString::number(exitCode, 16)))); return; } + + configurationChangeReceived(); }); } @@ -1241,8 +1243,9 @@ void VMManagerSystem::configurationChangeReceived() { reloadConfig(); - emit configurationChanged(this->uuid); + emit configurationChanged(this); } + void VMManagerSystem::reloadConfig() { diff --git a/src/qt/qt_vmmanager_system.hpp b/src/qt/qt_vmmanager_system.hpp index 96c794df3..62789b70a 100644 --- a/src/qt/qt_vmmanager_system.hpp +++ b/src/qt/qt_vmmanager_system.hpp @@ -138,7 +138,6 @@ public: QProcess *process = new QProcess(); bool window_obscured; - bool config_signal_connected = false; QString getDisplayValue(VMManager::Display::Name key); QFileInfoList getScreenshots(); @@ -158,7 +157,7 @@ signals: void windowStatusChanged(); void itemDataChanged(); void clientProcessStatusChanged(); - void configurationChanged(const QString &uuid); + void configurationChanged(VMManagerSystem *sysconfig); void globalConfigurationChanged(); private: From d0926809e56ae87b433ea57bfd83652feb54c81e Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 5 Dec 2025 19:21:58 +0500 Subject: [PATCH 07/18] Manager: Don't add machine configuration fields to the search index --- src/qt/qt_vmmanager_system.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 362ed403f..748d60b85 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -305,15 +305,13 @@ void VMManagerSystem::generateSearchTerms() { searchTerms.clear(); - for (const auto &config_key : config_hash.keys()) { - // searchTerms.append(config_hash[config_key].values()); - // brute force temporarily don't add paths - for (const auto &value : config_hash[config_key].values()) { - if (!value.startsWith("/")) - searchTerms.append(value); - } - } - searchTerms.append(display_table.values()); +#if 0 + for (const auto &value : display_table.values()) + if (value.contains(";")) + searchTerms.append(value.split(';')); + else + searchTerms.append(value); +#endif searchTerms.append(displayName); searchTerms.append(config_name); QRegularExpression whitespaceRegex("\\s+"); From 1dd681f33a1e73c04d77907d9fc4c09264135bfc Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 6 Dec 2025 03:23:42 +0500 Subject: [PATCH 08/18] Manager: Initial preparation for re-enabling the toolbar: * Increase button size and display text under icons * Remove the duplicate search bar * Move the existing search bar to the top of the machine list --- src/qt/qt_vmmanager_main.ui | 26 +++++++++++------------ src/qt/qt_vmmanager_mainwindow.cpp | 32 +--------------------------- src/qt/qt_vmmanager_mainwindow.ui | 34 ++++++++++-------------------- 3 files changed, 25 insertions(+), 67 deletions(-) diff --git a/src/qt/qt_vmmanager_main.ui b/src/qt/qt_vmmanager_main.ui index 566cea862..a79045aac 100644 --- a/src/qt/qt_vmmanager_main.ui +++ b/src/qt/qt_vmmanager_main.ui @@ -60,6 +60,19 @@ 0 + + + + Qt::ClickFocus + + + Search + + + true + + + @@ -76,19 +89,6 @@ - - - - Qt::ClickFocus - - - Search - - - true - - - diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index 0e44e6a8c..c54fff30b 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -24,9 +24,6 @@ #include "qt_progsettings.hpp" #include "qt_util.hpp" -#include -#include -#include #include #include @@ -70,11 +67,7 @@ VMManagerMainWindow:: connect(ui->actionCheck_for_updates, &QAction::triggered, this, &VMManagerMainWindow::checkForUpdatesTriggered); #endif - // TODO: Remove all of this (all the way to END REMOVE) once certain the search will no longer be in the toolbar. - // BEGIN REMOVE - // Everything is still setup here for it but it is all hidden. None of it will be - // needed if the search stays in VMManagerMain - ui->actionStartPause->setEnabled(true); + // TODO: Unhide the toolbar once the actions are fixed to properly update on VM status change ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); @@ -82,36 +75,13 @@ VMManagerMainWindow:: ui->actionForce_Shutdown->setEnabled(false); ui->actionCtrl_Alt_Del->setEnabled(false); - const auto searchBar = new QLineEdit(); - searchBar->setMinimumWidth(150); - searchBar->setPlaceholderText(tr("Search")); - searchBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); - searchBar->setClearButtonEnabled(true); - // Spacer to make the search go all the way to the right - const auto spacer = new QWidget(); - spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - ui->toolBar->addWidget(spacer); - ui->toolBar->addWidget(searchBar); - // Connect signal for search - connect(searchBar, &QLineEdit::textChanged, vmm, &VMManagerMain::searchSystems); // Preferences connect(ui->actionPreferences, &QAction::triggered, this, &VMManagerMainWindow::preferencesTriggered); - // Create a completer for the search bar - auto *completer = new QCompleter(this); - completer->setCaseSensitivity(Qt::CaseInsensitive); - completer->setFilterMode(Qt::MatchContains); - // Get the completer list - const auto allStrings = vmm->getSearchCompletionList(); - // Set up the completer - auto *completerModel = new QStringListModel(allStrings, completer); - completer->setModel(completerModel); - searchBar->setCompleter(completer); #ifdef Q_OS_WINDOWS ui->toolBar->setBackgroundRole(QPalette::Light); #endif ui->toolBar->setVisible(false); - // END REMOVE // Status bar widgets statusLeft->setAlignment(Qt::AlignLeft); diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index c45e83741..f4168c8ad 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -11,7 +11,7 @@ - 86Box VM Manager + 86Box VM Manager @@ -23,6 +23,9 @@ 21 + + Qt::PreventContextMenu + &Tools @@ -56,22 +59,25 @@ true - toolBar + toolBar false + + Qt::PreventContextMenu + Qt::TopToolBarArea - 16 - 16 + 32 + 32 - Qt::ToolButtonIconOnly + Qt::ToolButtonTextUnderIcon TopToolBarArea @@ -88,9 +94,6 @@ - - true - :/menuicons/qt/icons/run.ico:/menuicons/qt/icons/run.ico @@ -206,21 +209,6 @@ QAction::PreferencesRole - - - true - - - - :/menuicons/qt/icons/run.ico:/menuicons/qt/icons/run.ico - - - &Start - - - false - - &Check for updates... From 85b26b4aed53a49c25c7f15b8206cfde8bfd17b0 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 6 Dec 2025 03:31:05 +0500 Subject: [PATCH 09/18] Manager toolbar: Re-enable the Ctrl+Alt+Del button --- src/qt/qt_vmmanager_main.cpp | 9 +++++++++ src/qt/qt_vmmanager_main.hpp | 1 + src/qt/qt_vmmanager_mainwindow.cpp | 1 + src/qt/qt_vmmanager_mainwindow.ui | 2 +- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 4dd0422f3..e9872bf96 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -518,6 +518,15 @@ VMManagerMain::shutdownForceButtonPressed() const selected_sysconfig->shutdownForceButtonPressed(); } +void +VMManagerMain::cadButtonPressed() const +{ + if (!currentSelectionIsValid()) + return; + + selected_sysconfig->cadButtonPressed(); +} + // This function doesn't appear to be needed any longer void VMManagerMain::refresh() diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index 9336f8e23..75b626959 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -67,6 +67,7 @@ public slots: void pauseButtonPressed() const; void shutdownRequestButtonPressed() const; void shutdownForceButtonPressed() const; + void cadButtonPressed() const; void searchSystems(const QString &text) const; void newMachineWizard(); void updateGlobalSettings(); diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index c54fff30b..305c5b07d 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -58,6 +58,7 @@ VMManagerMainWindow:: connect(ui->actionSettings, &QAction::triggered, vmm, &VMManagerMain::settingsButtonPressed); connect(ui->actionHard_Reset, &QAction::triggered, vmm, &VMManagerMain::restartButtonPressed); connect(ui->actionForce_Shutdown, &QAction::triggered, vmm, &VMManagerMain::shutdownForceButtonPressed); + connect(ui->actionCtrl_Alt_Del, &QAction::triggered, vmm, &VMManagerMain::cadButtonPressed); // Set up menu actions // (Disable this if the EMU_BUILD_NUM == 0) diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index f4168c8ad..95e5cce74 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -159,7 +159,7 @@ Ctrl+Alt+Del - false + true false From 517a9f2c02a0e77838d49a28bc2d3ce8f4e85f03 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 6 Dec 2025 03:46:03 +0500 Subject: [PATCH 10/18] Manager: Remove an unused function --- src/qt/qt_vmmanager_main.cpp | 13 ------------- src/qt/qt_vmmanager_main.hpp | 1 - 2 files changed, 14 deletions(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index e9872bf96..0a3c181f4 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -527,19 +527,6 @@ VMManagerMain::cadButtonPressed() const selected_sysconfig->cadButtonPressed(); } -// This function doesn't appear to be needed any longer -void -VMManagerMain::refresh() -{ - const auto current_index = ui->listView->currentIndex(); - emit selectionChanged(current_index, selected_sysconfig->process->state()); - - // if(!selected_sysconfig->config_file.path().isEmpty()) { - if (!selected_sysconfig->isValid()) { - // what was happening here? - } -} - void VMManagerMain::updateDisplayName(const QModelIndex &index) { diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index 75b626959..3da9e5934 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -106,7 +106,6 @@ private: // const QItemSelection &deselected); void currentSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous); - void refresh(); void updateDisplayName(const QModelIndex &index); void loadSettings(); [[nodiscard]] bool currentSelectionIsValid() const; From b5c6ebd5897a3d41a557bdb4f76adc65bc6a0cfb Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 6 Dec 2025 03:47:23 +0500 Subject: [PATCH 11/18] Manager toolbar: Improve the logic for updating the toolbar button state on VM selection change --- src/qt/qt_vmmanager_main.cpp | 8 ++++-- src/qt/qt_vmmanager_main.hpp | 2 +- src/qt/qt_vmmanager_mainwindow.cpp | 44 +++++++++++++++++++++--------- src/qt/qt_vmmanager_mainwindow.hpp | 2 +- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 0a3c181f4..1d32bf402 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -423,9 +423,11 @@ illegal_chars: completer->setModel(completerModel); ui->searchBar->setCompleter(completer); - // Set initial status bar after the event loop starts QTimer::singleShot(0, this, [this] { + // Set initial status bar after the event loop starts emit updateStatusRight(machineCountString()); + // Tell the mainwindow to enable the toolbar buttons if needed + emit selectionChanged((this->proxy_model->rowCount(QModelIndex()) > 0) ? selected_sysconfig : nullptr); }); #if EMU_BUILD_NUM != 0 @@ -461,7 +463,7 @@ VMManagerMain::currentSelectionChanged(const QModelIndex ¤t, vm_details->updateData(selected_sysconfig); // Emit that the selection changed, include with the process state - emit selectionChanged(current, selected_sysconfig->process->state()); + emit selectionChanged(selected_sysconfig); } void @@ -722,6 +724,8 @@ VMManagerMain::deleteSystem(VMManagerSystem *sysconfig) delete vm_details; vm_details = new VMManagerDetails(); ui->detailsArea->layout()->addWidget(vm_details); + /* tell the mainwindow to disable the toolbar buttons */ + emit selectionChanged(nullptr); } } } diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index 3da9e5934..54a6a4e72 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -56,7 +56,7 @@ public: Settings, }; signals: - void selectionChanged(const QModelIndex ¤tSelection, QProcess::ProcessState processState); + void selectionChanged(VMManagerSystem *sysconfig); void updateStatusLeft(const QString &text); void updateStatusRight(const QString &text); diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index 305c5b07d..152b64bd7 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -69,12 +69,14 @@ VMManagerMainWindow:: #endif // TODO: Unhide the toolbar once the actions are fixed to properly update on VM status change + ui->actionStartPause->setEnabled(false); ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); ui->actionHard_Reset->setEnabled(false); ui->actionForce_Shutdown->setEnabled(false); ui->actionCtrl_Alt_Del->setEnabled(false); + ui->actionSettings->setEnabled(false); // Preferences connect(ui->actionPreferences, &QAction::triggered, this, &VMManagerMainWindow::preferencesTriggered); @@ -147,29 +149,45 @@ VMManagerMainWindow::~VMManagerMainWindow() = default; void -VMManagerMainWindow::vmmSelectionChanged(const QModelIndex ¤tSelection, const QProcess::ProcessState processState) const +VMManagerMainWindow::vmmSelectionChanged(const VMManagerSystem *sysconfig) const { - if (processState == QProcess::Running) { - ui->actionStartPause->setEnabled(true); - ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/pause.ico")); - ui->actionStartPause->setText(tr("Pause")); - ui->actionStartPause->setToolTip(tr("Pause")); + if (sysconfig == nullptr) { + // This doubles both as a safety check and a way to disable + // all machine-related buttons when no machines are present + ui->actionStartPause->setEnabled(false); + ui->actionSettings->setEnabled(false); + ui->actionHard_Reset->setEnabled(false); + ui->actionForce_Shutdown->setEnabled(false); + ui->actionCtrl_Alt_Del->setEnabled(false); + return; + } + const bool running = sysconfig->process->state() == QProcess::ProcessState::Running; + + if (running) { + if (sysconfig->getProcessStatus() == VMManagerSystem::ProcessStatus::Running) { + ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/pause.ico")); + ui->actionStartPause->setText(tr("Pause")); + ui->actionStartPause->setToolTip(tr("Pause")); + } else { + ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + ui->actionStartPause->setText(tr("Continue")); + ui->actionStartPause->setToolTip(tr("Continue")); + } disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); - ui->actionHard_Reset->setEnabled(true); - ui->actionForce_Shutdown->setEnabled(true); - ui->actionCtrl_Alt_Del->setEnabled(true); } else { - ui->actionStartPause->setEnabled(true); ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); - ui->actionHard_Reset->setEnabled(false); - ui->actionForce_Shutdown->setEnabled(false); - ui->actionCtrl_Alt_Del->setEnabled(false); } + + ui->actionStartPause->setEnabled(!sysconfig->window_obscured); + ui->actionSettings->setEnabled(!sysconfig->window_obscured); + ui->actionHard_Reset->setEnabled(sysconfig->window_obscured ? false : running); + ui->actionForce_Shutdown->setEnabled(sysconfig->window_obscured ? false : running); + ui->actionCtrl_Alt_Del->setEnabled(sysconfig->window_obscured ? false : running); } void VMManagerMainWindow::preferencesTriggered() diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index c0e06f551..38263e9ae 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -55,7 +55,7 @@ public slots: #endif private slots: - void vmmSelectionChanged(const QModelIndex ¤tSelection, QProcess::ProcessState processState) const; + void vmmSelectionChanged(const VMManagerSystem *sysconfig) const; void preferencesTriggered(); #if EMU_BUILD_NUM != 0 void checkForUpdatesTriggered(); From c325ea0aec91716be6a5a338c3e0bf331cf49359 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 6 Dec 2025 03:51:07 +0500 Subject: [PATCH 12/18] Manager toolbar: Cache run/pause icons --- src/qt/qt_vmmanager_mainwindow.cpp | 11 +++++++---- src/qt/qt_vmmanager_mainwindow.hpp | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index 152b64bd7..a0b514672 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -46,6 +46,9 @@ VMManagerMainWindow:: vmm_main_window = this; + runIcon = QIcon(":/menuicons/qt/icons/run.ico"); + pauseIcon = QIcon(":/menuicons/qt/icons/pause.ico"); + // Connect signals from the VMManagerMain widget connect(vmm, &VMManagerMain::selectionChanged, this, &VMManagerMainWindow::vmmSelectionChanged); @@ -70,7 +73,7 @@ VMManagerMainWindow:: // TODO: Unhide the toolbar once the actions are fixed to properly update on VM status change ui->actionStartPause->setEnabled(false); - ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + ui->actionStartPause->setIcon(runIcon); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); ui->actionHard_Reset->setEnabled(false); @@ -165,18 +168,18 @@ VMManagerMainWindow::vmmSelectionChanged(const VMManagerSystem *sysconfig) const if (running) { if (sysconfig->getProcessStatus() == VMManagerSystem::ProcessStatus::Running) { - ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/pause.ico")); + ui->actionStartPause->setIcon(pauseIcon); ui->actionStartPause->setText(tr("Pause")); ui->actionStartPause->setToolTip(tr("Pause")); } else { - ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + ui->actionStartPause->setIcon(runIcon); ui->actionStartPause->setText(tr("Continue")); ui->actionStartPause->setToolTip(tr("Continue")); } disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); } else { - ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + ui->actionStartPause->setIcon(runIcon); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index 38263e9ae..c619a657e 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -45,6 +45,8 @@ private: void saveSettings() const; QLabel *statusLeft; QLabel *statusRight; + QIcon runIcon; + QIcon pauseIcon; public slots: void setStatusLeft(const QString &text) const; From 26f4916c3266e14aa1644d1733508e2c6698fcf1 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 6 Dec 2025 04:03:48 +0500 Subject: [PATCH 13/18] Manager: Unhide the toolbar --- src/qt/qt_vmmanager_mainwindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index a0b514672..55677dac1 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -87,7 +87,6 @@ VMManagerMainWindow:: #ifdef Q_OS_WINDOWS ui->toolBar->setBackgroundRole(QPalette::Light); #endif - ui->toolBar->setVisible(false); // Status bar widgets statusLeft->setAlignment(Qt::AlignLeft); From d2379f1a66ed58c66b296b3aa67845375a39df2d Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sun, 7 Dec 2025 09:27:46 +0500 Subject: [PATCH 14/18] Manager: Sync toolbar button state with selected VM's state --- src/qt/qt_vmmanager_main.cpp | 25 ++++++++++++++++++++++--- src/qt/qt_vmmanager_main.hpp | 3 ++- src/qt/qt_vmmanager_mainwindow.cpp | 8 +++++--- src/qt/qt_vmmanager_mainwindow.hpp | 2 +- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 1d32bf402..f4b1984dc 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -427,7 +427,7 @@ illegal_chars: // Set initial status bar after the event loop starts emit updateStatusRight(machineCountString()); // Tell the mainwindow to enable the toolbar buttons if needed - emit selectionChanged((this->proxy_model->rowCount(QModelIndex()) > 0) ? selected_sysconfig : nullptr); + emit selectionOrStateChanged((this->proxy_model->rowCount(QModelIndex()) > 0) ? selected_sysconfig : nullptr); }); #if EMU_BUILD_NUM != 0 @@ -458,12 +458,21 @@ VMManagerMain::currentSelectionChanged(const QModelIndex ¤t, if (!current.isValid()) return; + disconnect(selected_sysconfig->process, &QProcess::stateChanged, this, &VMManagerMain::vmStateChange); + disconnect(selected_sysconfig, &VMManagerSystem::windowStatusChanged, this, &VMManagerMain::vmStateChange); + disconnect(selected_sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerMain::vmStateChange); + const auto mapped_index = proxy_model->mapToSource(current); selected_sysconfig = vm_model->getConfigObjectForIndex(mapped_index); vm_details->updateData(selected_sysconfig); // Emit that the selection changed, include with the process state - emit selectionChanged(selected_sysconfig); + emit selectionOrStateChanged(selected_sysconfig); + + connect(selected_sysconfig->process, &QProcess::stateChanged, this, &VMManagerMain::vmStateChange); + connect(selected_sysconfig, &VMManagerSystem::windowStatusChanged, this, &VMManagerMain::vmStateChange); + connect(selected_sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerMain::vmStateChange); + } void @@ -719,13 +728,14 @@ VMManagerMain::deleteSystem(VMManagerSystem *sysconfig) delete sysconfig; if (vm_model->rowCount(QModelIndex()) <= 0) { + selected_sysconfig = new VMManagerSystem(); /* no machines left - get rid of the last machine's leftovers */ ui->detailsArea->layout()->removeWidget(vm_details); delete vm_details; vm_details = new VMManagerDetails(); ui->detailsArea->layout()->addWidget(vm_details); /* tell the mainwindow to disable the toolbar buttons */ - emit selectionChanged(nullptr); + emit selectionOrStateChanged(nullptr); } } } @@ -799,6 +809,15 @@ VMManagerMain::modelDataChange() emit updateStatusRight(machineCountString(states)); } +void +VMManagerMain::vmStateChange() +{ + if (!currentSelectionIsValid()) + return; + + emit selectionOrStateChanged(selected_sysconfig); +} + void VMManagerMain::onPreferencesUpdated() { diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index 54a6a4e72..c8e8822ad 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -56,7 +56,7 @@ public: Settings, }; signals: - void selectionChanged(VMManagerSystem *sysconfig); + void selectionOrStateChanged(VMManagerSystem *sysconfig); void updateStatusLeft(const QString &text); void updateStatusRight(const QString &text); @@ -115,6 +115,7 @@ private: #endif void showTextFileContents(const QString &title, const QString &path); private slots: + void vmStateChange(); #if EMU_BUILD_NUM != 0 void backgroundUpdateCheckComplete(const UpdateCheck::UpdateResult &result); void backgroundUpdateCheckError(const QString &errorMsg); diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index 55677dac1..503e2d3ea 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -50,7 +50,7 @@ VMManagerMainWindow:: pauseIcon = QIcon(":/menuicons/qt/icons/pause.ico"); // Connect signals from the VMManagerMain widget - connect(vmm, &VMManagerMain::selectionChanged, this, &VMManagerMainWindow::vmmSelectionChanged); + connect(vmm, &VMManagerMain::selectionOrStateChanged, this, &VMManagerMainWindow::vmmStateChanged); setWindowTitle(tr("%1 VM Manager").arg(EMU_NAME)); setCentralWidget(vmm); @@ -71,7 +71,7 @@ VMManagerMainWindow:: connect(ui->actionCheck_for_updates, &QAction::triggered, this, &VMManagerMainWindow::checkForUpdatesTriggered); #endif - // TODO: Unhide the toolbar once the actions are fixed to properly update on VM status change + // Set up the toolbar ui->actionStartPause->setEnabled(false); ui->actionStartPause->setIcon(runIcon); ui->actionStartPause->setText(tr("Start")); @@ -151,7 +151,7 @@ VMManagerMainWindow::~VMManagerMainWindow() = default; void -VMManagerMainWindow::vmmSelectionChanged(const VMManagerSystem *sysconfig) const +VMManagerMainWindow::vmmStateChanged(const VMManagerSystem *sysconfig) const { if (sysconfig == nullptr) { // This doubles both as a safety check and a way to disable @@ -176,12 +176,14 @@ VMManagerMainWindow::vmmSelectionChanged(const VMManagerSystem *sysconfig) const ui->actionStartPause->setToolTip(tr("Continue")); } disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); + disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); } else { ui->actionStartPause->setIcon(runIcon); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); + disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); } diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index c619a657e..067efa4fd 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -57,7 +57,7 @@ public slots: #endif private slots: - void vmmSelectionChanged(const VMManagerSystem *sysconfig) const; + void vmmStateChanged(const VMManagerSystem *sysconfig) const; void preferencesTriggered(); #if EMU_BUILD_NUM != 0 void checkForUpdatesTriggered(); From f3168b4187c6b8a27fa586568600c0f9b8f1475e Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sun, 7 Dec 2025 14:40:33 +0500 Subject: [PATCH 15/18] Manager: Make the toolbar hideable --- src/qt/qt_vmmanager_mainwindow.cpp | 15 +++++++++++++++ src/qt/qt_vmmanager_mainwindow.hpp | 1 + src/qt/qt_vmmanager_mainwindow.ui | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index 503e2d3ea..cee6cb291 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -106,6 +106,11 @@ VMManagerMainWindow:: { auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General); + ui->actionHide_tool_bar->setChecked(!!config->getStringValue("hide_tool_bar").toInt()); + if (ui->actionHide_tool_bar->isChecked()) + ui->toolBar->setVisible(false); + else + config->setStringValue("hide_tool_bar", "0"); if (!!config->getStringValue("window_remember").toInt()) { QString coords = config->getStringValue("window_coordinates"); if (!coords.isEmpty()) { @@ -217,6 +222,7 @@ VMManagerMainWindow::saveSettings() const const auto currentSelection = vmm->getCurrentSelection(); const auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General); config->setStringValue("last_selection", currentSelection); + config->setStringValue("hide_tool_bar", (ui->toolBar->isVisible() ? "0" : "1")); if (!!config->getStringValue("window_remember").toInt()) { config->setStringValue("window_coordinates", QString::asprintf("%i, %i, %i, %i", this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height())); config->setStringValue("window_maximized", this->isMaximized() ? "1" : ""); @@ -287,6 +293,15 @@ VMManagerMainWindow::setStatusRight(const QString &text) const statusRight->setText(text); } +void +VMManagerMainWindow::on_actionHide_tool_bar_triggered() +{ + const auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General); + int isHidden = config->getStringValue("hide_tool_bar").toInt(); + ui->toolBar->setVisible(!!isHidden); + config->setStringValue("hide_tool_bar", (isHidden ? "0" : "1")); +} + #if EMU_BUILD_NUM != 0 void VMManagerMainWindow::checkForUpdatesTriggered() diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index 067efa4fd..5d96fa5b2 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -58,6 +58,7 @@ public slots: private slots: void vmmStateChanged(const VMManagerSystem *sysconfig) const; + void on_actionHide_tool_bar_triggered(); void preferencesTriggered(); #if EMU_BUILD_NUM != 0 void checkForUpdatesTriggered(); diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index 95e5cce74..badb2e95f 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -41,6 +41,12 @@ + + + &View + + + &Help @@ -50,6 +56,7 @@ + @@ -198,6 +205,17 @@ New machine... + + + true + + + Hide &toolbar + + + Hide tool bar + + &Preferences... From d5b06c50f5b11217ae2b6febc991d7ce6bfe1da0 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Mon, 8 Dec 2025 02:50:10 +0500 Subject: [PATCH 16/18] Manager: Use the new icon for the "New machine" button --- src/qt/qt_vmmanager_mainwindow.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index badb2e95f..99e222d16 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -196,7 +196,7 @@ - :/settings/qt/icons/86Box-yellow.ico:/settings/qt/icons/86Box-yellow.ico + :/menuicons/qt/icons/new_vm.ico:/menuicons/qt/icons/new_vm.ico &New machine... From 2e9dec88919e75870c50396028144edf4f5660c1 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sun, 7 Dec 2025 17:04:30 +0500 Subject: [PATCH 17/18] Qt: Remove the `shortcutVisibleInContextMenu` property from menu items --- src/qt/qt_mainwindow.cpp | 8 -------- src/qt/qt_mainwindow.ui | 12 ------------ src/qt/qt_vmmanager_mainwindow.ui | 3 --- 3 files changed, 23 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index df323986e..cd7523985 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -780,10 +780,6 @@ MainWindow::MainWindow(QWidget *parent) ui->actionUpdate_mouse_every_CPU_frame->setChecked(true); } -#ifdef Q_OS_MACOS - ui->actionCtrl_Alt_Del->setShortcutVisibleInContextMenu(true); - ui->actionTake_screenshot->setShortcutVisibleInContextMenu(true); -#endif if (!vnc_enabled) video_setblit(qt_blit); @@ -811,10 +807,6 @@ MainWindow::MainWindow(QWidget *parent) mtr_stop(); mtr_shutdown(); }; -# ifdef Q_OS_MACOS - ui->actionBegin_trace->setShortcutVisibleInContextMenu(true); - ui->actionEnd_trace->setShortcutVisibleInContextMenu(true); -# endif static bool trace = false; connect(ui->actionBegin_trace, &QAction::triggered, this, [this] { if (trace) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 5b5265b42..46364a258 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -375,9 +375,6 @@ false - - false - @@ -753,9 +750,6 @@ Ctrl+F11 - - false - @@ -833,9 +827,6 @@ false - - false - @@ -847,9 +838,6 @@ false - - false - diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index 99e222d16..2501b1501 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -171,9 +171,6 @@ false - - false - From 74eb21329b350b69756d57b77d274ad1bb3c6659 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Mon, 8 Dec 2025 02:52:40 +0500 Subject: [PATCH 18/18] Qt: Show icons in menu for actions that have them --- src/qt/qt_mainwindow.ui | 15 --------------- src/qt/qt_vmmanager_mainwindow.ui | 15 --------------- 2 files changed, 30 deletions(-) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 46364a258..20d625286 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -354,9 +354,6 @@ &Hard reset - - false - @@ -372,9 +369,6 @@ Ctrl+F12 - - false - @@ -384,9 +378,6 @@ Ctrl+Alt+&Esc - - false - @@ -396,9 +387,6 @@ &Pause - - false - @@ -419,9 +407,6 @@ QAction::NoRole - - false - diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index 2501b1501..12ef7dee2 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -111,9 +111,6 @@ Start - - false - @@ -126,9 +123,6 @@ Hard reset - - false - @@ -147,9 +141,6 @@ true - - false - @@ -168,9 +159,6 @@ true - - false - @@ -186,9 +174,6 @@ QAction::NoRole - - false -