// event handlers
void OnIdle(wxIdleEvent& event);
-
+
// forces update of thumb's visual appearence (does nothing if m_dirty=FALSE)
void UpdateThumb();
// common part of all ctors
void Init();
+ // is this scrollbar attached to a window or a standalone control?
+ bool IsStandalone() const;
+
private:
// total range of the scrollbar in logical units
int m_range;
{
}
-bool wxScrollBar::AcceptsFocus() const
+// ----------------------------------------------------------------------------
+// misc accessors
+// ----------------------------------------------------------------------------
+
+bool wxScrollBar::IsStandalone() const
{
- if (!wxWindow::AcceptsFocus()) return FALSE;
-
- wxWindow *parent = (wxWindow*) GetParent();
-
- if (parent)
+ wxWindow *parent = GetParent();
+ if ( !parent )
{
- if ((parent->GetScrollbar( wxHORIZONTAL ) == this) ||
- (parent->GetScrollbar( wxVERTICAL ) == this))
- {
- return FALSE;
- }
+ return TRUE;
}
-
- 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();
}
// ----------------------------------------------------------------------------
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);