git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13184
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
void wxScrollHelper::DeleteEvtHandler()
{
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 )
{
// 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);
}
m_handler = new wxScrollHelperEvtHandler(this);
m_targetWindow->PushEventHandler(m_handler);
}