X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ada5f90df813e2c1fbaf46db71ddda67a6c18b27..18138662efd0bc550d78cbe32e93e25b43bbcbd2:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 6d3b2b4bc6..0046539480 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -803,7 +803,30 @@ bool wxWindowMSW::SetCursor(const wxCursor& cursor) // don't "overwrite" busy cursor if ( m_cursor.Ok() && !wxIsBusy() ) { - ::SetCursor(GetHcursorOf(m_cursor)); + // normally we should change the cursor only if it's over this window + // but we should do it always if we capture the mouse currently + bool set = HasCapture(); + if ( !set ) + { + HWND hWnd = GetHwnd(); + + POINT point; +#ifdef __WXWINCE__ + ::GetCursorPosWinCE(&point); +#else + ::GetCursorPos(&point); +#endif + + RECT rect = wxGetWindowRect(hWnd); + + set = ::PtInRect(&rect, point) != 0; + } + + if ( set ) + { + ::SetCursor(GetHcursorOf(m_cursor)); + } + //else: will be set later when the mouse enters this window } return true; @@ -2155,10 +2178,13 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg) switch ( msg->wParam ) { case VK_TAB: - if ( lDlgCode & DLGC_WANTTAB ) { + if ( (lDlgCode & DLGC_WANTTAB) && !bCtrlDown ) + { + // let the control have the TAB bProcess = false; } - else { + else // use it for navigation + { // Ctrl-Tab cycles thru notebook pages bWindowChange = bCtrlDown; bForward = !bShiftDown; @@ -2838,12 +2864,12 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l #endif // defined(WM_DRAWITEM) case WM_GETDLGCODE: - if ( !IsOfStandardClass() ) + if ( !IsOfStandardClass() || HasFlag(wxWANTS_CHARS) ) { // we always want to get the char events rc.result = DLGC_WANTCHARS; - if ( GetWindowStyleFlag() & wxWANTS_CHARS ) + if ( HasFlag(wxWANTS_CHARS) ) { // in fact, we want everything rc.result |= DLGC_WANTARROWS |