浏览代码

Merge pull request #83966 from kitbdev/fix-tabcontainer-drag

Fix `TabContainer` drag to rearrange issue
Rémi Verschelde 1 年之前
父节点
当前提交
71bef69318
共有 2 个文件被更改,包括 12 次插入2 次删除
  1. 11 2
      scene/gui/tab_container.cpp
  2. 1 0
      scene/gui/tab_container.h

+ 11 - 2
scene/gui/tab_container.cpp

@@ -330,14 +330,23 @@ Vector<Control *> TabContainer::_get_tab_controls() const {
 }
 }
 
 
 Variant TabContainer::_get_drag_data_fw(const Point2 &p_point, Control *p_from_control) {
 Variant TabContainer::_get_drag_data_fw(const Point2 &p_point, Control *p_from_control) {
+	if (!drag_to_rearrange_enabled) {
+		return Variant();
+	}
 	return tab_bar->_handle_get_drag_data("tab_container_tab", p_point);
 	return tab_bar->_handle_get_drag_data("tab_container_tab", p_point);
 }
 }
 
 
 bool TabContainer::_can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from_control) const {
 bool TabContainer::_can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from_control) const {
+	if (!drag_to_rearrange_enabled) {
+		return false;
+	}
 	return tab_bar->_handle_can_drop_data("tab_container_tab", p_point, p_data);
 	return tab_bar->_handle_can_drop_data("tab_container_tab", p_point, p_data);
 }
 }
 
 
 void TabContainer::_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from_control) {
 void TabContainer::_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from_control) {
+	if (!drag_to_rearrange_enabled) {
+		return;
+	}
 	return tab_bar->_handle_drop_data("tab_container_tab", p_point, p_data, callable_mp(this, &TabContainer::_drag_move_tab), callable_mp(this, &TabContainer::_drag_move_tab_from));
 	return tab_bar->_handle_drop_data("tab_container_tab", p_point, p_data, callable_mp(this, &TabContainer::_drag_move_tab), callable_mp(this, &TabContainer::_drag_move_tab_from));
 }
 }
 
 
@@ -815,11 +824,11 @@ Popup *TabContainer::get_popup() const {
 }
 }
 
 
 void TabContainer::set_drag_to_rearrange_enabled(bool p_enabled) {
 void TabContainer::set_drag_to_rearrange_enabled(bool p_enabled) {
-	tab_bar->set_drag_to_rearrange_enabled(p_enabled);
+	drag_to_rearrange_enabled = p_enabled;
 }
 }
 
 
 bool TabContainer::get_drag_to_rearrange_enabled() const {
 bool TabContainer::get_drag_to_rearrange_enabled() const {
-	return tab_bar->get_drag_to_rearrange_enabled();
+	return drag_to_rearrange_enabled;
 }
 }
 
 
 void TabContainer::set_tabs_rearrange_group(int p_group_id) {
 void TabContainer::set_tabs_rearrange_group(int p_group_id) {

+ 1 - 0
scene/gui/tab_container.h

@@ -46,6 +46,7 @@ class TabContainer : public Container {
 	bool use_hidden_tabs_for_min_size = false;
 	bool use_hidden_tabs_for_min_size = false;
 	bool theme_changing = false;
 	bool theme_changing = false;
 	Vector<Control *> children_removing;
 	Vector<Control *> children_removing;
+	bool drag_to_rearrange_enabled = false;
 
 
 	struct ThemeCache {
 	struct ThemeCache {
 		int side_margin = 0;
 		int side_margin = 0;