X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cfb76a19a4aeb25f245196ff5d4cae8a33fa6802..c6e2af4570ee868c93fc504b02f321efe5d5acee:/src/msw/caret.cpp?ds=inline diff --git a/src/msw/caret.cpp b/src/msw/caret.cpp index cacc6801f5..ee761165a1 100644 --- a/src/msw/caret.cpp +++ b/src/msw/caret.cpp @@ -46,7 +46,9 @@ #ifdef __WIN16__ #define CALL_CARET_API(api, args) api args #else // Win32 - #define CALL_CARET_API(api, args) if ( !api args ) wxLogLastError(#api) + #define CALL_CARET_API(api, args) \ + if ( !api args ) \ + wxLogLastError(_T(#api)) #endif // Win16/32 // =========================================================================== @@ -63,7 +65,7 @@ int wxCaretBase::GetBlinkTime() int blinkTime = ::GetCaretBlinkTime(); if ( !blinkTime ) { - wxLogLastError("GetCaretBlinkTime"); + wxLogLastError(wxT("GetCaretBlinkTime")); } return blinkTime; @@ -130,6 +132,17 @@ void wxCaret::DoShow() wxASSERT_MSG( GetWindow(), wxT("caret without window cannot be shown") ); wxASSERT_MSG( IsOk(), wxT("caret of zero size cannot be shown") ); + // we might not have created the caret yet if we had got the focus first + // and the caret was shown later - so do it now if we have the focus but + // not the caret + if ( !m_hasCaret && (wxWindow::FindFocus() == GetWindow()) ) + { + if ( MSWCreateCaret() ) + { + DoMove(); + } + } + if ( m_hasCaret ) { CALL_CARET_API(ShowCaret, (GetWinHwnd(GetWindow()))); @@ -156,7 +169,10 @@ void wxCaret::DoMove() wxASSERT_MSG( wxWindow::FindFocus() == GetWindow(), wxT("how did we lose focus?") ); - CALL_CARET_API(SetCaretPos, (m_x, m_y)); + // for compatibility with the generic version, the coordinates are + // client ones + wxPoint pt = GetWindow()->GetClientAreaOrigin(); + CALL_CARET_API(SetCaretPos, (m_x + pt.x, m_y + pt.y)); } //else: we don't have caret right now, nothing to do (this does happen) } @@ -173,6 +189,6 @@ void wxCaret::DoSize() m_hasCaret = FALSE; CALL_CARET_API(DestroyCaret, ()); MSWCreateCaret(); - DoMove(); + OnSetFocus(); } }