From 96552dfcb531053f4a331c2c80ecf5d8cb2aaf36 Mon Sep 17 00:00:00 2001 From: 某莔 <seiuryuu@gmail.com> Date: 周四, 28 12月 2023 22:55:40 +0800 Subject: [PATCH] fix: NSVisualEffectView --- src/widgets/widgetwindowagent_mac.cpp | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/widgets/widgetwindowagent_mac.cpp b/src/widgets/widgetwindowagent_mac.cpp index 31f45e6..1d4f320 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(), QPoint()), widget->size()}; + } + class SystemButtonAreaWidgetEventFilter : public QObject { public: SystemButtonAreaWidgetEventFilter(QWidget *widget, AbstractWindowContext *ctx, @@ -11,7 +15,7 @@ : QObject(parent), widget(widget), ctx(ctx) { widget->installEventFilter(this); } - ~SystemButtonAreaWidgetEventFilter() = default; + ~SystemButtonAreaWidgetEventFilter() override = default; protected: bool eventFilter(QObject *obj, QEvent *event) override { @@ -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