X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/349efbaa89b499557d9a26320bcbd9b012aac9d2..2fe212b0336512aac9eace69fab09ce856b0bf4b:/src/generic/scrlwing.cpp diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index c4fbb95674..18a963a16e 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -173,13 +173,6 @@ bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event) { wxEventType evType = event.GetEventType(); - // always process the size events ourselves, even if the user code handles - // them as well, as we need to AdjustScrollbars() - if ( evType == wxEVT_SIZE ) - { - m_scrollHelper->HandleOnSize((wxSizeEvent &)event); - } - // 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 @@ -198,12 +191,29 @@ bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event) // user code defined OnPaint() in the derived class) m_hasDrawnWindow = TRUE; - if ( wxEvtHandler::ProcessEvent(event) ) + // 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); + + return TRUE; + } + + if ( processed ) { // normally, nothing more to do here - except if it was a paint event // which wasn't really processed, then we'll try to call our // OnDraw() below (from HandleOnPaint) - if ( !m_hasDrawnWindow ) + if ( m_hasDrawnWindow ) { return TRUE; }