void wxScrollHelper::DeleteEvtHandler()
{
- // FIXME: we should search for m_handler in the handler list
- if ( m_win )
+ // search for m_handler in the handler list
+ if ( m_win && m_handler )
{
- m_win->PopEventHandler(TRUE /* Delete old event handler*/);
+ wxEvtHandler *handlerPrev = NULL,
+ *handler = m_win->GetEventHandler();
+ while ( handler )
+ {
+ if ( handler == m_handler )
+ {
+ wxEvtHandler *handlerNext = handler->GetNextHandler();
+ if ( handlerPrev )
+ {
+ handlerPrev->SetNextHandler(handlerNext);
+ }
+ else
+ {
+ m_win->SetEventHandler(handlerNext);
+ }
+
+ handler->SetNextHandler(NULL);
+ delete handler;
+ m_handler = NULL;
+
+ return;
+ }
+
+ handlerPrev = handler;
+ handler = handler->GetNextHandler();
+ }
+
+ wxFAIL_MSG( _T("where has our event handler gone?") );
}
}
// which we scroll - we don't need to hijack its events)
if ( m_targetWindow == m_win )
{
+ // if we already have a handler, delete it first
+ DeleteEvtHandler();
+
m_handler = new wxScrollHelperEvtHandler(this);
m_targetWindow->PushEventHandler(m_handler);
}