X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/289532452089421ddadbd4726a8469511a19ab76..d18eb918f447ebb3b9e28154839392fe6b32995a:/src/html/htmlwin.cpp diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 058499e481..22ac09f009 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -1102,6 +1102,19 @@ void wxHtmlWindow::DoEraseBackground(wxDC& dc) } } +void wxHtmlWindow::OnEraseBackground(wxEraseEvent& WXUNUSED(event)) +{ + // We never get real erase background events as we changed our background + // style to wxBG_STYLE_PAINT in our ctor so the only time when we get here + // is when an artificial wxEraseEvent is generated by our own OnPaint() + // below. This handler only exists to stop the event from propagating + // downwards to wxWindow which may erase the background itself when it gets + // it in some ports (currently this happens in wxUniv), so we simply stop + // processing here and set a special flag allowing OnPaint() to see that + // the event hadn't been really processed. + m_isBgReallyErased = false; +} + void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dcPaint(this); @@ -1134,11 +1147,17 @@ void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) PrepareDC(*dc); - // erase the background: for compatibility, we must generate the event to - // allow the user-defined handlers to do it + // Erase the background: for compatibility, we must generate the event to + // allow the user-defined handlers to do it, hence this hack with sending + // an artificial wxEraseEvent to trigger the execution of such handlers. wxEraseEvent eraseEvent(GetId(), dc); eraseEvent.SetEventObject(this); - if ( !ProcessWindowEvent(eraseEvent) ) + + // Hack inside a hack: the background wasn't really erased if our own + // OnEraseBackground() was executed, so we need to check for the flag set + // by it whenever it's called. + m_isBgReallyErased = true; // Initially assume it wasn't. + if ( !ProcessWindowEvent(eraseEvent) || !m_isBgReallyErased ) { // erase background ourselves DoEraseBackground(*dc); @@ -1214,7 +1233,7 @@ void wxHtmlWindow::OnSize(wxSizeEvent& event) { m_selection->Set(m_selection->GetFromCell(), m_selection->GetToCell()); - m_selection->ClearPrivPos(); + m_selection->ClearFromToCharacterPos(); } Refresh(); @@ -1282,7 +1301,8 @@ void wxHtmlWindow::OnMouseUp(wxMouseEvent& event) #endif // wxUSE_CLIPBOARD wxPoint pos = CalcUnscrolledPosition(event.GetPosition()); - wxHtmlWindowMouseHelper::HandleMouseClick(m_Cell, pos, event); + if ( !wxHtmlWindowMouseHelper::HandleMouseClick(m_Cell, pos, event) ) + event.Skip(); } #if wxUSE_CLIPBOARD @@ -1415,7 +1435,7 @@ void wxHtmlWindow::OnInternalIdle() m_selection->Set(wxPoint(x,y), selcell, m_tmpSelFromPos, m_tmpSelFromCell); } - m_selection->ClearPrivPos(); + m_selection->ClearFromToCharacterPos(); Refresh(); } } @@ -1524,6 +1544,10 @@ void wxHtmlWindow::OnKeyUp(wxKeyEvent& event) GetEventHandler()->ProcessEvent(evt); } + else + { + event.Skip(); + } } void wxHtmlWindow::OnCopy(wxCommandEvent& WXUNUSED(event)) @@ -1576,7 +1600,7 @@ void wxHtmlWindow::SelectLine(const wxPoint& pos) { // We use following heuristic to find a "line": let the line be all // cells in same container as the cell under mouse cursor that are - // neither completely above nor completely bellow the clicked cell + // neither completely above nor completely below the clicked cell // (i.e. are likely to be words positioned on same line of text). int y1 = cell->GetAbsPos().y; @@ -1664,6 +1688,7 @@ BEGIN_EVENT_TABLE(wxHtmlWindow, wxScrolledWindow) EVT_RIGHT_UP(wxHtmlWindow::OnMouseUp) EVT_MOTION(wxHtmlWindow::OnMouseMove) EVT_PAINT(wxHtmlWindow::OnPaint) + EVT_ERASE_BACKGROUND(wxHtmlWindow::OnEraseBackground) #if wxUSE_CLIPBOARD EVT_LEFT_DCLICK(wxHtmlWindow::OnDoubleClick) EVT_ENTER_WINDOW(wxHtmlWindow::OnMouseEnter)