Reset the wxDataViewItem being edited once it's not edited any more

No real changes, just some cleanup to ensure that the item being edited stored
in wxDataViewRendererBase never refers to an item which is not, actually,
being edited any longer.
This commit is contained in:
Vadim Zeitlin
2015-11-30 04:03:18 +01:00
parent 31a10d0355
commit e417913f46
2 changed files with 9 additions and 5 deletions

View File

@@ -202,7 +202,7 @@ protected:
wxString m_variantType; wxString m_variantType;
wxDataViewColumn *m_owner; wxDataViewColumn *m_owner;
wxWeakRef<wxWindow> m_editorCtrl; wxWeakRef<wxWindow> m_editorCtrl;
wxDataViewItem m_item; // for m_editorCtrl wxDataViewItem m_item; // Item being currently edited, if valid.
// internal utility, may be used anywhere the window associated with the // internal utility, may be used anywhere the window associated with the
// renderer is required // renderer is required

View File

@@ -681,8 +681,6 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la
if( !start_event.IsAllowed() ) if( !start_event.IsAllowed() )
return false; return false;
m_item = item; // remember for later
unsigned int col = GetOwner()->GetModelColumn(); unsigned int col = GetOwner()->GetModelColumn();
const wxVariant& value = CheckedGetValue(dv_ctrl->GetModel(), item, col); const wxVariant& value = CheckedGetValue(dv_ctrl->GetModel(), item, col);
@@ -708,6 +706,9 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la
void wxDataViewRendererBase::NotifyEditingStarted(const wxDataViewItem& item) void wxDataViewRendererBase::NotifyEditingStarted(const wxDataViewItem& item)
{ {
// Remember the item being edited for use in FinishEditing() later.
m_item = item;
wxDataViewColumn* const column = GetOwner(); wxDataViewColumn* const column = GetOwner();
wxDataViewCtrl* const dv_ctrl = column->GetOwner(); wxDataViewCtrl* const dv_ctrl = column->GetOwner();
@@ -778,13 +779,16 @@ bool wxDataViewRendererBase::FinishEditing()
event.SetEventObject( dv_ctrl ); event.SetEventObject( dv_ctrl );
dv_ctrl->GetEventHandler()->ProcessEvent( event ); dv_ctrl->GetEventHandler()->ProcessEvent( event );
bool accepted = false;
if ( isValid && event.IsAllowed() ) if ( isValid && event.IsAllowed() )
{ {
dv_ctrl->GetModel()->ChangeValue(value, m_item, col); dv_ctrl->GetModel()->ChangeValue(value, m_item, col);
return true; accepted = true;
} }
return false; m_item = wxDataViewItem();
return accepted;
} }
wxVariant wxVariant