X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/81d66cf39f810503baed79213bc3122fda0ccc7b..520e470fdd0daef09c77938db642e4583933c90d:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 55998c1240..d33807a73a 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -34,13 +34,14 @@ #include "wx/mdi.h" #include "wx/msw/private.h" -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR #include #endif #include extern wxList wxModelessWindows; +extern wxMenu *wxCurrentPopupMenu; #define IDM_WINDOWTILE 4001 #define IDM_WINDOWCASCADE 4002 @@ -265,7 +266,7 @@ void wxMDIParentFrame::SetMenuBar(wxMenuBar *menu_bar) void wxMDIParentFrame::OnSize(wxSizeEvent& event) { -#if USE_CONSTRAINTS +#if wxUSE_CONSTRAINTS if (GetAutoLayout()) Layout(); #endif @@ -279,7 +280,7 @@ void wxMDIParentFrame::OnSize(wxSizeEvent& event) /* Already done in MSWOnSize // forward WM_SIZE to status bar control -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95))) ((wxStatusBar95 *)m_frameStatusBar)->OnSize(event); #endif @@ -302,7 +303,7 @@ void wxMDIParentFrame::OldOnSize(int x, int y) GetEventHandler()->ProcessEvent(event); #else -#if USE_CONSTRAINTS +#if wxUSE_CONSTRAINTS if (GetAutoLayout()) Layout(); #endif @@ -442,7 +443,7 @@ void wxMDIParentFrame::MSWOnSize(int x, int y, WXUINT id) if (!m_iconized) { // forward WM_SIZE to status bar control -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95))) { wxSizeEvent event(wxSize(x, y), m_frameStatusBar->GetId()); @@ -479,13 +480,23 @@ 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 +610,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 +633,7 @@ bool wxMDIParentFrame::MSWProcessMessage(WXMSG* msg) return FALSE; } + bool wxMDIParentFrame::MSWOnEraseBkgnd(WXHDC WXUNUSED(pDC)) { return TRUE; @@ -896,7 +918,7 @@ void wxMDIChildFrame::MSWOnSize(int x, int y, WXUINT id) if (!m_iconized) { // forward WM_SIZE to status bar control -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95))) { wxSizeEvent event(wxSize(x, y), m_frameStatusBar->GetId()); @@ -918,13 +940,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 +977,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 +1225,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); }