Gtk::TreeView
already implements simple drag-and-drop
when used with the Gtk::ListStore
or
Gtk::TreeStore
models (since gtk 4.8). If necessary, it also allows you
to implement more complex behavior when items are dragged and dropped, using
the normal Drag and Drop API.
If you call Gtk::TreeView::set_reorderable()
then your
TreeView's items can be moved within the treeview itself. This is demonstrated
in the TreeStore
example.
However, this does not allow you any control of which items can be dragged, and where they can be dropped.
If you need that extra control then you might create a derived Gtk::TreeModel
from
Gtk::TreeStore
or Gtk::ListStore
and override the
Gtk::TreeDragSource::row_draggable_vfunc()
and
Gtk::TreeDragDest::row_drop_possible_vfunc()
virtual methods.
You can examine the Gtk::TreeModel::Path
s provided and allow or disallow dragging
or dropping by returning true
or false
.
This is demonstrated in the drag_and_drop example.