From b54e368f16e8bd977fe57fcc738fc6804af076e4 Mon Sep 17 00:00:00 2001 From: Zhao Yuhang <2546789017@qq.com> Date: 周一, 01 1月 2024 22:20:17 +0800 Subject: [PATCH] Update README --- src/core/contexts/abstractwindowcontext.cpp | 68 ++++++++++++++++++++------------- 1 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/core/contexts/abstractwindowcontext.cpp b/src/core/contexts/abstractwindowcontext.cpp index 8672faf..d0ca27c 100644 --- a/src/core/contexts/abstractwindowcontext.cpp +++ b/src/core/contexts/abstractwindowcontext.cpp @@ -1,3 +1,6 @@ +// Copyright (C) 2023-2024 Stdware Collections +// SPDX-License-Identifier: Apache-2.0 + #include "abstractwindowcontext_p.h" #include <QtGui/QPen> @@ -71,32 +74,7 @@ } } - bool AbstractWindowContext::setWindowAttribute(const QString &key, const QVariant &attribute) { - auto it = m_windowAttributes.find(key); - if (it == m_windowAttributes.end()) { - if (!attribute.isValid()) { - return true; - } - if (!m_windowHandle || !windowAttributeChanged(key, attribute, {})) { - return false; - } - m_windowAttributes.insert(key, attribute); - return true; - } - if (it.value() == attribute) - return true; - if (!m_windowHandle || !windowAttributeChanged(key, attribute, it.value())) { - return false; - } - - if (attribute.isValid()) { - it.value() = attribute; - } else { - m_windowAttributes.erase(it); - } - return true; - } bool AbstractWindowContext::setHitTestVisible(const QObject *obj, bool visible) { Q_ASSERT(obj); @@ -145,8 +123,9 @@ } #ifdef Q_OS_MAC - void AbstractWindowContext::setSystemButtonArea(const QRect &rect) { - m_systemButtonArea = rect; + void + AbstractWindowContext::setSystemButtonAreaCallback(const ScreenRectCallback &callback) { + m_systemButtonAreaCallback = callback; virtual_hook(SystemButtonAreaChangedHook, nullptr); } #endif @@ -236,6 +215,10 @@ } case RaiseWindowHook: { + if (!m_windowHandle) + return; + + m_delegate->setWindowVisible(m_host, true); Qt::WindowStates state = m_delegate->getWindowState(m_host); if (state & Qt::WindowMinimized) { m_delegate->setWindowState(m_host, state & ~Qt::WindowMinimized); @@ -285,6 +268,37 @@ } } + QVariant AbstractWindowContext::windowAttribute(const QString &key) const { + return m_windowAttributes.value(key); + } + + bool AbstractWindowContext::setWindowAttribute(const QString &key, const QVariant &attribute) { + auto it = m_windowAttributes.find(key); + if (it == m_windowAttributes.end()) { + if (!attribute.isValid()) { + return true; + } + if (!m_windowHandle || !windowAttributeChanged(key, attribute, {})) { + return false; + } + m_windowAttributes.insert(key, attribute); + return true; + } + + if (it.value() == attribute) + return true; + if (!m_windowHandle || !windowAttributeChanged(key, attribute, it.value())) { + return false; + } + + if (attribute.isValid()) { + it.value() = attribute; + } else { + m_windowAttributes.erase(it); + } + return true; + } + bool AbstractWindowContext::windowAttributeChanged(const QString &key, const QVariant &attribute, const QVariant &oldAttribute) { -- Gitblit v1.9.1