X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/670f9935630beb2123a5ca62894ae92a3f0efa4f..9d8fe14a97d1092989eecbe43c4e1f730fba17ad:/src/motif/menu.cpp diff --git a/src/motif/menu.cpp b/src/motif/menu.cpp index b036cac890..00637cc3b8 100644 --- a/src/motif/menu.cpp +++ b/src/motif/menu.cpp @@ -25,13 +25,12 @@ #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/app.h" + #include "wx/utils.h" + #include "wx/frame.h" + #include "wx/settings.h" + #include "wx/menuitem.h" #endif -#include "wx/menuitem.h" -#include "wx/utils.h" -#include "wx/frame.h" -#include "wx/settings.h" - #ifdef __VMS__ #pragma message disable nosimpint #define XtDisplay XTDISPLAY @@ -83,10 +82,6 @@ void wxMenu::Init() Append(-3, m_title) ; AppendSeparator() ; } - - m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENU); - m_foregroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT); - m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); } // The wxWindow destructor will take care of deleting the submenus. @@ -191,9 +186,6 @@ void wxMenuBar::Init() m_eventHandler = this; m_menuBarFrame = NULL; m_mainWidget = (WXWidget) NULL; - m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENU); - m_foregroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT); - m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); } wxMenuBar::wxMenuBar(size_t n, wxMenu *menus[], const wxArrayString& titles, long WXUNUSED(style)) @@ -319,20 +311,17 @@ wxMenu *wxMenuBar::Remove(size_t pos) // Find the menu menuString, item itemString, and return the item id. // Returns -1 if none found. -int wxMenuBar::FindMenuItem (const wxString& menuString, const wxString& itemString) const +int wxMenuBar::FindMenuItem(const wxString& menuString, const wxString& itemString) const { - char buf1[200]; - char buf2[200]; - wxStripMenuCodes (wxConstCast(menuString.c_str(), char), buf1); + const wxString stripped = wxStripMenuCodes(menuString); size_t menuCount = GetMenuCount(); for (size_t i = 0; i < menuCount; i++) { - wxStripMenuCodes (wxConstCast(m_titles[i].c_str(), char), buf2); - if (strcmp (buf1, buf2) == 0) + if ( wxStripMenuCodes(m_titles[i]) == stripped ) return m_menus.Item(i)->GetData()->FindItem (itemString); } - return -1; + return wxNOT_FOUND; } wxMenuItem *wxMenuBar::FindItem(int id, wxMenu ** itemMenu) const @@ -353,6 +342,10 @@ wxMenuItem *wxMenuBar::FindItem(int id, wxMenu ** itemMenu) const // Create menubar bool wxMenuBar::CreateMenuBar(wxFrame* parent) { + m_parent = parent; // bleach... override it! + PreCreation(); + m_parent = NULL; + if (m_mainWidget) { XtVaSetValues((Widget) parent->GetMainWidget(), XmNmenuBar, (Widget) m_mainWidget, NULL); @@ -392,9 +385,7 @@ bool wxMenuBar::CreateMenuBar(wxFrame* parent) } } - SetBackgroundColour(m_backgroundColour); - SetForegroundColour(m_foregroundColour); - SetFont(m_font); + PostCreation(); XtVaSetValues((Widget) parent->GetMainWidget(), XmNmenuBar, (Widget) m_mainWidget, NULL); XtRealizeWidget ((Widget) menuBarW); @@ -478,13 +469,24 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, { Widget menu = (Widget) 0; Widget buttonWidget = (Widget) 0; + Display* dpy = XtDisplay((Widget)parent); Arg args[5]; XtSetArg (args[0], XmNnumColumns, m_numColumns); XtSetArg (args[1], XmNpacking, (m_numColumns > 1) ? XmPACK_COLUMN : XmPACK_TIGHT); + if ( !m_font.Ok() ) + { + if ( menuBar ) + m_font = menuBar->GetFont(); + else if ( GetInvokingWindow() ) + m_font = GetInvokingWindow()->GetFont(); + } + + XtSetArg (args[2], (String)wxFont::GetFontTag(), m_font.GetFontTypeC(dpy) ); + if (!pullDown) { - menu = XmCreatePopupMenu ((Widget) parent, wxMOTIF_STR("popup"), args, 2); + menu = XmCreatePopupMenu ((Widget) parent, wxMOTIF_STR("popup"), args, 3); #if 0 XtAddCallback(menu, XmNunmapCallback, @@ -495,7 +497,7 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, else { char mnem = wxFindMnemonic (title); - menu = XmCreatePulldownMenu ((Widget) parent, wxMOTIF_STR("pulldown"), args, 2); + menu = XmCreatePulldownMenu ((Widget) parent, wxMOTIF_STR("pulldown"), args, 3); wxString title2(wxStripMenuCodes(title)); wxXmString label_str(title2); @@ -507,6 +509,8 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, #endif XmNlabelString, label_str(), XmNsubMenuId, menu, + (String)wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), + XmNpositionIndex, index, NULL); if (mnem != 0) @@ -527,9 +531,7 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, item->CreateItem(menu, menuBar, topMenu, i); } - SetBackgroundColour(m_backgroundColour); - SetForegroundColour(m_foregroundColour); - SetFont(m_font); + ChangeFont(); return buttonWidget; } @@ -604,6 +606,8 @@ WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const void wxMenu::SetBackgroundColour(const wxColour& col) { m_backgroundColour = col; + if (!col.Ok()) + return; if (m_menuWidget) wxDoChangeBackgroundColour(m_menuWidget, (wxColour&) col); if (m_buttonWidget) @@ -627,6 +631,8 @@ void wxMenu::SetBackgroundColour(const wxColour& col) void wxMenu::SetForegroundColour(const wxColour& col) { m_foregroundColour = col; + if (!col.Ok()) + return; if (m_menuWidget) wxDoChangeForegroundColour(m_menuWidget, (wxColour&) col); if (m_buttonWidget) @@ -693,7 +699,10 @@ void wxMenu::SetFont(const wxFont& font) bool wxMenuBar::SetBackgroundColour(const wxColour& col) { - m_backgroundColour = col; + if (!wxWindowBase::SetBackgroundColour(col)) + return false; + if (!col.Ok()) + return false; if (m_mainWidget) wxDoChangeBackgroundColour(m_mainWidget, (wxColour&) col); @@ -706,7 +715,10 @@ bool wxMenuBar::SetBackgroundColour(const wxColour& col) bool wxMenuBar::SetForegroundColour(const wxColour& col) { - m_foregroundColour = col; + if (!wxWindowBase::SetForegroundColour(col)) + return false; + if (!col.Ok()) + return false; if (m_mainWidget) wxDoChangeForegroundColour(m_mainWidget, (wxColour&) col);