diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-05-04 14:35:39 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-05-13 08:25:29 +0000 |
commit | 60bdf6a5c63572caff371dc3c285679bdbca472a (patch) | |
tree | 363ae53d68815c7a6665d9811980d22a5a0e41f4 /src/widgets/widgets | |
parent | 25defdbe93c6c5b43449caf58a8c4412a0263d2e (diff) |
QMdiArea: Fix top level window title when using DontMaximizeSubWindowOnActivation
When trying to find the original window title, check for another
maximized sub window and use its title. Protect the calls to
setWindowTitle to prevent the original title from being cleared.
Fixes: QTBUG-92240
Change-Id: I55175382ab261b4cf8b5528304adaaec4fbe2c31
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit 8886462872db9cdab4d7683823fd24fb9f8920c4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qmdisubwindow.cpp | 31 | ||||
-rw-r--r-- | src/widgets/widgets/qmdisubwindow_p.h | 1 |
2 files changed, 28 insertions, 4 deletions
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index 89f2df5524..27b89ee212 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -259,11 +259,28 @@ static inline ControlElement<T> *ptr(QWidget *widget) return nullptr; } +QString QMdiSubWindowPrivate::originalWindowTitleHelper() const +{ + Q_Q(const QMdiSubWindow); + // QTBUG-92240: When DontMaximizeSubWindowOnActivation is set and + // there is another subwindow maximized, use its original title. + if (auto *mdiArea = q->mdiArea()) { + const auto &subWindows = mdiArea->subWindowList(); + for (auto *subWindow : subWindows) { + if (subWindow != q && subWindow->isMaximized()) { + auto *subWindowD = static_cast<QMdiSubWindowPrivate *>(qt_widget_private(subWindow)); + if (!subWindowD->originalTitle.isNull()) + return subWindowD->originalTitle; + } + } + } + return q->window()->windowTitle(); +} + QString QMdiSubWindowPrivate::originalWindowTitle() { - Q_Q(QMdiSubWindow); if (originalTitle.isNull()) { - originalTitle = q->window()->windowTitle(); + originalTitle = originalWindowTitleHelper(); if (originalTitle.isNull()) originalTitle = QLatin1String(""); } @@ -278,11 +295,17 @@ void QMdiSubWindowPrivate::setNewWindowTitle() return; QString original = originalWindowTitle(); if (!original.isEmpty()) { - if (!original.contains(QMdiSubWindow::tr("- [%1]").arg(childTitle))) - q->window()->setWindowTitle(QMdiSubWindow::tr("%1 - [%2]").arg(original, childTitle)); + if (!original.contains(QMdiSubWindow::tr("- [%1]").arg(childTitle))) { + auto title = QMdiSubWindow::tr("%1 - [%2]").arg(original, childTitle); + ignoreWindowTitleChange = true; + q->window()->setWindowTitle(title); + ignoreWindowTitleChange = false; + } } else { + ignoreWindowTitleChange = true; q->window()->setWindowTitle(childTitle); + ignoreWindowTitleChange = false; } } diff --git a/src/widgets/widgets/qmdisubwindow_p.h b/src/widgets/widgets/qmdisubwindow_p.h index d39731ee8d..6b07e0f58e 100644 --- a/src/widgets/widgets/qmdisubwindow_p.h +++ b/src/widgets/widgets/qmdisubwindow_p.h @@ -286,6 +286,7 @@ public: #endif void updateInternalWindowTitle(); QString originalWindowTitle(); + QString originalWindowTitleHelper() const; void setNewWindowTitle(); inline int titleBarHeight() const |