Use NSWindow delegate notification windowWillClose instead of overriding close
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24110 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -24,10 +24,10 @@ class wxCocoaNSWindow
|
|||||||
public:
|
public:
|
||||||
void AssociateNSWindow(WX_NSWindow cocoaNSWindow);
|
void AssociateNSWindow(WX_NSWindow cocoaNSWindow);
|
||||||
void DisassociateNSWindow(WX_NSWindow cocoaNSWindow);
|
void DisassociateNSWindow(WX_NSWindow cocoaNSWindow);
|
||||||
virtual void Cocoa_close(void) = 0;
|
|
||||||
virtual bool Cocoa_canBecomeMainWindow(bool &canBecome)
|
virtual bool Cocoa_canBecomeMainWindow(bool &canBecome)
|
||||||
{ return false; }
|
{ return false; }
|
||||||
virtual bool CocoaDelegate_windowShouldClose(void) = 0;
|
virtual bool CocoaDelegate_windowShouldClose(void) = 0;
|
||||||
|
virtual void CocoaDelegate_windowWillClose(void) = 0;
|
||||||
virtual void CocoaDelegate_windowDidBecomeKey(void) { }
|
virtual void CocoaDelegate_windowDidBecomeKey(void) { }
|
||||||
virtual void CocoaDelegate_windowDidResignKey(void) { }
|
virtual void CocoaDelegate_windowDidResignKey(void) { }
|
||||||
virtual void CocoaDelegate_windowDidBecomeMain(void) { }
|
virtual void CocoaDelegate_windowDidBecomeMain(void) { }
|
||||||
|
@@ -73,7 +73,7 @@ protected:
|
|||||||
// Cocoa specifics
|
// Cocoa specifics
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
protected:
|
protected:
|
||||||
virtual void Cocoa_close(void);
|
virtual void CocoaDelegate_windowWillClose(void);
|
||||||
virtual bool Cocoa_canBecomeMainWindow(bool &canBecome)
|
virtual bool Cocoa_canBecomeMainWindow(bool &canBecome)
|
||||||
{ canBecome = true; return true; }
|
{ canBecome = true; return true; }
|
||||||
|
|
||||||
|
@@ -61,7 +61,7 @@ protected:
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
public:
|
public:
|
||||||
inline WX_NSWindow GetNSWindow() { return m_cocoaNSWindow; }
|
inline WX_NSWindow GetNSWindow() { return m_cocoaNSWindow; }
|
||||||
virtual void Cocoa_close(void);
|
virtual void CocoaDelegate_windowWillClose(void);
|
||||||
virtual bool CocoaDelegate_windowShouldClose(void);
|
virtual bool CocoaDelegate_windowShouldClose(void);
|
||||||
virtual void CocoaDelegate_windowDidBecomeKey(void);
|
virtual void CocoaDelegate_windowDidBecomeKey(void);
|
||||||
virtual void CocoaDelegate_windowDidResignKey(void);
|
virtual void CocoaDelegate_windowDidResignKey(void);
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
- (void)windowDidBecomeMain: (NSNotification *)notification;
|
- (void)windowDidBecomeMain: (NSNotification *)notification;
|
||||||
- (void)windowDidResignMain: (NSNotification *)notification;
|
- (void)windowDidResignMain: (NSNotification *)notification;
|
||||||
- (BOOL)windowShouldClose: (id)sender;
|
- (BOOL)windowShouldClose: (id)sender;
|
||||||
|
- (void)windowWillClose: (NSNotification *)notification;
|
||||||
@end //interface wxNSWindowDelegate
|
@end //interface wxNSWindowDelegate
|
||||||
|
|
||||||
@implementation wxNSWindowDelegate : NSObject
|
@implementation wxNSWindowDelegate : NSObject
|
||||||
@@ -87,6 +88,13 @@
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)windowWillClose: (NSNotification *)notification
|
||||||
|
{
|
||||||
|
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
|
||||||
|
wxCHECK_RET(win,"windowWillClose received but no wxWindow exists");
|
||||||
|
win->CocoaDelegate_windowWillClose();
|
||||||
|
}
|
||||||
|
|
||||||
@end //implementation wxNSWindowDelegate
|
@end //implementation wxNSWindowDelegate
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -123,22 +131,12 @@ void wxCocoaNSWindow::DisassociateNSWindow(WX_NSWindow cocoaNSWindow)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)close;
|
|
||||||
- (BOOL)canBecomeMainWindow;
|
- (BOOL)canBecomeMainWindow;
|
||||||
@end // wxPoserNSwindow
|
@end // wxPoserNSwindow
|
||||||
|
|
||||||
WX_IMPLEMENT_POSER(wxPoserNSWindow);
|
WX_IMPLEMENT_POSER(wxPoserNSWindow);
|
||||||
@implementation wxPoserNSWindow : NSWindow
|
@implementation wxPoserNSWindow : NSWindow
|
||||||
|
|
||||||
- (void)close
|
|
||||||
{
|
|
||||||
wxLogDebug("close");
|
|
||||||
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
|
||||||
if(tlw)
|
|
||||||
tlw->Cocoa_close();
|
|
||||||
[super close];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)canBecomeMainWindow
|
- (BOOL)canBecomeMainWindow
|
||||||
{
|
{
|
||||||
bool canBecome = false;
|
bool canBecome = false;
|
||||||
|
@@ -90,7 +90,7 @@ wxDialog::~wxDialog()
|
|||||||
DisassociateNSPanel(GetNSPanel());
|
DisassociateNSPanel(GetNSPanel());
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDialog::Cocoa_close(void)
|
void wxDialog::CocoaDelegate_windowWillClose(void)
|
||||||
{
|
{
|
||||||
m_closed = true;
|
m_closed = true;
|
||||||
/* Actually, this isn't true anymore */
|
/* Actually, this isn't true anymore */
|
||||||
|
@@ -186,7 +186,7 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignMain(void)
|
|||||||
wxMenuBarManager::GetInstance()->WindowDidResignMain(this);
|
wxMenuBarManager::GetInstance()->WindowDidResignMain(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTopLevelWindowCocoa::Cocoa_close(void)
|
void wxTopLevelWindowCocoa::CocoaDelegate_windowWillClose(void)
|
||||||
{
|
{
|
||||||
m_closed = true;
|
m_closed = true;
|
||||||
Destroy();
|
Destroy();
|
||||||
@@ -257,8 +257,8 @@ bool wxTopLevelWindowCocoa::Close(bool force)
|
|||||||
// will invoke windowShouldClose which will call the base class version
|
// will invoke windowShouldClose which will call the base class version
|
||||||
// of Close() which will NOT Destroy() the window (see below) but
|
// of Close() which will NOT Destroy() the window (see below) but
|
||||||
// if closing is not stopped, then performClose will go ahead and
|
// if closing is not stopped, then performClose will go ahead and
|
||||||
// close the window which will invoke Cocoa_close() setting m_closed
|
// close the window which will send the close notifications setting
|
||||||
// to true and Destroy()ing the window.
|
// m_closed to true and Destroy()ing the window.
|
||||||
[m_cocoaNSWindow performClose:m_cocoaNSWindow];
|
[m_cocoaNSWindow performClose:m_cocoaNSWindow];
|
||||||
return m_closed;
|
return m_closed;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user