fix close btn behavior on Mac

This commit is contained in:
Altair Wei 2021-11-12 22:43:54 +08:00
parent 7d29ee5b95
commit 57610634d6
3 changed files with 18 additions and 3 deletions

View File

@ -18,13 +18,14 @@ class NSWindowProxy
{
private:
NSWindow* m_window;
QWindow* m_qtwindow;
scoped_nsobject<WindowButtonsProxy> m_buttonProxy;
scoped_nsobject<NSWindowProxyDelegate> 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();
};

View File

@ -1,6 +1,7 @@
#include "nswindow_proxy.h"
#include <QtGui/qguiapplication.h>
#include <QtGui/qwindow.h>
static QList<NSWindow*> 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

View File

@ -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;