]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/scrolbar.cpp
Patch 559673 and 561053
[wxWidgets.git] / src / univ / scrolbar.cpp
index e2f146b7d42f1d7e270f74545f21c7c65c47fde1..16fc367cdf389f1799e27ba48fe8e8ae46e38a02 100644 (file)
@@ -42,6 +42,7 @@
 #include "wx/univ/renderer.h"
 #include "wx/univ/inphand.h"
 #include "wx/univ/theme.h"
+#include "wx/log.h"
 
 #define WXDEBUG_SCROLLBAR
 
@@ -164,6 +165,28 @@ wxScrollBar::~wxScrollBar()
 {
 }
 
+// ----------------------------------------------------------------------------
+// misc accessors
+// ----------------------------------------------------------------------------
+
+bool wxScrollBar::IsStandalone() const
+{
+    wxWindow *parent = GetParent();
+    if ( !parent )
+    {
+        return TRUE;
+    }
+
+    return (parent->GetScrollbar(wxHORIZONTAL) != this) &&
+           (parent->GetScrollbar(wxVERTICAL) != this);
+}
+
+bool wxScrollBar::AcceptsFocus() const
+{
+    // the window scrollbars never accept focus
+    return wxScrollBarBase::AcceptsFocus() && IsStandalone();
+}
+
 // ----------------------------------------------------------------------------
 // scrollbar API
 // ----------------------------------------------------------------------------
@@ -370,7 +393,7 @@ void wxScrollBar::UpdateThumb()
         }
 #endif // WXDEBUG_SCROLLBAR
 
-                    Refresh(TRUE, &rect);
+                    Refresh(FALSE, &rect);
                 }
 
                 m_elementsState[n] &= ~wxCONTROL_DIRTY;
@@ -524,6 +547,16 @@ bool wxScrollBar::PerformAction(const wxControlAction& action,
     bool changed = m_thumbPos != thumbOld;
     if ( notify || changed )
     {
+        if ( IsStandalone() )
+        {
+            // we should generate EVT_SCROLL events for the standalone
+            // scrollbars and not the EVT_SCROLLWIN ones
+            //
+            // NB: we assume that scrollbar events are sequentially numbered
+            //     but this should be ok as other code relies on this as well
+            scrollType += wxEVT_SCROLL_TOP - wxEVT_SCROLLWIN_TOP;
+        }
+
         wxScrollWinEvent event(scrollType, m_thumbPos,
                                IsVertical() ? wxVERTICAL : wxHORIZONTAL);
         event.SetEventObject(this);