From 864f9e497dfa6bf6f7ab349e1b2b123e9bc575ba Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 6 May 2016 14:51:29 +0200 Subject: [PATCH] DnDTreeview: allow to handle multiple drag-targets --- libs/gtkmm2ext/dndtreeview.cc | 2 -- libs/gtkmm2ext/gtkmm2ext/dndtreeview.h | 13 +++++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libs/gtkmm2ext/dndtreeview.cc b/libs/gtkmm2ext/dndtreeview.cc index bc6745dc4f..4686702074 100644 --- a/libs/gtkmm2ext/dndtreeview.cc +++ b/libs/gtkmm2ext/dndtreeview.cc @@ -141,5 +141,3 @@ DnDTreeViewBase::on_drag_drop(const Glib::RefPtr& context, int drag_data.source = 0; return TreeView::on_drag_drop (context, x, y, time); } - - diff --git a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h index 29ae084111..0801058d87 100644 --- a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h +++ b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h @@ -142,11 +142,16 @@ class /*LIBGTKMM2EXT_API*/ DnDTreeView : public DnDTreeViewBase if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") { TreeView::on_drag_data_received (context, x, y, selection_data, info, time); - } else if (selection_data.get_target() == object_type) { - signal_drop (context, selection_data); - context->drag_finish (true, false, time); } else { - /* some kind of target type added by the app, which will be handled by a signal handler */ + /* some kind of target type, usually 'object_type' added by the app, + * which will be handled by a signal handler */ + for (std::list::const_iterator i = draggable.begin(); i != draggable.end (); ++i) { + if (selection_data.get_target() == (*i).get_target()) { + signal_drop (context, selection_data); + context->drag_finish (true, false, time); + break; + } + } } }