From: Vadim Zeitlin Date: Fri, 11 Jun 1999 11:14:47 +0000 (+0000) Subject: minor changes (fixing crash on mouse click) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/02fe546f1fe77a53b6de70a663113a9e22c1ccf4 minor changes (fixing crash on mouse click) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2760 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/richedit/wxllist.cpp b/samples/richedit/wxllist.cpp index 7ae280d6d8..f6b6032c9c 100644 --- a/samples/richedit/wxllist.cpp +++ b/samples/richedit/wxllist.cpp @@ -1852,8 +1852,11 @@ wxLayoutList::MoveCursorWord(int n, bool untilNext) } else // backwards { - if ( isspace(*p) ) + // in these 2 cases we took 1 char too much + if ( (p < start) || isspace(*p) ) + { p++; + } } n > 0 ? n-- : n++; @@ -1964,7 +1967,7 @@ wxLayoutList::LineBreak(void) if(prev) height += prev->GetHeight(); height += m_CursorLine->GetHeight(); - + m_movedCursor = true; SetUpdateRect(position); @@ -2172,7 +2175,8 @@ wxLayoutList::Layout(wxDC &dc, CoordType bottom, bool forceAll, if(cpos && line ->GetLineNumber() == cpos->y) { *cpos = m_CursorScreenPos; - *csize = m_CursorSize; + if ( csize ) + *csize = m_CursorSize; } } else diff --git a/samples/richedit/wxlwindow.cpp b/samples/richedit/wxlwindow.cpp index d8389b7f8d..6b154206c2 100644 --- a/samples/richedit/wxlwindow.cpp +++ b/samples/richedit/wxlwindow.cpp @@ -210,6 +210,14 @@ wxLayoutWindow::Clear(int family, DoPaint((wxRect *)NULL); } +void wxLayoutWindow::Refresh(bool eraseBackground, const wxRect *rect) +{ + wxScrolledWindow::Refresh(eraseBackground, rect); + + ResizeScrollbars(); + ScrollToCursor(); +} + void wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event) { @@ -288,7 +296,16 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event) case WXLOWIN_MENU_LDOWN: { // always move cursor to mouse click: - m_llist->MoveCursorTo(cursorPos); + if ( obj ) + { + // we have found the real position + m_llist->MoveCursorTo(cursorPos); + } + else + { + // click beyond the end of the text + m_llist->MoveCursorTo(m_llist->GetSize()); + } // clicking a mouse removes the selection if ( m_llist->HasSelection() ) diff --git a/samples/richedit/wxlwindow.h b/samples/richedit/wxlwindow.h index edf9de631e..c936477bfe 100644 --- a/samples/richedit/wxlwindow.h +++ b/samples/richedit/wxlwindow.h @@ -68,6 +68,11 @@ public: int underline=0, wxColour *fg=NULL, wxColour *bg=NULL); + + /// override base class virtual to also refresh the scrollbar position + virtual void Refresh(bool eraseBackground = TRUE, + const wxRect *rect = (const wxRect *)NULL); + /** Sets a background image, only used on screen, not on printouts. @param bitmap a pointer to a wxBitmap or NULL to remove it */