| | |
| | | |
| | | #include "qwkglobal_p.h" |
| | | #include "systemwindow_p.h" |
| | | |
| | | namespace QWK { |
| | | |
| | | struct NSWindowProxy { |
| | |
| | | |
| | | static inline void releaseWindowProxy(const WId windowId) { |
| | | if (const auto proxy = g_proxyList()->take(windowId)) { |
| | | proxy->setSystemTitleBarVisible(true); |
| | | delete proxy; |
| | | } |
| | | } |
| | |
| | | |
| | | void CocoaWindowContext::virtual_hook(int id, void *data) { |
| | | switch (id) { |
| | | case ShowSystemMenuHook: { |
| | | // TODO: mac system menu |
| | | return; |
| | | } |
| | | |
| | | case SystemButtonAreaChangedHook: { |
| | | // TODO: mac system button rect updated |
| | | return; |
| | | } |
| | | |
| | | case WindowAttributeChangedHook: { |
| | | auto args = static_cast<void **>(data); |
| | | const auto &key = *static_cast<const QString *>(args[0]); |
| | | const auto &newVar = *static_cast<const QVariant *>(args[1]); |
| | | const auto &oldVar = *static_cast<const QVariant *>(args[2]); |
| | | |
| | | if (key == QStringLiteral("no-system-buttons")) { |
| | | if (newVar.toBool()) { |
| | | // TODO: set off |
| | | } else { |
| | | // TODO: set on |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | |
| | | AbstractWindowContext::virtual_hook(id, data); |
| | | } |
| | | |
| | | void CocoaWindowContext::winIdChanged(QWindow *oldWindow, bool isDestroyed) { |
| | | releaseWindowProxy(windowId); |
| | | void CocoaWindowContext::winIdChanged() { |
| | | // If the original window id is valid, remove all resources related |
| | | if (windowId) { |
| | | releaseWindowProxy(windowId); |
| | | windowId = 0; |
| | | cocoaWindowEventFilter.reset(); |
| | | } |
| | | |
| | | if (!m_windowHandle) { |
| | | return; |
| | | } |
| | | |
| | | // Allocate new resources |
| | | windowId = m_windowHandle->winId(); |
| | | ensureWindowProxy(windowId)->setSystemTitleBarVisible(false); |
| | | cocoaWindowEventFilter = std::make_unique<CocoaWindowEventFilter>(this, this); |
| | | } |
| | | |
| | | bool CocoaWindowContext::windowAttributeChanged(const QString &key, const QVariant &attribute, |
| | | const QVariant &oldAttribute) { |
| | | if (key == QStringLiteral("no-system-buttons")) { |
| | | if (attribute.toBool()) { |
| | | // TODO: set off |
| | | } else { |
| | | // TODO: set on |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |