diff --git a/src/core/nswindow_proxy.h b/src/core/nswindow_proxy.h index e8c742d..fa25ba6 100644 --- a/src/core/nswindow_proxy.h +++ b/src/core/nswindow_proxy.h @@ -18,13 +18,14 @@ class NSWindowProxy { private: NSWindow* m_window; + QWindow* m_qtwindow; scoped_nsobject m_buttonProxy; scoped_nsobject m_windowDelegate; bool m_windowButtonVisibility; QPoint m_trafficLightPosition; public: - NSWindowProxy(NSWindow *window); + NSWindowProxy(NSWindow *window, QWindow *qtwindow); ~NSWindowProxy(); NSWindow* window() { return m_window; } @@ -44,6 +45,7 @@ public: void notifyWindowLeaveFullScreen(); void notifyWindowWillEnterFullScreen(); void notifyWindowWillLeaveFullScreen(); + void notifyWindowCloseButtonClicked(); }; diff --git a/src/core/nswindow_proxy.mm b/src/core/nswindow_proxy.mm index 398a68a..6a0dee5 100644 --- a/src/core/nswindow_proxy.mm +++ b/src/core/nswindow_proxy.mm @@ -1,6 +1,7 @@ #include "nswindow_proxy.h" #include +#include static QList gFlsWindows; static bool gNSWindowOverrode = false; @@ -160,10 +161,11 @@ static void restoreNSWindowMethods(NSWindow* window) } -NSWindowProxy::NSWindowProxy(NSWindow *window) +NSWindowProxy::NSWindowProxy(NSWindow *window, QWindow *qtwindow) : m_windowButtonVisibility(false) , m_buttonProxy(nullptr) , m_window(window) + , m_qtwindow(qtwindow) { overrideNSWindowMethods(window); m_buttonProxy.reset([[WindowButtonsProxy alloc] initWithWindow:window]); @@ -240,6 +242,11 @@ void NSWindowProxy::notifyWindowWillLeaveFullScreen() { } } +void NSWindowProxy::notifyWindowCloseButtonClicked() { + // Call QWindow::close() when button clicked. + m_qtwindow->close(); +} + @implementation NSWindowProxyDelegate - (id)initWithWindowProxy:(NSWindowProxy*)proxy { m_windowProxy = proxy; @@ -288,4 +295,10 @@ void NSWindowProxy::notifyWindowWillLeaveFullScreen() { - (void)windowDidExitFullScreen:(NSNotification*)notification { m_windowProxy->notifyWindowLeaveFullScreen(); } + +- (BOOL)windowShouldClose:(id)window { + // We will override default close behavior + m_windowProxy->notifyWindowCloseButtonClicked(); + return NO; +} @end diff --git a/src/core/utilities_macos.mm b/src/core/utilities_macos.mm index c11b1af..dde3b65 100644 --- a/src/core/utilities_macos.mm +++ b/src/core/utilities_macos.mm @@ -143,7 +143,7 @@ bool setMacWindowHook(QWindow* w) if (nswindow == nullptr) return false; - NSWindowProxy *obj = new NSWindowProxy(nswindow); + NSWindowProxy *obj = new NSWindowProxy(nswindow, w); gQWindowToNSWindow.insert(w, obj); return true;