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
@@ -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: