From 981e266613dcbfc880d3fc085cc2fad8baa50f23 Mon Sep 17 00:00:00 2001 From: regulus79 <117475203+regulus79@users.noreply.github.com> Date: Thu, 14 Aug 2025 10:08:04 -0400 Subject: [PATCH] Refactor Global Spacebar Play (#7926) This PR simplifies #7762 by removing the editor-specific code from MainWindow and m_lastPlayMode from Song, and instead uses a static variable in Editor which keeps track of the last played editor. This PR also removes the spacebar shortcut from MixerChannelView for changing the volume, as multiple users have noticed that it clashes with their intuition after getting used to the spacebar working everywhere else. --- include/Editor.h | 3 +++ include/Song.h | 2 -- src/core/Song.cpp | 3 --- src/gui/MainWindow.cpp | 22 +++------------------- src/gui/MixerChannelView.cpp | 4 ---- src/gui/editors/Editor.cpp | 12 ++++++++++-- 6 files changed, 16 insertions(+), 30 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index 46caab538..4687d0448 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -51,6 +51,7 @@ class Editor : public QMainWindow public: void setPauseIcon(bool displayPauseIcon=true); QAction *playAction() const; + static Editor* lastPlayedEditor() { return s_lastPlayedEditor; } protected: DropToolBar * addDropToolBarToTop(QString const & windowTitle); DropToolBar * addDropToolBar(Qt::ToolBarArea whereToAdd, QString const & windowTitle); @@ -73,6 +74,8 @@ protected slots: private slots: void toggleMaximize(); +private: + inline static Editor* s_lastPlayedEditor = nullptr; signals: diff --git a/include/Song.h b/include/Song.h index ee45c536b..2d321115f 100644 --- a/include/Song.h +++ b/include/Song.h @@ -254,7 +254,6 @@ public: return m_playMode; } - PlayMode lastPlayMode() const { return m_lastPlayMode; } inline PlayPos & getPlayPos( PlayMode pm ) { return m_playPos[static_cast(pm)]; @@ -490,7 +489,6 @@ private: std::array m_timelines; PlayMode m_playMode; - PlayMode m_lastPlayMode; PlayPos m_playPos[PlayModeCount]; bar_t m_length; diff --git a/src/core/Song.cpp b/src/core/Song.cpp index e8089eea8..441780d41 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -499,7 +499,6 @@ void Song::playSong() } m_playMode = PlayMode::Song; - m_lastPlayMode = m_playMode; m_playing = true; m_paused = false; @@ -539,7 +538,6 @@ void Song::playPattern() } m_playMode = PlayMode::Pattern; - m_lastPlayMode = m_playMode; m_playing = true; m_paused = false; @@ -566,7 +564,6 @@ void Song::playMidiClip( const MidiClip* midiClipToPlay, bool loop ) if( m_midiClipToPlay != nullptr ) { m_playMode = PlayMode::MidiClip; - m_lastPlayMode = m_playMode; m_playing = true; m_paused = false; } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index adb1bcce7..ff5b05bed 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1285,27 +1285,11 @@ void MainWindow::keyPressEvent( QKeyEvent * _ke ) case Qt::Key_Alt: m_keyMods.m_alt = true; break; case Qt::Key_Space: { - Editor* lastEditor = nullptr; - switch (Engine::getSong()->lastPlayMode()) + if (Editor::lastPlayedEditor() != nullptr) { - case Song::PlayMode::Song: - lastEditor = getGUI()->songEditor(); - break; - case Song::PlayMode::MidiClip: - lastEditor = getGUI()->pianoRoll(); - break; - case Song::PlayMode::Pattern: - lastEditor = getGUI()->patternEditor(); - break; - case Song::PlayMode::AutomationClip: - lastEditor = getGUI()->automationEditor(); - break; - default: - lastEditor = getGUI()->songEditor(); - break; + if (m_keyMods.m_shift) { Editor::lastPlayedEditor()->togglePause(); } + else { Editor::lastPlayedEditor()->togglePlayStop(); } } - if (m_keyMods.m_shift) { lastEditor->togglePause(); } - else { lastEditor->togglePlayStop(); } break; } default: diff --git a/src/gui/MixerChannelView.cpp b/src/gui/MixerChannelView.cpp index 649789c9c..abc619ec3 100644 --- a/src/gui/MixerChannelView.cpp +++ b/src/gui/MixerChannelView.cpp @@ -240,10 +240,6 @@ void MixerChannelView::keyPressEvent(QKeyEvent* ke) renameFinished(); } } - else if (ke->key() == Qt::Key_Space) - { - m_fader->adjustByDialog(); - } else { ke->ignore(); diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index 750a28fc2..d6b96887a 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -73,6 +73,7 @@ DropToolBar * Editor::addDropToolBar(QWidget * parent, Qt::ToolBarArea whereToAd void Editor::togglePlayStop() { + s_lastPlayedEditor = this; if (Engine::getSong()->isPlaying()) stop(); else @@ -81,6 +82,7 @@ void Editor::togglePlayStop() void Editor::togglePause() { + s_lastPlayedEditor = this; Engine::getSong()->togglePause(); } @@ -118,7 +120,6 @@ Editor::Editor(bool record, bool stepRecord) : connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); connect(m_toggleStepRecordingAction, SIGNAL(triggered()), this, SLOT(toggleStepRecording())); connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stop())); - new QShortcut(QKeySequence(combine(Qt::SHIFT, Qt::Key_Space)), this, SLOT(togglePause())); new QShortcut(QKeySequence(combine(Qt::SHIFT, Qt::Key_F11)), this, SLOT(toggleMaximize())); // Add actions to toolbar @@ -158,7 +159,14 @@ void Editor::closeEvent(QCloseEvent * event) { if (ke->key() == Qt::Key_Space) { - togglePlayStop(); + if (ke->modifiers() & Qt::ShiftModifier) + { + togglePause(); + } + else + { + togglePlayStop(); + } return; } ke->ignore();