Allow import via DnD to Source list (not region list)

This commit is contained in:
Robin Gareus 2022-01-10 23:53:07 +01:00
parent 04bc44c7ad
commit 806f62ffe6
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
3 changed files with 22 additions and 44 deletions

View File

@ -277,15 +277,6 @@ EditorRegions::EditorRegions (Editor* e)
/* setup DnD handling */
list<TargetEntry> region_list_target_table;
region_list_target_table.push_back (TargetEntry ("text/uri-list"));
region_list_target_table.push_back (TargetEntry ("text/plain"));
region_list_target_table.push_back (TargetEntry ("application/x-rootwin-drop"));
_display.add_drop_targets (region_list_target_table);
_display.signal_drag_data_received ().connect (sigc::mem_fun (*this, &EditorRegions::drag_data_received));
_scroller.add (_display);
_scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
@ -1014,35 +1005,6 @@ EditorRegions::selection_mapover (sigc::slot<void, boost::shared_ptr<Region> > s
}
}
void
EditorRegions::drag_data_received (const RefPtr<Gdk::DragContext>& context,
int x, int y,
const SelectionData& data,
guint info, guint dtime)
{
vector<string> paths;
if (data.get_target () == "GTK_TREE_MODEL_ROW") {
/* something is being dragged over the region list */
_editor->_drags->abort ();
_display.on_drag_data_received (context, x, y, data, info, dtime);
return;
}
if (_session && convert_drop_to_paths (paths, data)) {
timepos_t pos;
bool copy = ((context->get_actions () & (Gdk::ACTION_COPY | Gdk::ACTION_LINK | Gdk::ACTION_MOVE)) == Gdk::ACTION_COPY);
if (UIConfiguration::instance ().get_only_copy_imported_files () || copy) {
_editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion,
SrcBest, SMFTrackName, SMFTempoIgnore, pos);
} else {
_editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
}
context->drag_finish (true, false, dtime);
}
}
bool
EditorRegions::selection_filter (const RefPtr<TreeModel>& model, const TreeModel::Path& path, bool already_selected)
{

View File

@ -182,10 +182,6 @@ private:
void clock_format_changed ();
void drag_data_received (
Glib::RefPtr<Gdk::DragContext> const &, gint, gint, Gtk::SelectionData const &, guint, guint
);
Glib::RefPtr<Gtk::Action> remove_unused_regions_action () const;
Gtk::Menu* _menu;

View File

@ -924,9 +924,29 @@ void
EditorSources::drag_data_received (const RefPtr<Gdk::DragContext>& context,
int x, int y,
const SelectionData& data,
guint info, guint time)
guint info, guint dtime)
{
/* ToDo: allow dropping files/loops into the source list? */
vector<string> paths;
if (data.get_target () == "GTK_TREE_MODEL_ROW") {
/* something is being dragged over the source list */
_editor->_drags->abort ();
_display.on_drag_data_received (context, x, y, data, info, dtime);
return;
}
if (_session && convert_drop_to_paths (paths, data)) {
timepos_t pos;
bool copy = ((context->get_actions () & (Gdk::ACTION_COPY | Gdk::ACTION_LINK | Gdk::ACTION_MOVE)) == Gdk::ACTION_COPY);
if (UIConfiguration::instance ().get_only_copy_imported_files () || copy) {
_editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion,
SrcBest, SMFTrackName, SMFTempoIgnore, pos);
} else {
_editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
}
context->drag_finish (true, false, dtime);
}
}
/** @return Region that has been dragged out of the list, or 0 */