]> git.saurik.com Git - wxWidgets.git/commitdiff
Change m_windowCurrent to m_currentNSWindow such that m_currentNSWindow is
authorDavid Elliott <dfe@tgwbd.org>
Mon, 12 Apr 2004 04:58:32 +0000 (04:58 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Mon, 12 Apr 2004 04:58:32 +0000 (04:58 +0000)
never used directly but only to look up the associated wxCocoaNSWindow.
If the wxCocoaNSWindow cannot be found later in UpdateMenuBar then it's
likely been destroyed but no crash will result as before.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26720 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/mbarman.h
src/cocoa/mbarman.mm

index 32c013e0da51911b569ac26f138cff1e17214d59..70dc7d3d612e3baa299c7647be3d6158c63862c6 100644 (file)
@@ -64,7 +64,7 @@ protected:
     // Main menu (if app provides one)
     wxMenuBar *m_mainMenuBar;
     wxMenuBarManagerObserver *m_observer;
-    wxCocoaNSWindow *m_windowCurrent;
+    WX_NSWindow m_currentNSWindow;
 };
 
 #endif // wxUSE_MENUS
index 77fea84ec692bc105817d0b8441596b440d5c5e8..fa6f666c5fed0a5a010595dc97b818fcba962991 100644 (file)
@@ -127,7 +127,7 @@ wxMenuBarManager::wxMenuBarManager()
     m_menuMain = nil;
     m_mainMenuBarInstalled = true;
     m_mainMenuBar = NULL;
-    m_windowCurrent = NULL;
+    m_currentNSWindow = nil;
 
     NSApplication *theNSApplication = wxTheApp->GetNSApplication();
     // Create the services menu.
@@ -243,7 +243,10 @@ void wxMenuBarManager::InstallMainMenu()
 
 void wxMenuBarManager::WindowDidBecomeKey(NSNotification *notification)
 {
-    wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+    /* NOTE: m_currentNSWindow might be destroyed but we only ever use it
+       to look it up in the hash table.  Do not send messages to it. */
+    m_currentNSWindow = [notification object];
+    wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa(m_currentNSWindow);
     if(win)
         InstallMenuBarForWindow(win);
     else
@@ -271,7 +274,6 @@ void wxMenuBarManager::WindowWillClose(NSNotification *notification)
 void wxMenuBarManager::InstallMenuBarForWindow(wxCocoaNSWindow *win)
 {
     wxASSERT(win);
-    m_windowCurrent = win;
     wxMenuBar *menubar = win->GetAppMenuBar(win);
     wxLogTrace(wxTRACE_COCOA,wxT("Found menubar=%p for window=%p."),menubar,win);
     SetMenuBar(menubar);
@@ -279,8 +281,12 @@ void wxMenuBarManager::InstallMenuBarForWindow(wxCocoaNSWindow *win)
 
 void wxMenuBarManager::UpdateMenuBar()
 {
-    if(m_windowCurrent)
-        InstallMenuBarForWindow(m_windowCurrent);
+    if(m_currentNSWindow)
+    {
+        wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa(m_currentNSWindow);
+        if(win)
+            InstallMenuBarForWindow(win);
+    }
 }
 
 #endif // wxUSE_MENUS