Make GetIndexOf() and get_path() work for virtual list models, fixes #12073: wxDataViewCtrl crashes when deleting an item
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64362 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -3529,6 +3529,10 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter )
|
|||||||
|
|
||||||
if (m_wx_model->IsVirtualListModel())
|
if (m_wx_model->IsVirtualListModel())
|
||||||
{
|
{
|
||||||
|
// iter is root, add nothing
|
||||||
|
if (!iter->user_data)
|
||||||
|
return retval;
|
||||||
|
|
||||||
// user_data is just the index +1
|
// user_data is just the index +1
|
||||||
int i = ( (wxUIntPtr) iter->user_data ) -1;
|
int i = ( (wxUIntPtr) iter->user_data ) -1;
|
||||||
gtk_tree_path_append_index (retval, i);
|
gtk_tree_path_append_index (retval, i);
|
||||||
@@ -3775,6 +3779,13 @@ gboolean wxDataViewCtrlInternal::iter_parent( GtkTreeIter *iter, GtkTreeIter *ch
|
|||||||
|
|
||||||
// item can be deleted already in the model
|
// item can be deleted already in the model
|
||||||
int wxDataViewCtrlInternal::GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item )
|
int wxDataViewCtrlInternal::GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item )
|
||||||
|
{
|
||||||
|
if (m_wx_model->IsVirtualListModel())
|
||||||
|
{
|
||||||
|
int index = ((int)(item.GetID())) - 1;
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
wxGtkTreeModelNode *parent_node = FindNode( parent );
|
wxGtkTreeModelNode *parent_node = FindNode( parent );
|
||||||
wxGtkTreeModelChildren &children = parent_node->GetChildren();
|
wxGtkTreeModelChildren &children = parent_node->GetChildren();
|
||||||
@@ -3784,6 +3795,7 @@ int wxDataViewCtrlInternal::GetIndexOf( const wxDataViewItem &parent, const wxDa
|
|||||||
if (children[j] == item.GetID())
|
if (children[j] == item.GetID())
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user