You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-31 18:41:20 +00:00
Merge pull request #113608 from bruvzg/fd_prefix
[FileDialog] Filter drive list when root folder is set.
This commit is contained in:
@@ -359,7 +359,13 @@ void FileDialog::update_dir() {
|
|||||||
drives->set_item_disabled(-1, true);
|
drives->set_item_disabled(-1, true);
|
||||||
drives->select(drives->get_item_count() - 1);
|
drives->select(drives->get_item_count() - 1);
|
||||||
} else {
|
} else {
|
||||||
drives->select(dir_access->get_current_drive());
|
int cur = dir_access->get_current_drive();
|
||||||
|
for (int i = 0; i < drives->get_item_count(); i++) {
|
||||||
|
if (drives->get_item_metadata(i).operator int() == cur) {
|
||||||
|
drives->select(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1322,6 +1328,7 @@ void FileDialog::set_root_subfolder(const String &p_root) {
|
|||||||
root_prefix = dir_access->get_current_dir();
|
root_prefix = dir_access->get_current_dir();
|
||||||
}
|
}
|
||||||
invalidate();
|
invalidate();
|
||||||
|
_update_drives();
|
||||||
update_dir();
|
update_dir();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1599,8 +1606,22 @@ void FileDialog::_change_dir(const String &p_new_dir) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FileDialog::_update_drives(bool p_select) {
|
void FileDialog::_update_drives(bool p_select) {
|
||||||
|
if (access != ACCESS_FILESYSTEM) {
|
||||||
|
drives->hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<int, String> drive_map;
|
||||||
int dc = dir_access->get_drive_count();
|
int dc = dir_access->get_drive_count();
|
||||||
if (dc == 0 || access != ACCESS_FILESYSTEM) {
|
int cur = dir_access->get_current_drive();
|
||||||
|
for (int i = 0; i < dc; i++) {
|
||||||
|
String drv = dir_access->get_drive(i);
|
||||||
|
if (!root_prefix.is_empty() && !drv.begins_with(root_prefix)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
drive_map[i] = drv;
|
||||||
|
}
|
||||||
|
if (drive_map.size() == 0) {
|
||||||
drives->hide();
|
drives->hide();
|
||||||
} else {
|
} else {
|
||||||
drives->clear();
|
drives->clear();
|
||||||
@@ -1612,12 +1633,12 @@ void FileDialog::_update_drives(bool p_select) {
|
|||||||
dp->add_child(drives);
|
dp->add_child(drives);
|
||||||
drives->show();
|
drives->show();
|
||||||
|
|
||||||
for (int i = 0; i < dir_access->get_drive_count(); i++) {
|
for (const KeyValue<int, String> &drv : drive_map) {
|
||||||
drives->add_item(dir_access->get_drive(i));
|
drives->add_item(drv.value);
|
||||||
}
|
drives->set_item_metadata(-1, drv.key);
|
||||||
|
if (p_select && drv.key == cur) {
|
||||||
if (p_select) {
|
drives->select(drives->get_item_count() - 1);
|
||||||
drives->select(dir_access->get_current_drive());
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user