From cd19c5eb38768175241dbfda2a54a3e3cc2aeeab Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Thu, 18 Feb 2021 14:10:40 +0000 Subject: [PATCH] CustomFrame: Allow to specify a callback for QWindow opt-in Which QWindows should get a custom frame is up to you. Just return true in the callback. --- src/private/WidgetResizeHandler.cpp | 8 ++++++-- src/private/WidgetResizeHandler_p.h | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/private/WidgetResizeHandler.cpp b/src/private/WidgetResizeHandler.cpp index 919ebc9f..479b9a3a 100644 --- a/src/private/WidgetResizeHandler.cpp +++ b/src/private/WidgetResizeHandler.cpp @@ -561,9 +561,10 @@ bool NCHITTESTEventFilter::nativeEventFilter(const QByteArray &eventType, void * #endif -CustomFrameHelper::CustomFrameHelper(QObject *parent) +CustomFrameHelper::CustomFrameHelper(ShouldUseCustomFrame func, QObject *parent) : QObject(parent) , QAbstractNativeEventFilter() + , m_shouldUseCustomFrameFunc(func) { #ifdef Q_OS_WIN qApp->installNativeEventFilter(this); @@ -588,6 +589,9 @@ void CustomFrameHelper::applyCustomFrame(QWindow *window) bool CustomFrameHelper::nativeEventFilter(const QByteArray &eventType, void *message, Qt5Qt6Compat::qintptr *result) { + if (m_shouldUseCustomFrameFunc == nullptr) + return false; + #ifdef Q_OS_WIN if (m_inDtor || !KDDockWidgets::usesAeroSnapWithCustomDecos()) return false; @@ -598,7 +602,7 @@ bool CustomFrameHelper::nativeEventFilter(const QByteArray &eventType, void *mes auto msg = static_cast(message); QWindow *window = QWindow::fromWinId(WId(msg->hwnd)); - if (!window) + if (!window || !m_shouldUseCustomFrameFunc(window)) return false; const char *propertyName = "kddw_customframe_setup_ran"; diff --git a/src/private/WidgetResizeHandler_p.h b/src/private/WidgetResizeHandler_p.h index 0d44636c..3a1ef2c9 100644 --- a/src/private/WidgetResizeHandler_p.h +++ b/src/private/WidgetResizeHandler_p.h @@ -124,13 +124,16 @@ public: #endif // Q_OS_WIN +typedef bool (*ShouldUseCustomFrame)(QWindow *); + class DOCKS_EXPORT CustomFrameHelper : public QObject , public QAbstractNativeEventFilter { Q_OBJECT public: - explicit CustomFrameHelper(QObject *parent = nullptr); + explicit CustomFrameHelper(ShouldUseCustomFrame shouldUseCustomFrameFunc, + QObject *parent = nullptr); ~CustomFrameHelper() override; public Q_SLOTS: @@ -142,6 +145,7 @@ protected: private: bool m_inDtor = false; + ShouldUseCustomFrame m_shouldUseCustomFrameFunc = nullptr; }; }