From 58ef035603b8e3bf9299b4bddcdebcc653ea8810 Mon Sep 17 00:00:00 2001
From: SineStriker <trueful@163.com>
Date: 周五, 29 12月 2023 11:50:33 +0800
Subject: [PATCH] Window bar support I18N

---
 src/widgets/widgetwindowagent_win.cpp |   23 +++++++----------------
 1 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/src/widgets/widgetwindowagent_win.cpp b/src/widgets/widgetwindowagent_win.cpp
index 7340fdb..0f4637d 100644
--- a/src/widgets/widgetwindowagent_win.cpp
+++ b/src/widgets/widgetwindowagent_win.cpp
@@ -5,6 +5,7 @@
 #include <QtGui/QPainter>
 
 #include <QWKCore/qwindowkit_windows.h>
+#include <QWKCore/private/qwkglobal_p.h>
 
 namespace QWK {
 
@@ -44,7 +45,7 @@
             static QVariant defaultMargins = QVariant::fromValue(QMargins(0, 1, 0, 0));
             ctx->setWindowAttribute(QStringLiteral("extra-margins"), defaultMargins);
 
-            // Enable dark mode by default, otherwise the frame borders are white
+            // Enable dark mode by default, otherwise the system borders are white
             ctx->setWindowAttribute(QStringLiteral("dark-mode"), true);
 
             ctx->installNativeEventFilter(this);
@@ -68,14 +69,8 @@
         }
 
         inline void resumeWidgetEventAndDraw(QWidget *w, QEvent *event) {
-            // Friend class helping to call `event`
-            class HackedWidget : public QWidget {
-            public:
-                friend class QWK::WidgetBorderHandler;
-            };
-
             // Let the widget paint first
-            static_cast<HackedWidget *>(w)->event(event);
+            Private::ObjectHelper::sendEvent(w, event);
 
             // Due to the timer or user action, Qt will repaint some regions spontaneously,
             // even if there is no WM_PAINT message, we must wait for it to finish painting
@@ -84,14 +79,8 @@
         }
 
         inline void resumeWindowEventAndDraw(QWindow *window, QEvent *event) {
-            // Friend class helping to call `event`
-            class HackedWindow : public QWindow {
-            public:
-                friend class QWK::WidgetBorderHandler;
-            };
-
             // Let Qt paint first
-            static_cast<HackedWindow *>(window)->event(event);
+            Private::ObjectHelper::sendEvent(window, event);
 
             // Upon receiving the WM_PAINT message, Qt will repaint the entire view, and we
             // must wait for it to finish painting before drawing this top border area.
@@ -110,7 +99,7 @@
             // When the window is inactive, there is a transparency bug in the top
             // border, and we need to extend the non-client area to the whole title
             // bar.
-            QRect frame = ctx->windowAttribute(QStringLiteral("title-bar-rect")).toRect();
+            QRect frame = ctx->windowAttribute(QStringLiteral("window-rect")).toRect();
             QMargins margins{0, -frame.top(), 0, 0};
             ctx->setWindowAttribute(QStringLiteral("extra-margins"), QVariant::fromValue(margins));
         }
@@ -119,6 +108,7 @@
         bool nativeEventFilter(const QByteArray &eventType, void *message,
                                QT_NATIVE_EVENT_RESULT_TYPE *result) override {
             Q_UNUSED(eventType)
+
             const auto msg = static_cast<const MSG *>(message);
             switch (msg->message) {
                 case WM_DPICHANGED: {
@@ -163,6 +153,7 @@
 
         bool eventFilter(QObject *obj, QEvent *event) override {
             Q_UNUSED(obj)
+
             switch (event->type()) {
                 case QEvent::UpdateRequest: {
                     if (!isNormalWindow())

--
Gitblit v1.9.1