X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/28319afe559ccc061d15e5a5cb7208959f5c771e..c944775f72435d2c0493113e05445898ab8baf1b:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 8037b29d9d..d8be1a890b 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1319,8 +1319,6 @@ wxBorder wxWindowMSW::TranslateBorder(wxBorder border) const #endif return border; #endif - - return border; } @@ -2261,9 +2259,13 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg) wxWindow *win = this; if ( !bCtrlDown ) { - while ( win && !win->IsTopLevel() ) + // this will contain the dialog code of this + // window and all of its parent windows in turn + LONG lDlgCode2 = lDlgCode; + + while ( win ) { - if ( lDlgCode & DLGC_WANTMESSAGE ) + if ( lDlgCode2 & DLGC_WANTMESSAGE ) { // as it wants to process Enter itself, // don't call IsDialogMessage() which @@ -2271,7 +2273,20 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg) return false; } + // don't propagate keyboard messages beyond + // the first top level window parent + if ( win->IsTopLevel() ) + break; + win = win->GetParent(); + + lDlgCode2 = ::SendMessage + ( + GetHwndOf(win), + WM_GETDLGCODE, + 0, + 0 + ); } } else // bCtrlDown @@ -5005,7 +5020,7 @@ void wxWindowMSW::InitMouseEvent(wxMouseEvent& event, event.m_aux1Down = (flags & MK_XBUTTON1) != 0; event.m_aux2Down = (flags & MK_XBUTTON2) != 0; #endif // wxHAS_XBUTTON - event.m_altDown = ::GetKeyState(VK_MENU) < 0; + event.m_altDown = ::wxIsAltDown(); #ifndef __WXWINCE__ event.SetTimestamp(::GetMessageTime()); @@ -6046,9 +6061,9 @@ wxMouseState wxGetMouseState() ms.SetAux2Down(wxIsKeyDown(VK_XBUTTON2)); #endif // wxHAS_XBUTTON - ms.SetControlDown(wxIsKeyDown(VK_CONTROL)); - ms.SetShiftDown(wxIsKeyDown(VK_SHIFT)); - ms.SetAltDown(wxIsKeyDown(VK_MENU)); + ms.SetControlDown(wxIsCtrlDown ()); + ms.SetShiftDown (wxIsShiftDown()); + ms.SetAltDown (wxIsAltDown ()); // ms.SetMetaDown(); return ms;