+ aSelections.Clear();
+
+ GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
+ if (HasFlag(wxDV_MULTIPLE))
+ {
+ GtkTreeModel *model;
+ GList *list = gtk_tree_selection_get_selected_rows( selection, &model );
+
+ int count = 0;
+ while (list)
+ {
+
+ // list = g_list_nth( list, 0 ); should be a noop
+ GtkTreePath *path = (GtkTreePath*) list->data;
+
+ unsigned int row = (unsigned int)gtk_tree_path_get_indices (path)[0];
+
+ aSelections.Add( (int) row );
+
+ list = g_list_next( list );
+ }
+
+ // delete list
+ g_list_foreach( list, (GFunc) gtk_tree_path_free, NULL );
+ g_list_free( list );
+
+ return count;
+ }
+ else
+ {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
+ if (has_selection)
+ {
+ unsigned int row = (wxUIntPtr) iter.user_data;
+ aSelections.Add( (int) row );
+ return 1;
+ }
+ }
+