From 9692f42bc6c74ecc4bc4b8dc1b185894ed1b6cbf Mon Sep 17 00:00:00 2001 From: David Elliott Date: Mon, 6 Oct 2003 19:17:11 +0000 Subject: [PATCH] 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 --- include/wx/cocoa/NSWindow.h | 2 +- include/wx/cocoa/dialog.h | 2 +- include/wx/cocoa/toplevel.h | 2 +- src/cocoa/NSWindow.mm | 18 ++++++++---------- src/cocoa/dialog.mm | 2 +- src/cocoa/toplevel.mm | 6 +++--- 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/include/wx/cocoa/NSWindow.h b/include/wx/cocoa/NSWindow.h index 06d7aebf6c..b0c87c8f2b 100644 --- a/include/wx/cocoa/NSWindow.h +++ b/include/wx/cocoa/NSWindow.h @@ -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) { } diff --git a/include/wx/cocoa/dialog.h b/include/wx/cocoa/dialog.h index e736b8f756..ca47e91ab4 100644 --- a/include/wx/cocoa/dialog.h +++ b/include/wx/cocoa/dialog.h @@ -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; } diff --git a/include/wx/cocoa/toplevel.h b/include/wx/cocoa/toplevel.h index 20ca43150a..e09873628d 100644 --- a/include/wx/cocoa/toplevel.h +++ b/include/wx/cocoa/toplevel.h @@ -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); diff --git a/src/cocoa/NSWindow.mm b/src/cocoa/NSWindow.mm index e3c1446d78..57edbce7ea 100644 --- a/src/cocoa/NSWindow.mm +++ b/src/cocoa/NSWindow.mm @@ -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; diff --git a/src/cocoa/dialog.mm b/src/cocoa/dialog.mm index d4d2c51fd6..01df17f2c3 100644 --- a/src/cocoa/dialog.mm +++ b/src/cocoa/dialog.mm @@ -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 */ diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index c51f22719a..453ad124a3 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -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; } -- 2.45.2