Bladeren bron

Add / to the unix shortcut drive list

Also made `get_current_drive()` to pick the longest match on Unix.
Haoyu Qiu 3 jaren geleden
bovenliggende
commit
67f04b381b
3 gewijzigde bestanden met toevoegingen van 25 en 2 verwijderingen
  1. 8 2
      doc/classes/Directory.xml
  2. 16 0
      drivers/unix/dir_access_unix.cpp
  3. 1 0
      drivers/unix/dir_access_unix.h

+ 8 - 2
doc/classes/Directory.xml

@@ -119,13 +119,19 @@
 			<return type="String" />
 			<argument index="0" name="idx" type="int" />
 			<description>
-				On Windows, returns the name of the drive (partition) passed as an argument (e.g. [code]C:[/code]). On other platforms, or if the requested drive does not exist, the method returns an empty String.
+				On Windows, returns the name of the drive (partition) passed as an argument (e.g. [code]C:[/code]).
+				On macOS, returns the path to the mounted volume passed as an argument.
+				On Linux, returns the path to the mounted volume or GTK 3 bookmark passed as an argument.
+				On other platforms, or if the requested drive does not exist, the method returns an empty String.
 			</description>
 		</method>
 		<method name="get_drive_count">
 			<return type="int" />
 			<description>
-				On Windows, returns the number of drives (partitions) mounted on the current filesystem. On other platforms, the method returns 0.
+				On Windows, returns the number of drives (partitions) mounted on the current filesystem.
+				On macOS, returns the number of mounted volumes.
+				On Linux, returns the number of mounted volumes and GTK 3 bookmarks.
+				On other platforms, the method returns 0.
 			</description>
 		</method>
 		<method name="get_files">

+ 16 - 0
drivers/unix/dir_access_unix.cpp

@@ -216,6 +216,8 @@ static bool _filter_drive(struct mntent *mnt) {
 #endif
 
 static void _get_drives(List<String> *list) {
+	list->push_back("/");
+
 #if defined(HAVE_MNTENT) && defined(X11_ENABLED)
 	// Check /etc/mtab for the list of mounted partitions
 	FILE *mtab = setmntent("/etc/mtab", "r");
@@ -286,6 +288,20 @@ String DirAccessUnix::get_drive(int p_drive) {
 	return list[p_drive];
 }
 
+int DirAccessUnix::get_current_drive() {
+	int drive = 0;
+	int max_length = -1;
+	const String path = get_current_dir().to_lower();
+	for (int i = 0; i < get_drive_count(); i++) {
+		const String d = get_drive(i).to_lower();
+		if (max_length < d.length() && path.begins_with(d)) {
+			max_length = d.length();
+			drive = i;
+		}
+	}
+	return drive;
+}
+
 bool DirAccessUnix::drives_are_shortcuts() {
 	return true;
 }

+ 1 - 0
drivers/unix/dir_access_unix.h

@@ -63,6 +63,7 @@ public:
 
 	virtual int get_drive_count();
 	virtual String get_drive(int p_drive);
+	virtual int get_current_drive();
 	virtual bool drives_are_shortcuts();
 
 	virtual Error change_dir(String p_dir); ///< can be relative or absolute, return false on success