Browse Source

Favorites dragable

David Sichma 5 years ago
parent
commit
f1265541ee
1 changed files with 17 additions and 11 deletions
  1. 17 11
      editor/filesystem_dock.cpp

+ 17 - 11
editor/filesystem_dock.cpp

@@ -333,10 +333,11 @@ void FileSystemDock::_notification(int p_what) {
 		case NOTIFICATION_DRAG_BEGIN: {
 			Dictionary dd = get_viewport()->gui_get_drag_data();
 			if (tree->is_visible_in_tree() && dd.has("type")) {
-				if ((String(dd["type"]) == "files") || (String(dd["type"]) == "files_and_dirs") || (String(dd["type"]) == "resource")) {
+				if (dd.has("favorite")) {
+					if ((String(dd["favorite"]) == "all"))
+						tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN);
+				} else if ((String(dd["type"]) == "files") || (String(dd["type"]) == "files_and_dirs") || (String(dd["type"]) == "resource")) {
 					tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM | Tree::DROP_MODE_INBETWEEN);
-				} else if ((String(dd["type"]) == "favorite")) {
-					tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN);
 				}
 			}
 		} break;
@@ -1839,7 +1840,7 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from)
 			all_not_favorites &= !is_favorite;
 			selected = tree->get_next_selected(selected);
 		}
-		if (all_favorites) {
+		if (!all_not_favorites) {
 			paths = _tree_get_selected(false);
 		} else {
 			paths = _tree_get_selected();
@@ -1857,12 +1858,9 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from)
 	if (paths.empty())
 		return Variant();
 
-	if (!all_favorites && !all_not_favorites)
-		return Variant();
-
 	Dictionary drag_data = EditorNode::get_singleton()->drag_files_and_dirs(paths, p_from);
-	if (all_favorites) {
-		drag_data["type"] = "favorite";
+	if (!all_not_favorites) {
+		drag_data["favorite"] = all_favorites ? "all" : "mixed";
 	}
 	return drag_data;
 }
@@ -1870,7 +1868,11 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from)
 bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const {
 	Dictionary drag_data = p_data;
 
-	if (drag_data.has("type") && String(drag_data["type"]) == "favorite") {
+	if (drag_data.has("favorite")) {
+
+		if (String(drag_data["favorite"]) != "all") {
+			return false;
+		}
 
 		// Moving favorite around.
 		TreeItem *ti = tree->get_item_at_position(p_point);
@@ -1937,7 +1939,11 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data,
 
 	Vector<String> dirs = EditorSettings::get_singleton()->get_favorites();
 
-	if (drag_data.has("type") && String(drag_data["type"]) == "favorite") {
+	if (drag_data.has("favorite")) {
+
+		if (String(drag_data["favorite"]) != "all") {
+			return;
+		}
 		// Moving favorite around.
 		TreeItem *ti = tree->get_item_at_position(p_point);
 		if (!ti)