From: Vadim Zeitlin Date: Tue, 26 Feb 2008 17:17:28 +0000 (+0000) Subject: check whether the grid is fully created in Refresh() (fixes a crash under Mac); refac... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f9549841554799c51b74008252766f4975548b77?ds=inline check whether the grid is fully created in Refresh() (fixes a crash under Mac); refactored members initialization into a new InitVars() method to avoid duplication and ensure that they're always initialized (slightly modified patch 1901366) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52122 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 826c52f097..86403fd686 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -1090,9 +1090,9 @@ WX_DECLARE_OBJARRAY_WITH_DECL(wxGridCellCoords, wxGridCellCoordsArray, class WXDLLIMPEXP_ADV wxGrid : public wxScrolledWindow { public: - wxGrid() ; + wxGrid(); - wxGrid( wxWindow *parent, + wxGrid( wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -1645,6 +1645,7 @@ public: : wxScrolledWindow( parent, wxID_ANY, wxPoint(x,y), wxSize(w,h), (style|wxWANTS_CHARS), name ) { + InitVars(); Create(); } @@ -1989,6 +1990,7 @@ protected: void Create(); void Init(); + void InitVars(); void CalcDimensions(); void CalcWindowSizes(); bool Redimension( wxGridTableMessage& ); diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 7d98bcb1ea..688a62b884 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -4131,12 +4131,7 @@ END_EVENT_TABLE() wxGrid::wxGrid() { - // in order to make sure that a size event is not - // trigerred in a unfinished state - m_cornerLabelWin = NULL; - m_rowLabelWin = NULL; - m_colLabelWin = NULL; - m_gridWin = NULL; + InitVars(); } wxGrid::wxGrid( wxWindow *parent, @@ -4146,6 +4141,7 @@ wxGrid::wxGrid( wxWindow *parent, long style, const wxString& name ) { + InitVars(); Create(parent, id, pos, size, style, name); } @@ -4203,15 +4199,8 @@ wxGrid::~wxGrid() void wxGrid::Create() { - // set to true by CreateGrid - m_created = false; - // create the type registry m_typeRegistry = new wxGridTypeRegistry; - m_selection = NULL; - - m_table = (wxGridTableBase *) NULL; - m_ownTable = false; m_cellEditCtrlEnabled = false; @@ -4405,6 +4394,24 @@ bool wxGrid::SetTable( wxGridTableBase *table, bool takeOwnership, return m_created; } +void wxGrid::InitVars() +{ + m_created = false; + + m_cornerLabelWin = NULL; + m_rowLabelWin = NULL; + m_colLabelWin = NULL; + m_gridWin = NULL; + + m_table = NULL; + m_ownTable = false; + + m_selection = NULL; + m_defaultCellAttr = NULL; + m_typeRegistry = NULL; + m_winCapture = NULL; +} + void wxGrid::Init() { m_rowLabelWidth = WXGRID_DEFAULT_ROW_LABEL_WIDTH; @@ -6818,7 +6825,7 @@ void wxGrid::Refresh(bool eraseb, const wxRect* rect) { // Don't do anything if between Begin/EndBatch... // EndBatch() will do all this on the last nested one anyway. - if (! GetBatchCount()) + if ( m_created && !GetBatchCount() ) { // Refresh to get correct scrolled position: wxScrolledWindow::Refresh(eraseb, rect);