From d905187230c893bd387656278f57c60ffe6f2507 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周三, 27 12月 2023 21:07:42 +0800 Subject: [PATCH] minor tweaks --- src/widgets/widgetwindowagent_mac.cpp | 11 +++++++++-- src/widgets/widgetwindowagent.cpp | 3 +++ src/core/windowagentbase.cpp | 25 ++++++++++++++----------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/core/windowagentbase.cpp b/src/core/windowagentbase.cpp index 60ade6a..336f2b7 100644 --- a/src/core/windowagentbase.cpp +++ b/src/core/windowagentbase.cpp @@ -27,8 +27,8 @@ \brief WindowAgentBase is the base class of the specifiy window agent for QtWidgets and QtQuick. - It processes some system events and the implements of frameless logic, and provides some - common methods for derived classes to call. + It processes some system events to remove the window's default title bar, and provides some + shared methods for derived classes to call. */ WindowAgentBasePrivate::WindowContextFactoryMethod @@ -83,17 +83,20 @@ Available attributes: On Windows, - \li \c acrylic-material: Specify a boolean value to enable or disable acrylic material, - this attribute is only available on Windows 11. - \li \c mica: Specify a boolean value to enable or disable mica material, - this attribute is only available on Windows 11. - \li \c mica-alt: Specify a boolean value to enable or disable mica-alt material, - this attribute is only available on Windows 11. + \li \c dwm-blur: Specify a boolean value to enable or disable dwm blur effect, this + attribute is available on Windows 10 or later. \li \c dark-mode: Specify a boolean value to enable or disable the dark mode, it is - enabled by default on Windows 10 if the system borders config is enabled. + enabled by default on Windows 10 if the system borders config is enabled. This + attribute is available on Windows 10 or later. + \li \c acrylic-material: Specify a boolean value to enable or disable acrylic material, + this attribute is only available on Windows 11. + \li \c mica: Specify a boolean value to enable or disable mica material, + this attribute is only available on Windows 11. + \li \c mica-alt: Specify a boolean value to enable or disable mica-alt material, + this attribute is only available on Windows 11. \li \c extra-margins: Specify a margin value to change the \c dwm extended area - geometry, you shouldn't change this attribute because it may break the - internal state. + geometry, you shouldn't change this attribute because it may break the + internal state. On macOS, \li \c no-system-buttons: Specify a boolean value to set the system buttons' visibility. diff --git a/src/widgets/widgetwindowagent.cpp b/src/widgets/widgetwindowagent.cpp index e2b6db1..d78219f 100644 --- a/src/widgets/widgetwindowagent.cpp +++ b/src/widgets/widgetwindowagent.cpp @@ -80,6 +80,9 @@ if (!d->context->setTitleBar(w)) { return; } +#ifdef Q_OS_MAC + setSystemButtonArea(nullptr); +#endif Q_EMIT titleBarChanged(w); } diff --git a/src/widgets/widgetwindowagent_mac.cpp b/src/widgets/widgetwindowagent_mac.cpp index 31f45e6..42f8dad 100644 --- a/src/widgets/widgetwindowagent_mac.cpp +++ b/src/widgets/widgetwindowagent_mac.cpp @@ -4,6 +4,10 @@ namespace QWK { + static inline QRect getWidgetSceneRect(QWidget *widget) { + return {widget->mapTo(widget->window(), {}), widget->size()}; + } + class SystemButtonAreaWidgetEventFilter : public QObject { public: SystemButtonAreaWidgetEventFilter(QWidget *widget, AbstractWindowContext *ctx, @@ -19,8 +23,7 @@ switch (event->type()) { case QEvent::Move: case QEvent::Resize: { - QRect rect(widget->mapTo(widget->window(), {}), widget->size()); - ctx->setSystemButtonArea(rect); + ctx->setSystemButtonArea(getWidgetSceneRect(widget)); break; } @@ -49,6 +52,9 @@ */ void WidgetWindowAgent::setSystemButtonArea(QWidget *widget) { Q_D(WidgetWindowAgent); + if (d->systemButtonAreaWidget == widget) + return; + auto ctx = d->context.get(); d->systemButtonAreaWidget = widget; if (!widget) { @@ -58,6 +64,7 @@ } d->systemButtonAreaWidgetEventFilter = std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx); + ctx->setSystemButtonArea(getWidgetSceneRect(widget)); } } \ No newline at end of file -- Gitblit v1.9.1