Browse Source

Merge pull request #94422 from m4gr3d/fix_input_locking_issue

Fix input lock issue when drag scrolling on a `Tree` element on touchscreen devices
Rémi Verschelde 1 year ago
parent
commit
7d71b4be37
2 changed files with 20 additions and 0 deletions
  1. 18 0
      scene/gui/tree.cpp
  2. 2 0
      scene/gui/tree.h

+ 18 - 0
scene/gui/tree.cpp

@@ -5440,6 +5440,24 @@ int Tree::get_drop_section_at_position(const Point2 &p_pos) const {
 	return -100;
 }
 
+bool Tree::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
+	if (drag_touching) {
+		// Disable data drag & drop when touch dragging.
+		return false;
+	}
+
+	return Control::can_drop_data(p_point, p_data);
+}
+
+Variant Tree::get_drag_data(const Point2 &p_point) {
+	if (drag_touching) {
+		// Disable data drag & drop when touch dragging.
+		return Variant();
+	}
+
+	return Control::get_drag_data(p_point);
+}
+
 TreeItem *Tree::get_item_at_position(const Point2 &p_pos) const {
 	if (root) {
 		Point2 pos = p_pos;

+ 2 - 0
scene/gui/tree.h

@@ -698,6 +698,8 @@ public:
 
 	virtual String get_tooltip(const Point2 &p_pos) const override;
 
+	virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const override;
+	virtual Variant get_drag_data(const Point2 &p_point) override;
 	TreeItem *get_item_at_position(const Point2 &p_pos) const;
 	int get_column_at_position(const Point2 &p_pos) const;
 	int get_drop_section_at_position(const Point2 &p_pos) const;