Ver código fonte

fix item_edited behavior on Asset Installer.

(cherry picked from commit b0fbde6abd2d2bd6a8ad226597b1582b62d63607)
Zae 5 anos atrás
pai
commit
ac3ff49ae5
2 arquivos alterados com 25 adições e 1 exclusões
  1. 24 1
      editor/editor_asset_installer.cpp
  2. 1 0
      editor/editor_asset_installer.h

+ 24 - 1
editor/editor_asset_installer.cpp

@@ -55,6 +55,27 @@ void EditorAssetInstaller::_update_subitems(TreeItem *p_item, bool p_check, bool
 	}
 }
 
+void EditorAssetInstaller::_uncheck_parent(TreeItem *p_item) {
+	if (!p_item) {
+		return;
+	}
+
+	bool any_checked = false;
+	TreeItem *item = p_item->get_children();
+	while (item) {
+		if (item->is_checked(0)) {
+			any_checked = true;
+			break;
+		}
+		item = item->get_next();
+	}
+
+	if (!any_checked) {
+		p_item->set_checked(0, false);
+		_uncheck_parent(p_item->get_parent());
+	}
+}
+
 void EditorAssetInstaller::_item_edited() {
 
 	if (updating)
@@ -67,7 +88,7 @@ void EditorAssetInstaller::_item_edited() {
 	String path = item->get_metadata(0);
 
 	updating = true;
-	if (path == String()) { //a dir
+	if (path == String() || item == tree->get_root()) { //a dir or root
 		_update_subitems(item, item->is_checked(0), true);
 	}
 
@@ -76,6 +97,8 @@ void EditorAssetInstaller::_item_edited() {
 			item->set_checked(0, true);
 			item = item->get_parent();
 		}
+	} else {
+		_uncheck_parent(item->get_parent());
 	}
 	updating = false;
 }

+ 1 - 0
editor/editor_asset_installer.h

@@ -43,6 +43,7 @@ class EditorAssetInstaller : public ConfirmationDialog {
 	Map<String, TreeItem *> status_map;
 	bool updating;
 	void _update_subitems(TreeItem *p_item, bool p_check, bool p_first = false);
+	void _uncheck_parent(TreeItem *p_item);
 	void _item_edited();
 	virtual void ok_pressed();