]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/scrolbar.cpp
fixed a (harmless) BoundsChecker warning
[wxWidgets.git] / src / univ / scrolbar.cpp
index 0bb2d38f6a15f924e5fa6ef3fd3608204966987d..464681e6453fa9801ea676af6bc63fac175796cc 100644 (file)
     #undef WXDEBUG_SCROLLBAR
 #endif // !__WXDEBUG__
 
     #undef WXDEBUG_SCROLLBAR
 #endif // !__WXDEBUG__
 
+#if defined(WXDEBUG_SCROLLBAR) && defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#include "wx/msw/private.h"
+#endif
+
 // ----------------------------------------------------------------------------
 // wxScrollBarTimer: this class is used to repeatedly scroll the scrollbar
 // when the mouse is help pressed on the arrow or on the bar. It generates the
 // ----------------------------------------------------------------------------
 // wxScrollBarTimer: this class is used to repeatedly scroll the scrollbar
 // when the mouse is help pressed on the arrow or on the bar. It generates the
@@ -160,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
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // scrollbar API
 // ----------------------------------------------------------------------------
@@ -296,6 +318,12 @@ wxScrollArrows::Arrow wxScrollBar::HitTest(const wxPoint& pt) const
 // ----------------------------------------------------------------------------
 
 void wxScrollBar::OnIdle(wxIdleEvent& event)
 // ----------------------------------------------------------------------------
 
 void wxScrollBar::OnIdle(wxIdleEvent& event)
+{
+    UpdateThumb();
+    event.Skip();
+}
+
+void wxScrollBar::UpdateThumb()
 {
     if ( m_dirty )
     {
 {
     if ( m_dirty )
     {
@@ -369,8 +397,6 @@ void wxScrollBar::OnIdle(wxIdleEvent& event)
 
         m_dirty = FALSE;
     }
 
         m_dirty = FALSE;
     }
-
-    event.Skip();
 }
 
 void wxScrollBar::DoDraw(wxControlRenderer *renderer)
 }
 
 void wxScrollBar::DoDraw(wxControlRenderer *renderer)
@@ -460,6 +486,10 @@ bool wxScrollBar::PerformAction(const wxControlAction& action,
     {
         DoSetThumb(numArg);
 
     {
         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 )
         scrollType = wxEVT_SCROLLWIN_THUMBTRACK;
     }
     else if ( action == wxACTION_SCROLL_LINE_UP )
@@ -671,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_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_PRIOR:     action = wxACTION_SCROLL_PAGE_UP;   break;
+            case WXK_PAGEDOWN:
             case WXK_NEXT:      action = wxACTION_SCROLL_PAGE_DOWN; break;
         }
 
             case WXK_NEXT:      action = wxACTION_SCROLL_PAGE_DOWN; break;
         }