From b409c58ee67f2779a0ee8ef66f9ead093a911058 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Thu, 15 Nov 2018 09:30:22 -0600 Subject: (Source List) Fix drag-n-drop. --- gtk2_ardour/editor.h | 3 ++- gtk2_ardour/editor_canvas.cc | 12 ++++++++++-- gtk2_ardour/editor_canvas_events.cc | 25 +++++++++++++++---------- gtk2_ardour/editor_sources.cc | 12 ++++++------ 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 64de32c240..00ec43aca1 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1979,7 +1979,8 @@ private: gint y, const Gtk::SelectionData& data, guint info, - guint time); + guint time, + bool from_region_list); void drop_routes ( const Glib::RefPtr& context, diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index f10ee20890..d45ab9a7ff 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -249,9 +249,15 @@ Editor::initialize_canvas () vector target_table; +<<<<<<< HEAD // Drag-N-Drop from the region list can generate this target target_table.push_back (TargetEntry ("regions")); +======= + target_table.push_back (TargetEntry ("regions")); // DnD from the region list will generate this target + target_table.push_back (TargetEntry ("sources")); // DnD from the source list will generate this target + target_table.push_back (TargetEntry ("text/plain")); +>>>>>>> Source list: Fix drag-n-drop. target_table.push_back (TargetEntry ("text/uri-list")); target_table.push_back (TargetEntry ("text/plain")); target_table.push_back (TargetEntry ("application/x-rootwin-drop")); @@ -376,8 +382,10 @@ Editor::track_canvas_drag_data_received (const RefPtr& context if (!ARDOUR_UI_UTILS::engine_is_running ()) { return; } - if (data.get_target() == "regions") { - drop_regions (context, x, y, data, info, time); + if (data.get_target() == X_("regions")) { + drop_regions (context, x, y, data, info, time, true); + } else if (data.get_target() == X_("sources")) { + drop_regions (context, x, y, data, info, time, false); } else { drop_paths (context, x, y, data, info, time); } diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index dc23d69957..275c461839 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -27,8 +27,8 @@ #include "ardour/audio_track.h" #include "ardour/midi_track.h" #include "ardour/midi_region.h" -#include "ardour/region_factory.h" #include "ardour/profile.h" +#include "ardour/region_factory.h" #include "canvas/canvas.h" #include "canvas/text.h" @@ -1169,8 +1169,6 @@ Editor::track_canvas_drag_motion (Glib::RefPtr const& context, return false; } -printf("Paul: DRAGGING: track_canvas_drag_motion\n"); - event.type = GDK_MOTION_NOTIFY; event.button.x = x; event.button.y = y; @@ -1200,8 +1198,10 @@ printf("Paul: DRAGGING: track_canvas_drag_motion\n"); } if (can_drop) { - region = _regions->get_dragged_region (); - if (!region) { + + if (target == X_("regions")) { + region = _regions->get_dragged_region (); + } else if (target == X_("sources")) { boost::shared_ptr src = _sources->get_dragged_source (); region = RegionFactory::get_whole_region_for_source (src); } @@ -1261,7 +1261,8 @@ void Editor::drop_regions (const Glib::RefPtr& /*context*/, int x, int y, const SelectionData& /*data*/, - guint /*info*/, guint /*time*/) + guint /*info*/, guint /*time*/, + bool from_region_list) { GdkEvent event; double px; @@ -1274,10 +1275,15 @@ Editor::drop_regions (const Glib::RefPtr& /*context*/, event.motion.state = Gdk::BUTTON1_MASK; samplepos_t const pos = window_event_sample (&event, &px, &py); - boost::shared_ptr region = _regions->get_dragged_region (); - if (!region) { + boost::shared_ptr region; + + if (from_region_list) { + region = _regions->get_dragged_region (); + } else { boost::shared_ptr src = _sources->get_dragged_source (); - region = RegionFactory::get_whole_region_for_source (src); + if (src) { + region = RegionFactory::get_whole_region_for_source (src); + } } if (!region) { return; } @@ -1367,4 +1373,3 @@ Editor::key_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType return handled; } - diff --git a/gtk2_ardour/editor_sources.cc b/gtk2_ardour/editor_sources.cc index 567640874f..4c9f397ace 100644 --- a/gtk2_ardour/editor_sources.cc +++ b/gtk2_ardour/editor_sources.cc @@ -173,18 +173,18 @@ EditorSources::EditorSources (Editor* e) tv_col->set_expand (true); _display.get_selection()->set_mode (SELECTION_MULTIPLE); - _display.add_object_drag (_columns.source.index(), "regions"); + _display.add_object_drag (_columns.source.index(), "sources"); _display.set_drag_column (_columns.name.index()); /* setup DnD handling */ - list region_list_target_table; + list source_list_target_table; - region_list_target_table.push_back (TargetEntry ("text/plain")); - region_list_target_table.push_back (TargetEntry ("text/uri-list")); - region_list_target_table.push_back (TargetEntry ("application/x-rootwin-drop")); + source_list_target_table.push_back (TargetEntry ("text/plain")); + source_list_target_table.push_back (TargetEntry ("text/uri-list")); + source_list_target_table.push_back (TargetEntry ("application/x-rootwin-drop")); - _display.add_drop_targets (region_list_target_table); + _display.add_drop_targets (source_list_target_table); _display.signal_drag_data_received().connect (sigc::mem_fun(*this, &EditorSources::drag_data_received)); _scroller.add (_display); -- cgit v1.2.3