From 5675b1a373e7f2e6d80afc6b5e9bd469a93f809a Mon Sep 17 00:00:00 2001 From: "Christopher L. Simons" Date: Thu, 4 Dec 2014 23:39:53 -0500 Subject: [PATCH 1/2] Removing focus from hidden windows upon hiding them. --- src/gui/MainWindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 86a4ea65d..8a721c950 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -879,6 +879,7 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow ) else { parent->hide(); + this->setFocus(); } // Workaround for Qt Bug #260116 From ca973b9369849d23ba939e7fc746d20e71c72385 Mon Sep 17 00:00:00 2001 From: "Christopher L. Simons" Date: Sat, 6 Dec 2014 03:46:41 -0500 Subject: [PATCH 2/2] Upon toggling off a window, now attempting to focus SongEditor, then any other visible editors, or finally the parent window if all editors are hidden. --- include/MainWindow.h | 1 + src/gui/MainWindow.cpp | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/include/MainWindow.h b/include/MainWindow.h index a8aae83c5..9fd9acecd 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -145,6 +145,7 @@ private: void finalize(); void toggleWindow( QWidget *window, bool forceShow = false ); + void refocus(); QMdiArea * m_workspace; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 8a721c950..fc7d12d2b 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -879,7 +879,7 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow ) else { parent->hide(); - this->setFocus(); + refocus(); } // Workaround for Qt Bug #260116 @@ -892,6 +892,38 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow ) +/* + * When an editor window with focus is toggled off, attempt to set focus + * to the next visible editor window, or if none are visible, set focus + * to the parent window. + */ +void MainWindow::refocus() +{ + QList editors; + editors + << Engine::songEditor()->parentWidget() + << Engine::getBBEditor()->parentWidget() + << Engine::pianoRoll()->parentWidget() + << Engine::automationEditor()->parentWidget(); + + bool found = false; + QList::Iterator editor; + for( editor = editors.begin(); editor != editors.end(); ++editor ) + { + if( ! (*editor)->isHidden() ) { + (*editor)->setFocus(); + found = true; + break; + } + } + + if( ! found ) + this->setFocus(); +} + + + + void MainWindow::toggleBBEditorWin( bool forceShow ) { toggleWindow( Engine::getBBEditor(), forceShow );