Re: [gtkmm] multiple selections on TreeView
- From: Daniel Elstner <daniel elstner gmx net>
- To: Frank Naumann <fnaumann cs uni-magdeburg de>
- Cc: gtkmm-list gnome org
- Subject: Re: [gtkmm] multiple selections on TreeView
- Date: 22 Nov 2002 22:56:35 +0100
Am Fre, 2002-11-22 um 20.54 schrieb Frank Naumann:
> I have a question about multiple selections on a TreeView under
> gtkmm 2.0.1.
> The problem is now that if I try to remove something at runtime I
> get the following error message on stderr:
> (main.exe:10569): Gtk-CRITICAL **: file gtktreeselection.c: line 491
> (gtk_tree_selection_selected_foreach): assertion `has_next' failed.
> There is a disparity between the internal view of the GtkTreeView,
> and the GtkTreeModel. This generally means that the model has changed
> without letting the view know. Any display from now on is likely to
> be incorrect.
> For me it looks like I can't call erase in on_remove_selection() as this
> possible invalidates the iterator. If this is true is there any other way
> to remove multiple selections? Or I'm tottaly wrong here?
Yes, that's right. It's a limitation of the underlying GTK+ interface.
You have to do something along these lines:
typedef std::list<Gtk::TreeModel::Path> PathList;
void Foo::collect_path(const Gtk::TreeModel::Path& path, PathList* path_list)
for(PathList::iterator p = path_list.begin(); p != path_list.end(); ++p)
Theorhetically you could even avoid collect_path() by connecting to
PathList::push_back() directly, but that would require usage of
SigC::slot_class() which only few people seem to be familiar with :)
P.S.: collect_path() of course doesn't have to be static, but it
simplifies this example a bit since it eliminates the need for an object
] [Thread Prev