From 4634a5d6d71c051d189c8e58f13bda52a77bf8e3 Mon Sep 17 00:00:00 2001 From: Michael Bedward Date: Wed, 9 Feb 2000 05:04:21 +0000 Subject: [PATCH] Initializing more variables in wxGrid::Create() Minor fixes for crashes under wxMotif when setting attributes before the grid has been first painted. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5920 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/grid.h | 3 ++- src/generic/grid.cpp | 36 +++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 61912549dc..b97ba5933e 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -449,7 +449,7 @@ public: void DrawGridCellArea( wxDC& dc ); void DrawCellBorder( wxDC& dc, const wxGridCellCoords& ); - void DrawAllGridLines( wxDC& dc, const wxRegion & reg = wxRegion() ); + void DrawAllGridLines( wxDC& dc, const wxRegion & reg ); void DrawCell( wxDC& dc, const wxGridCellCoords& ); void DrawCellBackground( wxDC& dc, const wxGridCellCoords& ); void DrawCellValue( wxDC& dc, const wxGridCellCoords& ); @@ -859,6 +859,7 @@ public: protected: bool m_created; + bool m_displayed; wxGridWindow *m_gridWin; wxGridRowLabelWindow *m_rowLabelWin; diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index a999ea3e08..82eef22b3b 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -940,6 +940,16 @@ wxGrid::~wxGrid() void wxGrid::Create() { + m_created = FALSE; // set to TRUE by CreateGrid + m_displayed = FALSE; // set to TRUE by OnPaint + + m_table = (wxGridTableBase *) NULL; + m_cellEditCtrl = (wxWindow *) NULL; + + m_numRows = 0; + m_numCols = 0; + m_currentCellCoords = wxGridNoCellCoords; + int colLblH = WXGRID_DEFAULT_COL_LABEL_HEIGHT; int rowLblW = WXGRID_DEFAULT_ROW_LABEL_WIDTH; @@ -1119,6 +1129,10 @@ void wxGrid::Init() void wxGrid::CalcDimensions() { + // This avoids a crash in SetScrollbars + // + if ( !m_displayed ) return; + int cw, ch; GetClientSize( &cw, &ch ); @@ -2381,6 +2395,8 @@ void wxGrid::OnPaint( wxPaintEvent& WXUNUSED(event) ) SetEditControlValue(); ShowCellEditControl(); } + + m_displayed = TRUE; } @@ -2540,10 +2556,8 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords ) return; } - wxClientDC dc( m_gridWin ); - PrepareDC( dc ); - - if ( m_currentCellCoords != wxGridNoCellCoords ) + if ( m_displayed && + m_currentCellCoords != wxGridNoCellCoords ) { HideCellEditControl(); SaveEditControlValue(); @@ -2552,13 +2566,17 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords ) m_currentCellCoords = coords; SetEditControlValue(); - ShowCellEditControl(); - if ( IsSelection() ) + if ( m_displayed ) { - wxRect r( SelectionToDeviceRect() ); - ClearSelection(); - if ( !GetBatchCount() ) m_gridWin->Refresh( FALSE, &r ); + ShowCellEditControl(); + + if ( IsSelection() ) + { + wxRect r( SelectionToDeviceRect() ); + ClearSelection(); + if ( !GetBatchCount() ) m_gridWin->Refresh( FALSE, &r ); + } } } -- 2.45.2