]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlwin.cpp
fixed handling of the accelerators of menu items added to already attached submenus
[wxWidgets.git] / src / html / htmlwin.cpp
index 0dc11db54826a855e3533305c5cfe5f53fa3effa..83307773bcc063f82e2a901054da40f9b2f04ae8 100644 (file)
@@ -180,6 +180,8 @@ void wxHtmlWindow::Init()
     m_lastDoubleClick = 0;
 #endif // wxUSE_CLIPBOARD
     m_backBuffer = NULL;
+    m_eraseBgInOnPaint = false;
+    m_tmpSelFromCell = NULL;
 }
 
 bool wxHtmlWindow::Create(wxWindow *parent, wxWindowID id,
@@ -270,6 +272,9 @@ bool wxHtmlWindow::SetPage(const wxString& source)
 
     wxDELETE(m_selection);
 
+    // we will soon delete all the cells, so clear pointers to them:
+    m_tmpSelFromCell = NULL;
+
     // pass HTML through registered processors:
     if (m_Processors || m_GlobalProcessors)
     {
@@ -799,7 +804,7 @@ bool wxHtmlWindow::CopySelection(ClipboardType t)
 #if wxUSE_CLIPBOARD
     if ( m_selection )
     {
-#ifdef __UNIX__
+#if defined(__UNIX__) && !defined(__WXMAC__)
         wxTheClipboard->UsePrimarySelection(t == Primary);
 #else // !__UNIX__
         // Primary selection exists only under X11, so don't do anything under
@@ -821,6 +826,8 @@ bool wxHtmlWindow::CopySelection(ClipboardType t)
             return true;
         }
     }
+#else
+    wxUnusedVar(t);
 #endif // wxUSE_CLIPBOARD
 
     return false;
@@ -853,10 +860,11 @@ void wxHtmlWindow::OnEraseBackground(wxEraseEvent& event)
 {
     if ( !m_bmpBg.Ok() )
     {
-        // we used to do nothing at all here but we do have to erase background
-        // now that we reuse it (instead of overwriting it) in OnPaint() below
-        event.Skip();
-
+        // don't even skip the event, if we don't have a bg bitmap we're going
+        // to overwrite background in OnPaint() below anyhow, so letting the
+        // default handling take place would only result in flicker, just set a
+        // flag to erase the background below
+        m_eraseBgInOnPaint = true;
         return;
     }
 
@@ -887,7 +895,8 @@ void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
 {
     wxPaintDC dc(this);
 
-    if (m_tmpCanDrawLocks > 0 || m_Cell == NULL) return;
+    if (m_tmpCanDrawLocks > 0 || m_Cell == NULL)
+        return;
 
     int x, y;
     GetViewStart(&x, &y);
@@ -899,13 +908,23 @@ void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
         m_backBuffer = new wxBitmap(sz.x, sz.y);
     dcm.SelectObject(*m_backBuffer);
 
-    // preserve the existing background, otherwise we'd erase anything the user
-    // code had drawn in its EVT_ERASE_BACKGROUND handler when we do the Blit
-    // back below
-    dcm.Blit(0, rect.GetTop(),
-             sz.x, rect.GetBottom() - rect.GetTop() + 1,
-             &dc,
-             0, rect.GetTop());
+    if ( m_eraseBgInOnPaint )
+    {
+        dcm.SetBackground(wxBrush(GetBackgroundColour(), wxSOLID));
+        dcm.Clear();
+
+        m_eraseBgInOnPaint = false;
+    }
+    else // someone has already erased the background, keep it
+    {
+        // preserve the existing background, otherwise we'd erase anything the
+        // user code had drawn in its EVT_ERASE_BACKGROUND handler when we do
+        // the Blit back below
+        dcm.Blit(0, rect.GetTop(),
+                 sz.x, rect.GetBottom() - rect.GetTop() + 1,
+                 &dc,
+                 0, rect.GetTop());
+    }
 
     PrepareDC(dcm);
     dcm.SetMapMode(wxMM_TEXT);
@@ -1010,6 +1029,8 @@ void wxHtmlWindow::OnMouseDown(wxMouseEvent& event)
             CaptureMouse();
         }
     }
+#else
+    wxUnusedVar(event);
 #endif // wxUSE_CLIPBOARD
 }