From c18adc2cee584c8278fc2fcce7fcda968dd5180a Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 6 Jan 2023 14:42:29 +0100 Subject: [PATCH] Gui: fix activating of MDI views via menu commands --- src/Gui/CommandWindow.cpp | 7 ++++++- src/Gui/MainWindow.cpp | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Gui/CommandWindow.cpp b/src/Gui/CommandWindow.cpp index b65de04256..db7a887528 100644 --- a/src/Gui/CommandWindow.cpp +++ b/src/Gui/CommandWindow.cpp @@ -229,7 +229,12 @@ StdCmdActivatePrevWindow::StdCmdActivatePrevWindow() sWhatsThis = "Std_ActivatePrevWindow"; sStatusTip = QT_TR_NOOP("Activate previous window"); sPixmap = "Std_WindowPrev"; - sAccel = keySequenceToAccel(QKeySequence::PreviousChild); + // Depending on the OS 'QKeySequence::PreviousChild' gives + // Ctrl+Shift+Backtab instead of Ctrl+Shift+Tab which leads + // to a strange behaviour when using it. + // A workaround is to create a shortcut as Shift + QKeySequence::NextChild + static std::string previousChild = std::string("Shift+") + keySequenceToAccel(QKeySequence::NextChild); + sAccel = previousChild.c_str(); eType = 0; } diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 7c53b25b0e..3e8b6f64fd 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -330,6 +330,9 @@ MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags f) #if QT_VERSION < QT_VERSION_CHECK(5,15,0) connect(d->windowMapper, qOverload(&QSignalMapper::mapped), this, &MainWindow::onSetActiveSubWindow); +#elif QT_VERSION < QT_VERSION_CHECK(6,0,0) + connect(d->windowMapper, &QSignalMapper::mappedWidget, + this, &MainWindow::onSetActiveSubWindow); #else connect(d->windowMapper, &QSignalMapper::mappedObject, this, [=](QObject* object) { @@ -709,12 +712,20 @@ bool MainWindow::closeAllDocuments (bool close) void MainWindow::activateNextWindow () { - d->mdiArea->activateNextSubWindow(); + auto tab = d->mdiArea->findChild(); + if (tab && tab->count() > 0) { + int index = (tab->currentIndex() + 1) % tab->count(); + tab->setCurrentIndex(index); + } } void MainWindow::activatePreviousWindow () { - d->mdiArea->activatePreviousSubWindow(); + auto tab = d->mdiArea->findChild(); + if (tab && tab->count() > 0) { + int index = (tab->currentIndex() + tab->count() - 1) % tab->count(); + tab->setCurrentIndex(index); + } } void MainWindow::activateWorkbench(const QString& name)