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:
David Elliott
2003-10-06 19:17:11 +00:00
parent 88e3652fd0
commit 9692f42bc6
6 changed files with 15 additions and 17 deletions

View File

@@ -24,10 +24,10 @@ class wxCocoaNSWindow
public:
void AssociateNSWindow(WX_NSWindow cocoaNSWindow);
void DisassociateNSWindow(WX_NSWindow cocoaNSWindow);
virtual void Cocoa_close(void) = 0;
virtual bool Cocoa_canBecomeMainWindow(bool &canBecome)
{ return false; }
virtual bool CocoaDelegate_windowShouldClose(void) = 0;
virtual void CocoaDelegate_windowWillClose(void) = 0;
virtual void CocoaDelegate_windowDidBecomeKey(void) { }
virtual void CocoaDelegate_windowDidResignKey(void) { }
virtual void CocoaDelegate_windowDidBecomeMain(void) { }

View File

@@ -73,7 +73,7 @@ protected:
// Cocoa specifics
// ------------------------------------------------------------------------
protected:
virtual void Cocoa_close(void);
virtual void CocoaDelegate_windowWillClose(void);
virtual bool Cocoa_canBecomeMainWindow(bool &canBecome)
{ canBecome = true; return true; }

View File

@@ -61,7 +61,7 @@ protected:
// ------------------------------------------------------------------------
public:
inline WX_NSWindow GetNSWindow() { return m_cocoaNSWindow; }
virtual void Cocoa_close(void);
virtual void CocoaDelegate_windowWillClose(void);
virtual bool CocoaDelegate_windowShouldClose(void);
virtual void CocoaDelegate_windowDidBecomeKey(void);
virtual void CocoaDelegate_windowDidResignKey(void);

View File

@@ -42,6 +42,7 @@
- (void)windowDidBecomeMain: (NSNotification *)notification;
- (void)windowDidResignMain: (NSNotification *)notification;
- (BOOL)windowShouldClose: (id)sender;
- (void)windowWillClose: (NSNotification *)notification;
@end //interface wxNSWindowDelegate
@implementation wxNSWindowDelegate : NSObject
@@ -87,6 +88,13 @@
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
// ============================================================================
@@ -123,22 +131,12 @@ void wxCocoaNSWindow::DisassociateNSWindow(WX_NSWindow cocoaNSWindow)
{
}
- (void)close;
- (BOOL)canBecomeMainWindow;
@end // wxPoserNSwindow
WX_IMPLEMENT_POSER(wxPoserNSWindow);
@implementation wxPoserNSWindow : NSWindow
- (void)close
{
wxLogDebug("close");
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
if(tlw)
tlw->Cocoa_close();
[super close];
}
- (BOOL)canBecomeMainWindow
{
bool canBecome = false;

View File

@@ -90,7 +90,7 @@ wxDialog::~wxDialog()
DisassociateNSPanel(GetNSPanel());
}
void wxDialog::Cocoa_close(void)
void wxDialog::CocoaDelegate_windowWillClose(void)
{
m_closed = true;
/* Actually, this isn't true anymore */

View File

@@ -186,7 +186,7 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignMain(void)
wxMenuBarManager::GetInstance()->WindowDidResignMain(this);
}
void wxTopLevelWindowCocoa::Cocoa_close(void)
void wxTopLevelWindowCocoa::CocoaDelegate_windowWillClose(void)
{
m_closed = true;
Destroy();
@@ -257,8 +257,8 @@ bool wxTopLevelWindowCocoa::Close(bool force)
// will invoke windowShouldClose which will call the base class version
// of Close() which will NOT Destroy() the window (see below) but
// if closing is not stopped, then performClose will go ahead and
// close the window which will invoke Cocoa_close() setting m_closed
// to true and Destroy()ing the window.
// close the window which will send the close notifications setting
// m_closed to true and Destroy()ing the window.
[m_cocoaNSWindow performClose:m_cocoaNSWindow];
return m_closed;
}