fix close btn behavior on Mac
This commit is contained in:
parent
7d29ee5b95
commit
57610634d6
|
@ -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();
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue