diff --git a/CHANGELOG.md b/CHANGELOG.md index 139b7f850aa..edba34f08a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ - Minor: Colored usernames now update on the fly when changing the "Color @usernames" setting. (#5300) - Minor: Added `flags.action` filter variable, allowing you to filter on `/me` messages. (#5397) - Bugfix: If a network request errors with 200 OK, Qt's error code is now reported instead of the HTTP status. (#5378) -- Dev: Use Qt's high DPI scaling. (#4868) +- Dev: Use Qt's high DPI scaling. (#4868, #5400) - Dev: Add doxygen build target. (#5377) - Dev: Make printing of strings in tests easier. (#5379) - Dev: Refactor and document `Scrollbar`. (#5334, #5393) diff --git a/src/widgets/BaseWindow.cpp b/src/widgets/BaseWindow.cpp index 08a13007ab9..bc8767e4999 100644 --- a/src/widgets/BaseWindow.cpp +++ b/src/widgets/BaseWindow.cpp @@ -931,9 +931,27 @@ void BaseWindow::updateScale() this->setScale(scale); - for (auto *child : this->findChildren()) + BaseWindow::applyScaleRecursive(this, scale); +} + +// NOLINTNEXTLINE(misc-no-recursion) +void BaseWindow::applyScaleRecursive(QObject *root, float scale) +{ + for (QObject *obj : root->children()) { - child->setScale(scale); + auto *base = dynamic_cast(obj); + if (base) + { + auto *window = dynamic_cast(obj); + if (window) + { + // stop here, the window will get the event as well (via uiScale) + continue; + } + base->setScale(scale); + } + + applyScaleRecursive(obj, scale); } } diff --git a/src/widgets/BaseWindow.hpp b/src/widgets/BaseWindow.hpp index 02101cb6dc0..46ff56e7e38 100644 --- a/src/widgets/BaseWindow.hpp +++ b/src/widgets/BaseWindow.hpp @@ -131,6 +131,8 @@ class BaseWindow : public BaseWidget void drawCustomWindowFrame(QPainter &painter); void onFocusLost(); + static void applyScaleRecursive(QObject *root, float scale); + bool handleSHOWWINDOW(MSG *msg); bool handleSIZE(MSG *msg); bool handleMOVE(MSG *msg); diff --git a/src/widgets/dialogs/SettingsDialog.cpp b/src/widgets/dialogs/SettingsDialog.cpp index 8b56f4903cd..2a71593eccf 100644 --- a/src/widgets/dialogs/SettingsDialog.cpp +++ b/src/widgets/dialogs/SettingsDialog.cpp @@ -196,7 +196,7 @@ void SettingsDialog::filterElements(const QString &text) auto *item = this->ui_.tabContainer->itemAt(i); if (auto *x = dynamic_cast(item); x) { - x->changeSize(10, shouldShowSpace ? int(16 * this->scale()) : 0); + x->changeSize(10, shouldShowSpace ? 16 : 0); shouldShowSpace = false; } else if (item->widget())