From 4e7058084d51193e3c975bcddbe749e7fd29e356 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周日, 19 5月 2024 23:29:49 +0800 Subject: [PATCH] Add check of maximum button hint --- src/core/contexts/cocoawindowcontext.mm | 52 +++++++++++++++++++++++++++------------------------- 1 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/core/contexts/cocoawindowcontext.mm b/src/core/contexts/cocoawindowcontext.mm index cc9bfeb..9b9e009 100644 --- a/src/core/contexts/cocoawindowcontext.mm +++ b/src/core/contexts/cocoawindowcontext.mm @@ -1,3 +1,7 @@ +// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware) +// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao) +// SPDX-License-Identifier: Apache-2.0 + #include "cocoawindowcontext_p.h" #include <objc/runtime.h> @@ -326,13 +330,9 @@ nswindow.movableByWindowBackground = NO; nswindow.movable = NO; // This line causes the window in the wrong position when // become fullscreen. - // For some unknown reason, we don't need the following hack in Qt versions below or - // equal to 6.2.4. -#if (QT_VERSION > QT_VERSION_CHECK(6, 2, 4)) - [nswindow standardWindowButton:NSWindowCloseButton].hidden = (visible ? NO : YES); - [nswindow standardWindowButton:NSWindowMiniaturizeButton].hidden = (visible ? NO : YES); - [nswindow standardWindowButton:NSWindowZoomButton].hidden = (visible ? NO : YES); -#endif + [nswindow standardWindowButton:NSWindowCloseButton].hidden = NO; + [nswindow standardWindowButton:NSWindowMiniaturizeButton].hidden = NO; + [nswindow standardWindowButton:NSWindowZoomButton].hidden = NO; } static void replaceImplementations() { @@ -509,7 +509,10 @@ static inline void releaseWindowProxy(const WId windowId) { if (auto proxy = g_proxyList->take(windowId)) { - proxy->setSystemTitleBarVisible(true); + // TODO: Determine if the window is valid + + // The window has been destroyed + // proxy->setSystemTitleBarVisible(true); delete proxy; } else { return; @@ -630,10 +633,11 @@ } case QEvent::MouseButtonDblClick: { - if (me->button() == Qt::LeftButton && inTitleBar && - !delegate->isHostSizeFixed(host)) { + if (me->button() == Qt::LeftButton && inTitleBar && !m_context->isHostSizeFixed()) { + Qt::WindowFlags windowFlags = delegate->getWindowFlags(host); Qt::WindowStates windowState = delegate->getWindowState(host); - if (!(windowState & Qt::WindowFullScreen)) { + if ((windowFlags & Qt::WindowMaximizeButtonHint) && + !(windowState & Qt::WindowFullScreen)) { if (windowState & Qt::WindowMaximized) { delegate->setWindowState(host, windowState & ~Qt::WindowMaximized); } else { @@ -657,7 +661,7 @@ } CocoaWindowContext::~CocoaWindowContext() { - releaseWindowProxy(windowId); + releaseWindowProxy(m_windowId); } QString CocoaWindowContext::key() const { @@ -667,7 +671,7 @@ void CocoaWindowContext::virtual_hook(int id, void *data) { switch (id) { case SystemButtonAreaChangedHook: { - ensureWindowProxy(windowId)->setScreenRectCallback(m_systemButtonAreaCallback); + ensureWindowProxy(m_windowId)->setScreenRectCallback(m_systemButtonAreaCallback); return; } @@ -679,27 +683,25 @@ QVariant CocoaWindowContext::windowAttribute(const QString &key) const { if (key == QStringLiteral("title-bar-height")) { - if (!m_windowHandle) - return 0; - return ensureWindowProxy(windowId)->titleBarHeight(); + if (!m_windowId) + return {}; + return ensureWindowProxy(m_windowId)->titleBarHeight(); } return AbstractWindowContext::windowAttribute(key); } - void CocoaWindowContext::winIdChanged() { + void CocoaWindowContext::winIdChanged(WId winId, WId oldWinId) { // If the original window id is valid, remove all resources related - if (windowId) { - releaseWindowProxy(windowId); - windowId = 0; + if (oldWinId) { + releaseWindowProxy(oldWinId); } - if (!m_windowHandle) { + if (!winId) { return; } // Allocate new resources - windowId = m_windowHandle->winId(); - ensureWindowProxy(windowId)->setSystemTitleBarVisible(false); + ensureWindowProxy(winId)->setSystemTitleBarVisible(false); } bool CocoaWindowContext::windowAttributeChanged(const QString &key, const QVariant &attribute, @@ -709,7 +711,7 @@ if (key == QStringLiteral("no-system-buttons")) { if (attribute.type() != QVariant::Bool) return false; - ensureWindowProxy(windowId)->setSystemButtonVisible(!attribute.toBool()); + ensureWindowProxy(m_windowId)->setSystemButtonVisible(!attribute.toBool()); return true; } @@ -736,7 +738,7 @@ } else { return false; } - return ensureWindowProxy(windowId)->setBlurEffect(mode); + return ensureWindowProxy(m_windowId)->setBlurEffect(mode); } return false; -- Gitblit v1.9.1