X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5f3286d17d6f65c3acddabb45545c2ef1b0d9b20..0e0bc921908ab73cac0cd14f00ac448c83fdec35:/src/generic/scrlwing.cpp diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index 25fcf9048a..00af196417 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -389,10 +389,37 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, 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?") ); } } @@ -415,6 +442,9 @@ void wxScrollHelper::DoSetTargetWindow(wxWindow *target) // 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); }