From c9e9843a9e82fb4196a053cc10702ef11aa43d6f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 27 Jan 2022 22:15:46 +0100 Subject: [PATCH] Fix Trigger DnD Revert parts of 8c144d6e69ded and 0f4a5f2d521b Allow to drag regions out of trigger-boxes (this will be needed to export triggers). --- gtk2_ardour/triggerbox_ui.cc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/gtk2_ardour/triggerbox_ui.cc b/gtk2_ardour/triggerbox_ui.cc index 4abdbf86a8..a3b4c3ea16 100644 --- a/gtk2_ardour/triggerbox_ui.cc +++ b/gtk2_ardour/triggerbox_ui.cc @@ -803,11 +803,15 @@ TriggerEntry::drag_data_get (Glib::RefPtr const&, Gtk::Selecti */ return; } - if (data.get_target () != "x-ardour/trigger.pbdid") { - return; + if (data.get_target () == "x-ardour/region.pbdid") { + boost::shared_ptr region = trigger ()->region (); + if (region) { + data.set (data.get_target (), region->id ().to_s ()); + } + } + if (data.get_target () == "x-ardour/trigger.pbdid") { + data.set (data.get_target (), trigger()->id ().to_s ()); } - - data.set (data.get_target (), trigger()->id ().to_s ()); } /* ***************************************************** */ @@ -832,6 +836,7 @@ TriggerBoxUI::TriggerBoxUI (ArdourCanvas::Item* parent, TriggerBox& tb) if (!_dnd_src) { std::vector source_table; source_table.push_back (Gtk::TargetEntry ("x-ardour/trigger.pbdid", Gtk::TARGET_SAME_APP)); + source_table.push_back (Gtk::TargetEntry ("x-ardour/region.pbdid", Gtk::TARGET_SAME_APP)); _dnd_src = Gtk::TargetList::create (source_table); } @@ -929,11 +934,9 @@ TriggerBoxUI::drag_motion (Glib::RefPtr const& context, int, i std::string target = gtkcanvas->drag_dest_find_target (context, gtkcanvas->drag_dest_get_target_list ()); if ((target == "x-ardour/region.pbdid") || (target == "x-ardour/trigger.pbdid")) { - can_drop &= PublicEditor::instance ().pbdid_dragged_dt == _triggerbox.data_type (); + can_drop = PublicEditor::instance ().pbdid_dragged_dt == _triggerbox.data_type (); } - //TODO: currently for a 'plain' list of paths we are unable to report to the user if the slot can accept it. - uint64_t n = slot_at_y (y); if (n >= _slots.size ()) { assert (0);