Explorar el Código

Hides special folders in FileDialog for macOS

(cherry picked from commit 1998f7867940c60ac4ed8c009add64cf0a5a45a7)
Haoyu Qiu hace 4 años
padre
commit
7840a550b5

+ 5 - 1
drivers/unix/dir_access_unix.cpp

@@ -154,7 +154,7 @@ String DirAccessUnix::get_next() {
 		_cisdir = (entry->d_type == DT_DIR);
 	}
 
-	_cishidden = (fname != "." && fname != ".." && fname.begins_with("."));
+	_cishidden = is_hidden(fname);
 
 	return fname;
 }
@@ -408,6 +408,10 @@ String DirAccessUnix::get_filesystem_type() const {
 	return ""; //TODO this should be implemented
 }
 
+bool DirAccessUnix::is_hidden(const String &p_name) {
+	return p_name != "." && p_name != ".." && p_name.begins_with(".");
+}
+
 DirAccessUnix::DirAccessUnix() {
 
 	dir_stream = 0;

+ 1 - 0
drivers/unix/dir_access_unix.h

@@ -52,6 +52,7 @@ class DirAccessUnix : public DirAccess {
 
 protected:
 	virtual String fix_unicode_name(const char *p_name) const { return String::utf8(p_name); }
+	virtual bool is_hidden(const String &p_name);
 
 public:
 	virtual Error list_dir_begin(); ///< This starts dir listing

+ 2 - 0
platform/osx/dir_access_osx.h

@@ -47,6 +47,8 @@ protected:
 
 	virtual int get_drive_count();
 	virtual String get_drive(int p_drive);
+
+	virtual bool is_hidden(const String &p_name);
 };
 
 #endif //UNIX ENABLED

+ 10 - 0
platform/osx/dir_access_osx.mm

@@ -69,4 +69,14 @@ String DirAccessOSX::get_drive(int p_drive) {
 	return volname;
 }
 
+bool DirAccessOSX::is_hidden(const String &p_name) {
+	String f = get_current_dir().plus_file(p_name);
+	NSURL *url = [NSURL fileURLWithPath:@(f.utf8().get_data())];
+	NSNumber *hidden = nil;
+	if (![url getResourceValue:&hidden forKey:NSURLIsHiddenKey error:nil]) {
+		return DirAccessUnix::is_hidden(p_name);
+	}
+	return [hidden boolValue];
+}
+
 #endif //posix_enabled