From 1ac76609146a74466b88e53b551e9ea01c5c8801 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 23 Jan 2006 16:38:07 +0000 Subject: [PATCH] extracted wxFrame::MSWTranslateMessage() implementation into new MSWDoTranslateMessage so that it can be reused by wxMDIChildFrame; this allows to pass the correct window to ::TranslateAccelerator() and fix UI updating of the MDI child menu items (bug 1214439) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37081 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/frame.h | 17 +++++++++++++---- src/msw/frame.cpp | 4 ++-- src/msw/mdi.cpp | 4 +++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/wx/msw/frame.h b/include/wx/msw/frame.h index 10c17972d5..077e109202 100644 --- a/include/wx/msw/frame.h +++ b/include/wx/msw/frame.h @@ -122,13 +122,22 @@ protected: // propagate our state change to all child frames void IconizeChildFrames(bool bIconize); - // we add menu bar accel processing - bool MSWTranslateMessage(WXMSG* pMsg); + // override base class version to add menu bar accel processing + virtual bool MSWTranslateMessage(WXMSG *msg) + { + return MSWDoTranslateMessage(this, msg); + } + + // the real implementation of MSWTranslateMessage(), also used by + // wxMDIChildFrame + bool MSWDoTranslateMessage(wxFrame *frame, WXMSG *msg); // window proc for the frames - WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); + virtual WXLRESULT MSWWindowProc(WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam); - // handle WM_INITMENUPOPUP message + // handle WM_INITMENUPOPUP message to generate wxEVT_MENU_OPEN bool HandleInitMenuPopup(WXHMENU hMenu); virtual bool IsMDIChild() const { return false; } diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index b9c2e1c30d..4afd604737 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -726,7 +726,7 @@ WXHICON wxFrame::GetDefaultIcon() const // preprocessing // --------------------------------------------------------------------------- -bool wxFrame::MSWTranslateMessage(WXMSG* pMsg) +bool wxFrame::MSWDoTranslateMessage(wxFrame *frame, WXMSG *pMsg) { if ( wxWindow::MSWTranslateMessage(pMsg) ) return true; @@ -737,7 +737,7 @@ bool wxFrame::MSWTranslateMessage(WXMSG* pMsg) if ( menuBar ) { const wxAcceleratorTable& acceleratorTable = menuBar->GetAccelTable(); - return acceleratorTable.Translate(this, pMsg); + return acceleratorTable.Translate(frame, pMsg); } #endif // wxUSE_MENUS && wxUSE_ACCEL diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index bcb1467df6..c61e986fa4 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -1165,7 +1165,9 @@ WXLRESULT wxMDIChildFrame::MSWDefWindowProc(WXUINT message, WXWPARAM wParam, WXL bool wxMDIChildFrame::MSWTranslateMessage(WXMSG* msg) { - return wxFrame::MSWTranslateMessage(msg); + // we must pass the parent frame to ::TranslateAccelerator(), otherwise it + // doesn't do its job correctly for MDI child menus + return MSWDoTranslateMessage((wxMDIChildFrame *)GetParent(), msg); } // --------------------------------------------------------------------------- -- 2.47.2