// search for m_handler in the handler list
if ( m_win && m_handler )
{
- wxEvtHandler *handlerPrev = NULL,
- *handler = m_win->GetEventHandler();
- while ( handler )
+ if ( m_win->RemoveEventHandler(m_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();
+ delete m_handler;
}
+ //else: something is very wrong, so better [maybe] leak memory than
+ // risk a crash because of double deletion
- wxFAIL_MSG( _T("where has our event handler gone?") );
+ m_handler = NULL;
}
}
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;
}
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