X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/81d66cf39f810503baed79213bc3122fda0ccc7b..8429bec1e8e3fcb7d071bc3ef7c665c484b5fdc1:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 55998c1240..fdb27c0822 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -41,6 +41,7 @@ #include extern wxList wxModelessWindows; +extern wxMenu *wxCurrentPopupMenu; #define IDM_WINDOWTILE 4001 #define IDM_WINDOWCASCADE 4002 @@ -479,13 +480,21 @@ bool wxMDIParentFrame::MSWOnActivate(int state, bool minimized, WXHWND activate) bool wxMDIParentFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control) { - if (cmd == 0) +// if (cmd == 0) // Why did I do this test? { // In case it's e.g. a toolbar. wxWindow *win = wxFindWinFromHandle(control); if (win) return win->MSWCommand(cmd, id); + if (wxCurrentPopupMenu) + { + wxMenu *popupMenu = wxCurrentPopupMenu; + wxCurrentPopupMenu = NULL; + if (!popupMenu->MSWCommand(cmd, id)) + return TRUE; + } + switch (id) { case IDM_WINDOWCASCADE: @@ -599,8 +608,18 @@ bool wxMDIParentFrame::MSWProcessMessage(WXMSG* msg) if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWProcessMessage(msg)) return TRUE; - if (m_acceleratorTable != (WXHANDLE) NULL && - ::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable, pMsg)) + return FALSE; +} + +bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg) +{ + MSG *pMsg = (MSG *)msg; + + if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWTranslateMessage(msg)) + return TRUE; + + if (m_acceleratorTable.Ok() && + ::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable.GetHACCEL(), pMsg)) return TRUE; if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) @@ -612,6 +631,7 @@ bool wxMDIParentFrame::MSWProcessMessage(WXMSG* msg) return FALSE; } + bool wxMDIParentFrame::MSWOnEraseBkgnd(WXHDC WXUNUSED(pDC)) { return TRUE; @@ -918,13 +938,22 @@ bool wxMDIChildFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control) #if WXDEBUG > 1 wxDebugMsg("wxMDIChildFrame::MSWOnCommand %d\n", GetHWND()); #endif - if ((cmd == 0) && GetHWND()) +// if ((cmd == 0) && GetHWND()) + if (GetHWND()) { // In case it's e.g. a toolbar. wxWindow *win = wxFindWinFromHandle(control); if (win) return win->MSWCommand(cmd, id); + if (wxCurrentPopupMenu) + { + wxMenu *popupMenu = wxCurrentPopupMenu; + wxCurrentPopupMenu = NULL; + if (popupMenu->MSWCommand(cmd, id)) + return TRUE; + } + if (GetMenuBar() && GetMenuBar()->FindItemForId(id)) { ProcessCommand(id); @@ -946,14 +975,20 @@ long wxMDIChildFrame::MSWDefWindowProc(WXUINT message, WXUINT wParam, WXLPARAM l } bool wxMDIChildFrame::MSWProcessMessage(WXMSG *msg) +{ + return FALSE; +} + +bool wxMDIChildFrame::MSWTranslateMessage(WXMSG* msg) { MSG *pMsg = (MSG *)msg; - if (m_acceleratorTable && GetHWND()) + if (m_acceleratorTable.Ok()) { wxFrame *parent = (wxFrame *)GetParent(); HWND parent_hwnd = (HWND) parent->GetHWND(); - return (::TranslateAccelerator(parent_hwnd, (HACCEL) m_acceleratorTable, pMsg) != 0); + return (::TranslateAccelerator(parent_hwnd, (HACCEL) m_acceleratorTable.GetHACCEL(), pMsg) != 0); } + return FALSE; } @@ -1188,7 +1223,7 @@ long wxMDIClientWindow::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPa long wxMDIClientWindow::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { if ( MSWGetOldWndProc() != 0) - return ::CallWindowProc(CASTWNDPROC (FARPROC) MSWGetOldWndProc(), (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam); + return ::CallWindowProc(CASTWNDPROC MSWGetOldWndProc(), (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam); else return ::DefWindowProc((HWND) m_hWnd, (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam); }