#include "wx/gtk/dcclient.h"
#include "wx/gtk/private/gdkconv.h"
+#include "wx/gtk/private/list.h"
using namespace wxGTKImpl;
class wxGtkDataViewModelNotifier;
wxDECLARE_NO_COPY_CLASS(wxGtkTreePath);
};
+// ----------------------------------------------------------------------------
+// wxGtkTreePathList: self-destroying list of GtkTreePath objects.
+// ----------------------------------------------------------------------------
+
+class wxGtkTreePathList : public wxGtkList
+{
+public:
+ // Ctor takes ownership of the list.
+ explicit wxGtkTreePathList(GList* list)
+ : wxGtkList(list)
+ {
+ }
+
+ ~wxGtkTreePathList()
+ {
+ // Delete the list contents, wxGtkList will delete the list itself.
+ g_list_foreach(m_list, (GFunc)gtk_tree_path_free, NULL);
+ }
+};
+
// ----------------------------------------------------------------------------
// wxGtkTreeSelectionLock: prevent selection from changing during the
// lifetime of this object
static
int LINKAGEMODE wxGtkTreeModelChildCmp( void** id1, void** id2 )
{
- int ret = gs_internal->GetDataViewModel()->Compare( *id1, *id2,
+ int ret = gs_internal->GetDataViewModel()->Compare( wxDataViewItem(*id1), wxDataViewItem(*id2),
gs_internal->GetSortColumn(), (gs_internal->GetSortOrder() == GTK_SORT_ASCENDING) );
return ret;
static
int LINKAGEMODE wxGtkTreeModelChildPtrCmp( void*** data1, void*** data2 )
{
- return gs_internal->GetDataViewModel()->Compare( **data1, **data2,
+ return gs_internal->GetDataViewModel()->Compare( wxDataViewItem(**data1), wxDataViewItem(**data2),
gs_internal->GetSortColumn(), (gs_internal->GetSortOrder() == GTK_SORT_ASCENDING) );
}
GtkTreePath *path )
{
delete m_dragDataObject;
+ m_dragDataObject = NULL;
wxDataViewItem item(GetOwner()->GTKPathToItem(path));
if ( !item )
{
GtkTreeViewColumn *gtk_column = GTK_TREE_VIEW_COLUMN(column->GetGtkHandle());
- GList *list = gtk_tree_view_get_columns( GTK_TREE_VIEW(m_treeview) );
-
- gint pos = g_list_index( list, (gconstpointer) gtk_column );
+ wxGtkList list(gtk_tree_view_get_columns(GTK_TREE_VIEW(m_treeview)));
- g_list_free( list );
-
- return pos;
+ return g_list_index( list, (gconstpointer) gtk_column );
}
wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const
if (HasFlag(wxDV_MULTIPLE))
{
GtkTreeModel *model;
- GList *list = gtk_tree_selection_get_selected_rows( selection, &model );
+ wxGtkTreePathList list(gtk_tree_selection_get_selected_rows(selection, &model));
int count = 0;
- while (list)
+ for ( GList* current = list; current; current = g_list_next(current) )
{
GtkTreePath *path = (GtkTreePath*) list->data;
sel.Add(GTKPathToItem(path));
-
- list = g_list_next( list );
count++;
}
- // delete list
- g_list_foreach( list, (GFunc) gtk_tree_path_free, NULL );
- g_list_free( list );
-
return count;
}
else