]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/frame.cpp
Fixed small bug related to m_lastcount in wxInputStream::Read
[wxWidgets.git] / src / mac / frame.cpp
index 5a95ac9097692e320a1deb4e203e48418191feea..ba1377151f40e3185e51fe84282bbaf4ad580c0d 100644 (file)
@@ -52,13 +52,12 @@ wxFrame::wxFrame()
 #if wxUSE_TOOLBAR
   m_frameToolBar = NULL ;
 #endif
-       m_macShown = false ;
+
        // in order to be able to give size events on show
   m_frameMenuBar = NULL;
   m_frameStatusBar = NULL;
-
-  m_windowParent = NULL;
   m_iconized = FALSE;
+  m_isShown = FALSE;
 }
 
 bool wxFrame::Create(wxWindow *parent,
@@ -75,6 +74,7 @@ bool wxFrame::Create(wxWindow *parent,
   SetName(name);
   m_windowStyle = style;
   m_frameMenuBar = NULL;
+  m_isShown = FALSE;
 
 #if wxUSE_TOOLBAR
   m_frameToolBar = NULL ;
@@ -147,7 +147,6 @@ bool wxFrame::Create(wxWindow *parent,
        UMACreateRootControl( m_macWindowData->m_macWindow , &m_macWindowData->m_macRootControl ) ;
        m_macWindowData->m_macWindowBackgroundTheme = kThemeBrushDocumentWindowBackground ;
        m_macWindowData->m_macFocus = NULL ;
-       m_macShown = false ;
   return TRUE;
 }
 
@@ -342,6 +341,56 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
 
 // Default resizing behaviour - if only ONE subwindow,
 // resize to client rectangle size
+void wxFrame::OnIdle(wxIdleEvent& WXUNUSED(event) )
+{
+    DoMenuUpdates();
+}
+
+
+// update all menus
+void wxFrame::DoMenuUpdates()
+{
+    wxMenuBar* bar = GetMenuBar();
+
+    if ( bar != NULL )
+    {
+        int nCount = bar->GetMenuCount();
+        for (int n = 0; n < nCount; n++)
+            DoMenuUpdates(bar->GetMenu(n), (wxWindow*) NULL);
+    }
+}
+
+// update a menu and all submenus recursively
+void wxFrame::DoMenuUpdates(wxMenu* menu, wxWindow* WXUNUSED(focusWin))
+{
+    wxEvtHandler* evtHandler = GetEventHandler();
+    wxMenuItemList::Node* node = menu->GetMenuItems().GetFirst();
+    while (node)
+    {
+        wxMenuItem* item = node->GetData();
+        if ( !item->IsSeparator() )
+        {
+            wxWindowID id = item->GetId();
+            wxUpdateUIEvent event(id);
+            event.SetEventObject( this );
+
+            if (evtHandler->ProcessEvent(event))
+            {
+                if (event.GetSetText())
+                    menu->SetLabel(id, event.GetText());
+                if (event.GetSetChecked())
+                    menu->Check(id, event.GetChecked());
+                if (event.GetSetEnabled())
+                    menu->Enable(id, event.GetEnabled());
+            }
+
+            if (item->GetSubMenu())
+                DoMenuUpdates(item->GetSubMenu(), (wxWindow*) NULL);
+        }
+        node = node->GetNext();
+    }
+}
+
 void wxFrame::OnSize(wxSizeEvent& event)
 {
   // if we're using constraints - do use them
@@ -491,9 +540,9 @@ wxPoint wxFrame::GetClientAreaOrigin() const
     return pt;
 }
 
-void wxFrame::GetClientSize(int *x, int *y) const
+void wxFrame::DoGetClientSize(int *x, int *y) const
 {
-       wxWindow::GetClientSize( x , y ) ;
+       wxWindow::DoGetClientSize( x , y ) ;
 
   if ( GetStatusBar() )
   {