src/core/windowagentbase.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/widgets/widgetwindowagent.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/widgets/widgetwindowagent_mac.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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,14 +83,17 @@ Available attributes: On Windows, \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. 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 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. \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. 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); } 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)); } }