From 83f7c41e318be983879eb18bbce3f7d5585bdcfd Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Tue, 16 Feb 2021 11:24:57 -0800 Subject: [PATCH] Make the FIFO Player a separate window This way, it can be focused with the render window behind it, instead of having the main window show up and cover the render window. This is useful for adjusting the object range, among other things. --- .../Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp | 25 ++++++++++++++++--- Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.h | 6 +++-- Source/Core/DolphinQt/MainWindow.cpp | 2 +- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp index e4154b6b6c..dc1b4f44b7 100644 --- a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp +++ b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp @@ -6,9 +6,13 @@ #include #include +#include #include #include #include +#include +#include +#include #include #include #include @@ -26,12 +30,13 @@ #include "DolphinQt/FIFO/FIFOAnalyzer.h" #include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/QueueOnObject.h" +#include "DolphinQt/Resources.h" #include "DolphinQt/Settings.h" -FIFOPlayerWindow::FIFOPlayerWindow(QWidget* parent) : QDialog(parent) +FIFOPlayerWindow::FIFOPlayerWindow(QWidget* parent) : QWidget(parent) { setWindowTitle(tr("FIFO Player")); - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setWindowIcon(Resources::GetAppIcon()); CreateWidgets(); ConnectWidgets(); @@ -56,6 +61,8 @@ FIFOPlayerWindow::FIFOPlayerWindow(QWidget* parent) : QDialog(parent) OnEmulationStopped(); m_emu_state = state; }); + + installEventFilter(this); } FIFOPlayerWindow::~FIFOPlayerWindow() @@ -167,7 +174,7 @@ void FIFOPlayerWindow::ConnectWidgets() connect(m_save, &QPushButton::clicked, this, &FIFOPlayerWindow::SaveRecording); connect(m_record, &QPushButton::clicked, this, &FIFOPlayerWindow::StartRecording); connect(m_stop, &QPushButton::clicked, this, &FIFOPlayerWindow::StopRecording); - connect(m_button_box, &QDialogButtonBox::rejected, this, &FIFOPlayerWindow::reject); + connect(m_button_box, &QDialogButtonBox::rejected, this, &FIFOPlayerWindow::hide); connect(m_early_memory_updates, &QCheckBox::toggled, this, &FIFOPlayerWindow::OnEarlyMemoryUpdatesChanged); connect(m_frame_range_from, qOverload(&QSpinBox::valueChanged), this, @@ -371,3 +378,15 @@ void FIFOPlayerWindow::UpdateControls() m_save->setEnabled(FifoRecorder::GetInstance().IsRecordingDone()); } + +bool FIFOPlayerWindow::eventFilter(QObject* object, QEvent* event) +{ + // Close when escape is pressed + if (event->type() == QEvent::KeyPress) + { + if (static_cast(event)->matches(QKeySequence::Cancel)) + hide(); + } + + return false; +} diff --git a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.h b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.h index 10df9b0b96..d6bc8b3600 100644 --- a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.h +++ b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.h @@ -4,7 +4,7 @@ #pragma once -#include +#include #include "Core/Core.h" @@ -15,7 +15,7 @@ class QPushButton; class QSpinBox; class FIFOAnalyzer; -class FIFOPlayerWindow : public QDialog +class FIFOPlayerWindow : public QWidget { Q_OBJECT public: @@ -45,6 +45,8 @@ private: void UpdateInfo(); void UpdateLimits(); + bool eventFilter(QObject* object, QEvent* event) final override; + QLabel* m_info_label; QPushButton* m_load; QPushButton* m_save; diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 3261a4b740..61e58eb19f 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -1214,7 +1214,7 @@ void MainWindow::ShowFIFOPlayer() { if (!m_fifo_window) { - m_fifo_window = new FIFOPlayerWindow(this); + m_fifo_window = new FIFOPlayerWindow; connect(m_fifo_window, &FIFOPlayerWindow::LoadFIFORequested, this, [this](const QString& path) { StartGame(path, ScanForSecondDisc::No); }); }