]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/menu.cpp
fixing infinite recursion
[wxWidgets.git] / src / motif / menu.cpp
index 00637cc3b87e0f43b673eda95710444da19227c6..65fcead0535129cab59a7534c5baa79f6ec551c8 100644 (file)
@@ -33,8 +33,6 @@
 
 #ifdef __VMS__
 #pragma message disable nosimpint
-#define XtDisplay XTDISPLAY
-#define XtWindow XTWINDOW
 #endif
 #include <Xm/Label.h>
 #include <Xm/LabelG.h>
@@ -74,7 +72,7 @@ void wxMenu::Init()
     m_popupShell = (WXWidget) NULL;
     m_buttonWidget = (WXWidget) NULL;
     m_menuId = 0;
-    m_topLevelMenu  = (wxMenu*) NULL;
+    m_topLevelMenu  = NULL;
     m_ownedByMenuBar = false;
 
     if ( !m_title.empty() )
@@ -162,17 +160,14 @@ void wxMenu::SetTitle(const wxString& label)
 
 bool wxMenu::ProcessCommand(wxCommandEvent & event)
 {
-    bool processed = false;
+    // Try the menu's event handler first
+    wxEvtHandler * const handler = GetEventHandler();
+    bool processed = handler ? handler->SafelyProcessEvent(event) : false;
 
-    // Try the menu's event handler
-    if ( !processed && GetEventHandler())
-    {
-        processed = GetEventHandler()->ProcessEvent(event);
-    }
     // Try the window the menu was popped up from (and up
     // through the hierarchy)
     if ( !processed && GetInvokingWindow())
-        processed = GetInvokingWindow()->ProcessEvent(event);
+        processed = GetInvokingWindow()->HandleWindowEvent(event);
 
     return processed;
 }
@@ -221,7 +216,7 @@ void wxMenuBar::EnableTop(size_t WXUNUSED(pos), bool WXUNUSED(flag))
 //  wxLogWarning("wxMenuBar::EnableTop not yet implemented.");
 }
 
-void wxMenuBar::SetLabelTop(size_t pos, const wxString& label)
+void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label)
 {
     wxMenu *menu = GetMenu(pos);
     if ( !menu )
@@ -236,26 +231,14 @@ void wxMenuBar::SetLabelTop(size_t pos, const wxString& label)
                       XmNlabelString, label_str(),
                       NULL);
     }
+    m_titles[pos] = label;
 }
 
-wxString wxMenuBar::GetLabelTop(size_t pos) const
+wxString wxMenuBar::GetMenuLabel(size_t pos) const
 {
-    wxMenu *menu = GetMenu(pos);
-    if ( menu )
-    {
-        Widget w = (Widget)menu->GetButtonWidget();
-        if (w)
-        {
-            XmString text;
-            XtVaGetValues(w,
-                          XmNlabelString, &text,
-                          NULL);
-
-            return wxXmStringToString( text );
-        }
-    }
-
-    return wxEmptyString;
+    wxCHECK_MSG( pos < GetMenuCount(), wxEmptyString,
+                 wxT("invalid menu index in wxMenuBar::GetMenuLabel") );
+    return m_titles[pos];
 }
 
 bool wxMenuBar::Append(wxMenu * menu, const wxString& title)
@@ -381,8 +364,8 @@ bool wxMenuBar::CreateMenuBar(wxFrame* parent)
             Widget tearOff = XmGetTearOffControl(GetWidget(menu));
             wxDoChangeForegroundColour((Widget) tearOff, m_foregroundColour);
             wxDoChangeBackgroundColour((Widget) tearOff, m_backgroundColour, true);
-#endif
         }
+#endif
     }
 
     PostCreation();
@@ -400,7 +383,7 @@ bool wxMenuBar::DestroyMenuBar()
 {
     if (!m_mainWidget)
     {
-        SetMenuBarFrame((wxFrame*) NULL);
+        SetMenuBarFrame(NULL);
         return false;
     }
 
@@ -417,7 +400,7 @@ bool wxMenuBar::DestroyMenuBar()
     XtDestroyWidget((Widget) m_mainWidget);
     m_mainWidget = (WXWidget) 0;
 
-    SetMenuBarFrame((wxFrame*) NULL);
+    SetMenuBarFrame(NULL);
 
     return true;
 }
@@ -546,7 +529,7 @@ void wxMenu::DestroyMenu (bool full)
           node = node->GetNext() )
     {
         wxMenuItem *item = node->GetData();
-        item->SetMenuBar((wxMenuBar*) NULL);
+        item->SetMenuBar(NULL);
 
         item->DestroyItem(full);
     }
@@ -572,7 +555,7 @@ WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const
     if (id == m_menuId)
     {
         if (it)
-            *it = (wxMenuItem*) NULL;
+            *it = NULL;
         return m_buttonWidget;
     }
 
@@ -599,7 +582,7 @@ WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const
     }
 
     if (it)
-        *it = (wxMenuItem*) NULL;
+        *it = NULL;
     return (WXWidget) NULL;
 }