X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d2ffaf168d8c992e7e431032d6f3e53989b33ffe..384b8d9f3d9e239d5e639e406c4703a9ccbf8ad6:/src/xrc/xh_menu.cpp

diff --git a/src/xrc/xh_menu.cpp b/src/xrc/xh_menu.cpp
index c278e30691..275c78aa62 100644
--- a/src/xrc/xh_menu.cpp
+++ b/src/xrc/xh_menu.cpp
@@ -21,6 +21,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/frame.h"
+    #include "wx/log.h"
     #include "wx/menu.h"
 #endif
 
@@ -88,7 +89,15 @@ wxObject *wxMenuXmlHandler::DoCreateResource()
                 kind = wxITEM_RADIO;
             if (GetBool(wxT("checkable")))
             {
-                wxASSERT_MSG( kind == wxITEM_NORMAL, _T("can't have both checkable and radio button at once") );
+                if ( kind != wxITEM_NORMAL )
+                {
+                    ReportParamError
+                    (
+                        "checkable",
+                        "menu item can't have both <radio> and <checkable> properties"
+                    );
+                }
+
                 kind = wxITEM_CHECK;
             }
 
@@ -139,7 +148,17 @@ wxMenuBarXmlHandler::wxMenuBarXmlHandler() : wxXmlResourceHandler()
 
 wxObject *wxMenuBarXmlHandler::DoCreateResource()
 {
-    wxMenuBar *menubar = new wxMenuBar(GetStyle());
+    wxMenuBar *menubar = NULL;
+
+    const int style = GetStyle();
+    wxASSERT_MSG(!style || !m_instance,
+                 "cannot use <style> with pre-created menubar");
+
+    if ( m_instance )
+        menubar = wxDynamicCast(m_instance, wxMenuBar);
+    if ( !menubar )
+        menubar = new wxMenuBar(style);
+
     CreateChildren(menubar);
 
     if (m_parentAsWindow)