]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied AutoWrap Renderer Bugfix by Roger Gammans (Patch 467479).
authorStefan Neis <Stefan.Neis@t-online.de>
Sun, 1 Sep 2002 00:54:01 +0000 (00:54 +0000)
committerStefan Neis <Stefan.Neis@t-online.de>
Sun, 1 Sep 2002 00:54:01 +0000 (00:54 +0000)
Blindly tried to fix crash reported by Roman Vanicek on Mailing list:
        SetCellHighlightColour sometimes segfaults in wxGTK. The
        application crashes in LookupAttr.
        Tentative explanation: Cache handling gets confused if LookupAttr gets
                called on wxGridNoCell.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16904 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/grid.cpp

index c00faac20df19ebe01b2abafd6ebd008c5a24a58..2bb064129b3caefe79098cbbad3f69832f9df09f 100644 (file)
@@ -6788,7 +6788,6 @@ void wxGrid::DrawTextRectangle( wxDC& dc,
 {
     wxArrayString lines;
 
 {
     wxArrayString lines;
 
-    dc.SetClippingRegion( rect );
     StringToLines( value, lines );
 
 
     StringToLines( value, lines );
 
 
@@ -6810,6 +6809,7 @@ void wxGrid::DrawTextRectangle( wxDC& dc,
     long textWidth, textHeight;
     long lineWidth, lineHeight;
 
     long textWidth, textHeight;
     long lineWidth, lineHeight;
 
+    dc.SetClippingRegion( rect );
     if ( lines.GetCount() )
     {
         GetTextBoxSize( dc, lines, &textWidth, &textHeight );
     if ( lines.GetCount() )
     {
         GetTextBoxSize( dc, lines, &textWidth, &textHeight );
@@ -8509,11 +8509,17 @@ bool wxGrid::LookupAttr(int row, int col, wxGridCellAttr **attr) const
 
 wxGridCellAttr *wxGrid::GetCellAttr(int row, int col) const
 {
 
 wxGridCellAttr *wxGrid::GetCellAttr(int row, int col) const
 {
-    wxGridCellAttr *attr;
-    if ( !LookupAttr(row, col, &attr) )
-    {
-        attr = m_table ? m_table->GetAttr(row, col , wxGridCellAttr::Any) : (wxGridCellAttr *)NULL;
-        CacheAttr(row, col, attr);
+    wxGridCellAttr *attr = NULL;
+    // Additional test to avoid looking at the cache e.g. for
+    // wxNoCellCoords, as this will confuse memory management.
+    if ( row >= 0 )
+    {
+       if ( !LookupAttr(row, col, &attr) )
+       {
+           attr = m_table ? m_table->GetAttr(row, col , wxGridCellAttr::Any)
+                          : (wxGridCellAttr *)NULL;
+           CacheAttr(row, col, attr);
+       }
     }
     if (attr)
     {
     }
     if (attr)
     {