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*/);
+ if ( m_win->RemoveEventHandler(m_handler) )
+ {
+ delete m_handler;
+ }
+ //else: something is very wrong, so better [maybe] leak memory than
+ // risk a crash because of double deletion
+
+ m_handler = NULL;
}
}
// 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);
}