Change storage of window menu label translation

Use member variable instead of global variable
This commit is contained in:
utelle
2018-08-31 23:28:53 +02:00
committed by Vadim Zeitlin
parent 9907ca13f9
commit 9a9176a1be
2 changed files with 34 additions and 14 deletions

View File

@@ -85,6 +85,12 @@ public:
virtual void RemoveMDIChild(wxMDIChildFrame *child); virtual void RemoveMDIChild(wxMDIChildFrame *child);
#endif // wxUSE_MENUS #endif // wxUSE_MENUS
// called by AddWindowMenu to remember the translation of the window menu label
void SetWindowMenuLabelTranslated();
// called by AddWindowMenu and RemoveWindowMenu to get the last used translation of the window menu label
const wxString GetWindowMenuLabelTranslated() const;
// handlers // handlers
// -------- // --------
@@ -150,6 +156,9 @@ private:
// it was "handled", see OnActivate() and HandleActivate() // it was "handled", see OnActivate() and HandleActivate()
bool m_activationNotHandled; bool m_activationNotHandled;
// holds the current translation for the window menu label
wxString m_windowMenuLabelTranslated;
friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame; friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;

View File

@@ -77,7 +77,6 @@ const int wxID_MDI_MORE_WINDOWS = wxLAST_MDI_CHILD + 1;
// The MDI "Window" menu label // The MDI "Window" menu label
const char *WINDOW_MENU_LABEL = gettext_noop("&Window"); const char *WINDOW_MENU_LABEL = gettext_noop("&Window");
wxString WINDOW_MENU_LABEL_TRANSLATED;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// private functions // private functions
@@ -89,10 +88,10 @@ void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow);
// insert the window menu (subMenu) into menu just before "Help" submenu or at // insert the window menu (subMenu) into menu just before "Help" submenu or at
// the very end if not found // the very end if not found
void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU subMenu); void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU subMenu, const wxString& windowMenuLabelTranslated);
// Remove the window menu // Remove the window menu
void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu); void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu, const wxString& windowMenuLabelTranslated);
// unpack the parameters of WM_MDIACTIVATE message // unpack the parameters of WM_MDIACTIVATE message
void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam, void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
@@ -278,6 +277,16 @@ int wxMDIParentFrame::GetChildFramesCount() const
return count; return count;
} }
void wxMDIParentFrame::SetWindowMenuLabelTranslated()
{
m_windowMenuLabelTranslated = wxGetTranslation(WINDOW_MENU_LABEL);
}
const wxString wxMDIParentFrame::GetWindowMenuLabelTranslated() const
{
return m_windowMenuLabelTranslated;
}
#if wxUSE_MENUS #if wxUSE_MENUS
void wxMDIParentFrame::AddMDIChild(wxMDIChildFrame * WXUNUSED(child)) void wxMDIParentFrame::AddMDIChild(wxMDIChildFrame * WXUNUSED(child))
@@ -335,7 +344,8 @@ void wxMDIParentFrame::AddWindowMenu()
// attach it to the menu bar. // attach it to the menu bar.
m_windowMenu->Attach(GetMenuBar()); m_windowMenu->Attach(GetMenuBar());
MDIInsertWindowMenu(GetClientWindow(), m_hMenu, GetMDIWindowMenu(this)); SetWindowMenuLabelTranslated();
MDIInsertWindowMenu(GetClientWindow(), m_hMenu, GetMDIWindowMenu(this), GetWindowMenuLabelTranslated());
} }
} }
@@ -343,7 +353,7 @@ void wxMDIParentFrame::RemoveWindowMenu()
{ {
if ( m_windowMenu ) if ( m_windowMenu )
{ {
MDIRemoveWindowMenu(GetClientWindow(), m_hMenu); MDIRemoveWindowMenu(GetClientWindow(), m_hMenu, GetWindowMenuLabelTranslated());
m_windowMenu->Detach(); m_windowMenu->Detach();
} }
@@ -927,7 +937,7 @@ wxMDIChildFrame::~wxMDIChildFrame()
DestroyChildren(); DestroyChildren();
MDIRemoveWindowMenu(NULL, m_hMenu); MDIRemoveWindowMenu(NULL, m_hMenu, parent->GetWindowMenuLabelTranslated());
// MDIRemoveWindowMenu() doesn't update the MDI menu when called with NULL // MDIRemoveWindowMenu() doesn't update the MDI menu when called with NULL
// window, so do it ourselves. // window, so do it ourselves.
@@ -1048,12 +1058,14 @@ void wxMDIChildFrame::InternalSetMenuBar()
wxMDIParentFrame * const parent = GetMDIParent(); wxMDIParentFrame * const parent = GetMDIParent();
MDIInsertWindowMenu(parent->GetClientWindow(), MDIInsertWindowMenu(parent->GetClientWindow(),
m_hMenu, GetMDIWindowMenu(parent)); m_hMenu, GetMDIWindowMenu(parent), parent->GetWindowMenuLabelTranslated());
} }
void wxMDIChildFrame::DetachMenuBar() void wxMDIChildFrame::DetachMenuBar()
{ {
MDIRemoveWindowMenu(NULL, m_hMenu); wxMDIParentFrame * const parent = GetMDIParent();
MDIRemoveWindowMenu(NULL, m_hMenu, parent->GetWindowMenuLabelTranslated());
wxFrame::DetachMenuBar(); wxFrame::DetachMenuBar();
} }
@@ -1553,7 +1565,7 @@ private:
wxDECLARE_NO_COPY_CLASS(MenuIterator); wxDECLARE_NO_COPY_CLASS(MenuIterator);
}; };
void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin) void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin, const wxString& windowMenuLabelTranslated)
{ {
HMENU hmenu = (HMENU)hMenu; HMENU hmenu = (HMENU)hMenu;
@@ -1563,7 +1575,6 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
bool inserted = false; bool inserted = false;
wxString buf; wxString buf;
MenuIterator it(hmenu); MenuIterator it(hmenu);
WINDOW_MENU_LABEL_TRANSLATED = wxGetTranslation(WINDOW_MENU_LABEL);
while ( it.GetNext(buf) ) while ( it.GetNext(buf) )
{ {
const wxString label = wxStripMenuCodes(buf); const wxString label = wxStripMenuCodes(buf);
@@ -1573,7 +1584,7 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
::InsertMenu(hmenu, it.GetPos(), ::InsertMenu(hmenu, it.GetPos(),
MF_BYPOSITION | MF_POPUP | MF_STRING, MF_BYPOSITION | MF_POPUP | MF_STRING,
(UINT_PTR)menuWin, (UINT_PTR)menuWin,
WINDOW_MENU_LABEL_TRANSLATED.t_str()); windowMenuLabelTranslated.t_str());
break; break;
} }
} }
@@ -1582,14 +1593,14 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
{ {
::AppendMenu(hmenu, MF_POPUP, ::AppendMenu(hmenu, MF_POPUP,
(UINT_PTR)menuWin, (UINT_PTR)menuWin,
WINDOW_MENU_LABEL_TRANSLATED.t_str()); windowMenuLabelTranslated.t_str());
} }
} }
MDISetMenu(win, hmenu, menuWin); MDISetMenu(win, hmenu, menuWin);
} }
void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu) void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu, const wxString& windowMenuLabelTranslated)
{ {
HMENU hmenu = (HMENU)hMenu; HMENU hmenu = (HMENU)hMenu;
@@ -1599,7 +1610,7 @@ void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu)
MenuIterator it(hmenu); MenuIterator it(hmenu);
while ( it.GetNext(buf) ) while ( it.GetNext(buf) )
{ {
if ( wxStrcmp(buf, WINDOW_MENU_LABEL_TRANSLATED) == 0 ) if ( wxStrcmp(buf, windowMenuLabelTranslated) == 0 )
{ {
if ( !::RemoveMenu(hmenu, it.GetPos(), MF_BYPOSITION) ) if ( !::RemoveMenu(hmenu, it.GetPos(), MF_BYPOSITION) )
{ {