Fix issue causing input lock when drag scrolling a Tree element on touchscreen devices

Prior to this fix, scrolling via mouse drag on touchscreen devices, and
drag&drop operation on a `TreeItem` element would conflict with each other
preventing the drag scroll from being released when the mouse button is
released.

The issue is addressed by disabling drag&drop when drag scrolling is ongoing.
This commit is contained in:
Fredia Huya-Kouadio 2024-07-15 23:23:44 -07:00
parent 6b5825a0cb
commit 70d450d086
2 changed files with 20 additions and 0 deletions

View file

@ -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;

View file

@ -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;