#include "wx/univ/renderer.h"
#include "wx/univ/inphand.h"
#include "wx/univ/theme.h"
+#include "wx/log.h"
#define WXDEBUG_SCROLLBAR
{
}
-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();
}
// ----------------------------------------------------------------------------
}
#endif // WXDEBUG_SCROLLBAR
- Refresh(TRUE, &rect);
+ Refresh(FALSE, &rect);
}
m_elementsState[n] &= ~wxCONTROL_DIRTY;
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);