fix close btn behavior on Mac
This commit is contained in:
parent
7d29ee5b95
commit
57610634d6
|
@ -18,13 +18,14 @@ class NSWindowProxy
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
NSWindow* m_window;
|
NSWindow* m_window;
|
||||||
|
QWindow* m_qtwindow;
|
||||||
scoped_nsobject<WindowButtonsProxy> m_buttonProxy;
|
scoped_nsobject<WindowButtonsProxy> m_buttonProxy;
|
||||||
scoped_nsobject<NSWindowProxyDelegate> m_windowDelegate;
|
scoped_nsobject<NSWindowProxyDelegate> m_windowDelegate;
|
||||||
bool m_windowButtonVisibility;
|
bool m_windowButtonVisibility;
|
||||||
QPoint m_trafficLightPosition;
|
QPoint m_trafficLightPosition;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NSWindowProxy(NSWindow *window);
|
NSWindowProxy(NSWindow *window, QWindow *qtwindow);
|
||||||
~NSWindowProxy();
|
~NSWindowProxy();
|
||||||
|
|
||||||
NSWindow* window() { return m_window; }
|
NSWindow* window() { return m_window; }
|
||||||
|
@ -44,6 +45,7 @@ public:
|
||||||
void notifyWindowLeaveFullScreen();
|
void notifyWindowLeaveFullScreen();
|
||||||
void notifyWindowWillEnterFullScreen();
|
void notifyWindowWillEnterFullScreen();
|
||||||
void notifyWindowWillLeaveFullScreen();
|
void notifyWindowWillLeaveFullScreen();
|
||||||
|
void notifyWindowCloseButtonClicked();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "nswindow_proxy.h"
|
#include "nswindow_proxy.h"
|
||||||
|
|
||||||
#include <QtGui/qguiapplication.h>
|
#include <QtGui/qguiapplication.h>
|
||||||
|
#include <QtGui/qwindow.h>
|
||||||
|
|
||||||
static QList<NSWindow*> gFlsWindows;
|
static QList<NSWindow*> gFlsWindows;
|
||||||
static bool gNSWindowOverrode = false;
|
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_windowButtonVisibility(false)
|
||||||
, m_buttonProxy(nullptr)
|
, m_buttonProxy(nullptr)
|
||||||
, m_window(window)
|
, m_window(window)
|
||||||
|
, m_qtwindow(qtwindow)
|
||||||
{
|
{
|
||||||
overrideNSWindowMethods(window);
|
overrideNSWindowMethods(window);
|
||||||
m_buttonProxy.reset([[WindowButtonsProxy alloc] initWithWindow: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
|
@implementation NSWindowProxyDelegate
|
||||||
- (id)initWithWindowProxy:(NSWindowProxy*)proxy {
|
- (id)initWithWindowProxy:(NSWindowProxy*)proxy {
|
||||||
m_windowProxy = proxy;
|
m_windowProxy = proxy;
|
||||||
|
@ -288,4 +295,10 @@ void NSWindowProxy::notifyWindowWillLeaveFullScreen() {
|
||||||
- (void)windowDidExitFullScreen:(NSNotification*)notification {
|
- (void)windowDidExitFullScreen:(NSNotification*)notification {
|
||||||
m_windowProxy->notifyWindowLeaveFullScreen();
|
m_windowProxy->notifyWindowLeaveFullScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)windowShouldClose:(id)window {
|
||||||
|
// We will override default close behavior
|
||||||
|
m_windowProxy->notifyWindowCloseButtonClicked();
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -143,7 +143,7 @@ bool setMacWindowHook(QWindow* w)
|
||||||
if (nswindow == nullptr)
|
if (nswindow == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
NSWindowProxy *obj = new NSWindowProxy(nswindow);
|
NSWindowProxy *obj = new NSWindowProxy(nswindow, w);
|
||||||
gQWindowToNSWindow.insert(w, obj);
|
gQWindowToNSWindow.insert(w, obj);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue