X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5f3286d17d6f65c3acddabb45545c2ef1b0d9b20..70b8ab778fc3f9f89874a242bfa014f2b313c59b:/src/generic/scrlwing.cpp diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index 25fcf9048a..cf18c3bf8c 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -389,10 +389,17 @@ 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*/); + 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; } } @@ -415,6 +422,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); } @@ -1092,11 +1102,6 @@ bool wxGenericScrolledWindow::Create(wxWindow *parent, bool ok = wxPanel::Create(parent, id, pos, size, style, name); -#ifdef __WXMSW__ - // we need to process arrows ourselves for scrolling - m_lDlgCode |= DLGC_WANTARROWS; -#endif // __WXMSW__ - return ok; } @@ -1113,6 +1118,25 @@ void wxGenericScrolledWindow::OnPaint(wxPaintEvent& event) event.Skip(); } +#ifdef __WXMSW__ +long +wxGenericScrolledWindow::MSWWindowProc(WXUINT nMsg, + WXWPARAM wParam, + WXLPARAM lParam) +{ + long rc = wxPanel::MSWWindowProc(nMsg, wParam, lParam); + + // we need to process arrows ourselves for scrolling + if ( nMsg == WM_GETDLGCODE ) + { + rc |= DLGC_WANTARROWS; + } + + return rc; +} + +#endif // __WXMSW__ + #if WXWIN_COMPATIBILITY void wxGenericScrolledWindow::GetScrollUnitsPerPage (int *x_page, int *y_page) const