+    wxEventType evType = event.GetEventType();
+
+    // the explanation of wxEVT_PAINT processing hack: for historic reasons
+    // there are 2 ways to process this event in classes deriving from
+    // wxScrolledWindow. The user code may
+    //
+    //  1. override wxScrolledWindow::OnDraw(dc)
+    //  2. define its own OnPaint() handler
+    //
+    // In addition, in wxUniversal wxWindow defines OnPaint() itself and
+    // always processes the draw event, so we can't just try the window
+    // OnPaint() first and call our HandleOnPaint() if it doesn't process it
+    // (the latter would never be called in wxUniversal).
+    //
+    // So the solution is to have a flag telling us whether the user code drew
+    // anything in the window. We set it to true here but reset it to false in
+    // wxScrolledWindow::OnPaint() handler (which wouldn't be called if the
+    // user code defined OnPaint() in the derived class)
+    m_hasDrawnWindow = TRUE;
+
+    // pass it on to the real handler
+    bool processed = wxEvtHandler::ProcessEvent(event);
+
+    // always process the size events ourselves, even if the user code handles
+    // them as well, as we need to AdjustScrollbars()
+    //
+    // NB: it is important to do it after processing the event in the normal
+    //     way as HandleOnSize() may generate a wxEVT_SIZE itself if the
+    //     scrollbar[s] (dis)appear and it should be seen by the user code
+    //     after this one
+    if ( evType == wxEVT_SIZE )
+    {
+        m_scrollHelper->HandleOnSize((wxSizeEvent &)event);
+