From be1c3e913648b874931d59a07dc83012abb890fa Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 8 Jul 2020 21:31:29 -0400 Subject: [PATCH] Ensures key state is cleared upon activation changes. --- OSBindings/Qt/mainwindow.cpp | 14 ++++++++++++++ OSBindings/Qt/mainwindow.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/OSBindings/Qt/mainwindow.cpp b/OSBindings/Qt/mainwindow.cpp index d0da4b204..ec87b29c6 100644 --- a/OSBindings/Qt/mainwindow.cpp +++ b/OSBindings/Qt/mainwindow.cpp @@ -757,6 +757,20 @@ void MainWindow::setWindowTitle() { // MARK: - Event Processing +void MainWindow::changeEvent(QEvent *event) { + // Clear current key state upon any window activation change. + if(event->type() == QEvent::ActivationChange) { + const auto keyboardMachine = machine->keyboard_machine(); + if(keyboardMachine) { + keyboardMachine->clear_all_keys(); + return; + } + } + + event->ignore(); +} + + void MainWindow::keyPressEvent(QKeyEvent *event) { processEvent(event); } diff --git a/OSBindings/Qt/mainwindow.h b/OSBindings/Qt/mainwindow.h index e11d82844..f158e613d 100644 --- a/OSBindings/Qt/mainwindow.h +++ b/OSBindings/Qt/mainwindow.h @@ -74,6 +74,8 @@ class MainWindow : public QMainWindow, public Outputs::Speaker::Speaker::Delegat bool processEvent(QKeyEvent *); + void changeEvent(QEvent *) override; + private slots: void startMachine();