X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cff7ef893d9ddea0c90abd6d4b9281be3d809370..66ce9e0609ac419e6eeff665b1087193954ed84a:/src/univ/scrolbar.cpp?ds=sidebyside diff --git a/src/univ/scrolbar.cpp b/src/univ/scrolbar.cpp index ba6e499d57..464681e645 100644 --- a/src/univ/scrolbar.cpp +++ b/src/univ/scrolbar.cpp @@ -164,6 +164,24 @@ wxScrollBar::~wxScrollBar() { } +bool wxScrollBar::AcceptsFocus() const +{ + if (!wxWindow::AcceptsFocus()) return FALSE; + + wxWindow *parent = (wxWindow*) GetParent(); + + if (parent) + { + if ((parent->GetScrollbar( wxHORIZONTAL ) == this) || + (parent->GetScrollbar( wxVERTICAL ) == this)) + { + return FALSE; + } + } + + return TRUE; +} + // ---------------------------------------------------------------------------- // scrollbar API // ---------------------------------------------------------------------------- @@ -300,6 +318,12 @@ wxScrollArrows::Arrow wxScrollBar::HitTest(const wxPoint& pt) const // ---------------------------------------------------------------------------- void wxScrollBar::OnIdle(wxIdleEvent& event) +{ + UpdateThumb(); + event.Skip(); +} + +void wxScrollBar::UpdateThumb() { if ( m_dirty ) { @@ -373,8 +397,6 @@ void wxScrollBar::OnIdle(wxIdleEvent& event) m_dirty = FALSE; } - - event.Skip(); } void wxScrollBar::DoDraw(wxControlRenderer *renderer) @@ -464,6 +486,10 @@ bool wxScrollBar::PerformAction(const wxControlAction& action, { DoSetThumb(numArg); + // VS: we have to force redraw here, otherwise the thumb will lack + // behind mouse cursor + UpdateThumb(); + scrollType = wxEVT_SCROLLWIN_THUMBTRACK; } else if ( action == wxACTION_SCROLL_LINE_UP ) @@ -675,7 +701,9 @@ bool wxStdScrollBarInputHandler::HandleKey(wxInputConsumer *consumer, case WXK_LEFT: action = wxACTION_SCROLL_LINE_UP; break; case WXK_HOME: action = wxACTION_SCROLL_START; break; case WXK_END: action = wxACTION_SCROLL_END; break; + case WXK_PAGEUP: case WXK_PRIOR: action = wxACTION_SCROLL_PAGE_UP; break; + case WXK_PAGEDOWN: case WXK_NEXT: action = wxACTION_SCROLL_PAGE_DOWN; break; }