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..20d625286 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -354,9 +354,6 @@ &Hard reset - - false - @@ -372,12 +369,6 @@ Ctrl+F12 - - false - - - false - @@ -387,9 +378,6 @@ Ctrl+Alt+&Esc - - false - @@ -399,9 +387,6 @@ &Pause - - false - @@ -422,9 +407,6 @@ QAction::NoRole - - false - @@ -753,9 +735,6 @@ Ctrl+F11 - - false - @@ -833,9 +812,6 @@ false - - false - @@ -847,9 +823,6 @@ false - - false - 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_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(); } diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 54e0c619f..f4b1984dc 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(); @@ -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 selectionOrStateChanged((this->proxy_model->rowCount(QModelIndex()) > 0) ? selected_sysconfig : nullptr); }); #if EMU_BUILD_NUM != 0 @@ -456,22 +458,21 @@ 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; - } + 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); - 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()); + 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 @@ -528,17 +529,13 @@ VMManagerMain::shutdownForceButtonPressed() const selected_sysconfig->shutdownForceButtonPressed(); } -// This function doesn't appear to be needed any longer void -VMManagerMain::refresh() +VMManagerMain::cadButtonPressed() const { - const auto current_index = ui->listView->currentIndex(); - emit selectionChanged(current_index, selected_sysconfig->process->state()); + if (!currentSelectionIsValid()) + return; - // if(!selected_sysconfig->config_file.path().isEmpty()) { - if (!selected_sysconfig->isValid()) { - // what was happening here? - } + selected_sysconfig->cadButtonPressed(); } void @@ -593,12 +590,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 @@ -737,11 +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 selectionOrStateChanged(nullptr); } } } @@ -815,6 +809,15 @@ VMManagerMain::modelDataChange() emit updateStatusRight(machineCountString(states)); } +void +VMManagerMain::vmStateChange() +{ + if (!currentSelectionIsValid()) + return; + + emit selectionOrStateChanged(selected_sysconfig); +} + void VMManagerMain::onPreferencesUpdated() { @@ -834,6 +837,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); diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index b08939d1c..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(const QModelIndex ¤tSelection, QProcess::ProcessState processState); + void selectionOrStateChanged(VMManagerSystem *sysconfig); void updateStatusLeft(const QString &text); void updateStatusRight(const QString &text); @@ -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(); @@ -83,7 +84,6 @@ public slots: #ifdef Q_OS_WINDOWS void onDarkModeUpdated(); #endif - void onConfigUpdated(const QString &uuid); int getActiveMachineCount(); QList getPaneSizes() const; @@ -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; @@ -116,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_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..cee6cb291 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 @@ -49,8 +46,11 @@ 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); + connect(vmm, &VMManagerMain::selectionOrStateChanged, this, &VMManagerMainWindow::vmmStateChanged); setWindowTitle(tr("%1 VM Manager").arg(EMU_NAME)); setCentralWidget(vmm); @@ -61,6 +61,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) @@ -70,48 +71,22 @@ 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); - ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + // Set up the toolbar + ui->actionStartPause->setEnabled(false); + ui->actionStartPause->setIcon(runIcon); 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); - 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); @@ -131,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()) { @@ -176,29 +156,47 @@ VMManagerMainWindow::~VMManagerMainWindow() = default; void -VMManagerMainWindow::vmmSelectionChanged(const QModelIndex ¤tSelection, const QProcess::ProcessState processState) const +VMManagerMainWindow::vmmStateChanged(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")); - 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); + 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(pauseIcon); + ui->actionStartPause->setText(tr("Pause")); + ui->actionStartPause->setToolTip(tr("Pause")); + } else { + ui->actionStartPause->setIcon(runIcon); + ui->actionStartPause->setText(tr("Continue")); + 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); + } + + 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() @@ -224,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" : ""); @@ -294,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 c0e06f551..5d96fa5b2 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; @@ -55,7 +57,8 @@ public slots: #endif private slots: - void vmmSelectionChanged(const QModelIndex ¤tSelection, QProcess::ProcessState processState) const; + 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 c45e83741..12ef7dee2 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 @@ -38,6 +41,12 @@ + + + &View + + + &Help @@ -47,6 +56,7 @@ + @@ -56,22 +66,25 @@ true - toolBar + toolBar false + + Qt::PreventContextMenu + Qt::TopToolBarArea - 16 - 16 + 32 + 32 - Qt::ToolButtonIconOnly + Qt::ToolButtonTextUnderIcon TopToolBarArea @@ -88,9 +101,6 @@ - - true - :/menuicons/qt/icons/run.ico:/menuicons/qt/icons/run.ico @@ -101,9 +111,6 @@ Start - - false - @@ -116,9 +123,6 @@ Hard reset - - false - @@ -137,9 +141,6 @@ true - - false - @@ -156,13 +157,7 @@ Ctrl+Alt+Del - false - - - false - - - false + true @@ -179,14 +174,11 @@ QAction::NoRole - - false - - :/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... @@ -195,6 +187,17 @@ New machine... + + + true + + + Hide &toolbar + + + Hide tool bar + + &Preferences... @@ -206,21 +209,6 @@ QAction::PreferencesRole - - - true - - - - :/menuicons/qt/icons/run.ico:/menuicons/qt/icons/run.ico - - - &Start - - - false - - &Check for updates... diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 5038732d1..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+"); @@ -440,14 +438,17 @@ 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) { 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; } + + configurationChangeReceived(); }); } @@ -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) { @@ -1239,8 +1241,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: