diff --git a/include/wx/caret.h b/include/wx/caret.h index e6e9728ff8..b625b5f0ac 100644 --- a/include/wx/caret.h +++ b/include/wx/caret.h @@ -153,6 +153,7 @@ protected: m_window = window; m_width = width; m_height = height; + DoSize(); return true; } diff --git a/src/generic/caret.cpp b/src/generic/caret.cpp index 0f5aa7ac51..603888570b 100644 --- a/src/generic/caret.cpp +++ b/src/generic/caret.cpp @@ -103,7 +103,8 @@ void wxCaret::InitGeneric() #ifndef wxHAS_CARET_USING_OVERLAYS m_xOld = m_yOld = -1; - m_bmpUnderCaret.Create(m_width, m_height); + if (m_width && m_height) + m_bmpUnderCaret.Create(m_width, m_height); #endif } @@ -174,7 +175,10 @@ void wxCaret::DoSize() m_overlay.Reset(); #else // Change bitmap size - m_bmpUnderCaret = wxBitmap(m_width, m_height); + if (m_width && m_height) + m_bmpUnderCaret = wxBitmap(m_width, m_height); + else + m_bmpUnderCaret = wxBitmap(); #endif if (countVisible > 0) { diff --git a/tests/controls/windowtest.cpp b/tests/controls/windowtest.cpp index 372317e67b..cfcc4a0f6d 100644 --- a/tests/controls/windowtest.cpp +++ b/tests/controls/windowtest.cpp @@ -136,10 +136,22 @@ TEST_CASE_METHOD(WindowTestCase, "Window::Mouse", "[window]") CHECK(m_window->GetCursor().IsOk()); #if wxUSE_CARET - //A plain window doesn't have a caret CHECK(!m_window->GetCaret()); - wxCaret* caret = new wxCaret(m_window, 16, 16); + wxCaret* caret; + + // Try creating the caret in two different, but normally equivalent, ways. + SECTION("Caret 1-step") + { + caret = new wxCaret(m_window, 16, 16); + } + + SECTION("Caret 2-step") + { + caret = new wxCaret(); + caret->Create(m_window, 16, 16); + } + m_window->SetCaret(caret); CHECK(m_window->GetCaret()->IsOk());