Browse Source

Merge pull request #48685 from bruvzg/bundle_icon_4

Rémi Verschelde 3 years ago
parent
commit
3a19400889
5 changed files with 28 additions and 7 deletions
  1. 5 0
      core/os/os.cpp
  2. 1 0
      core/os/os.h
  3. 5 3
      main/main.cpp
  4. 1 0
      platform/osx/os_osx.h
  5. 16 4
      platform/osx/os_osx.mm

+ 5 - 0
core/os/os.cpp

@@ -282,6 +282,11 @@ String OS::get_bundle_resource_dir() const {
 	return ".";
 	return ".";
 }
 }
 
 
+// Path to macOS .app bundle embedded icon
+String OS::get_bundle_icon_path() const {
+	return String();
+}
+
 // OS specific path for user://
 // OS specific path for user://
 String OS::get_user_data_dir() const {
 String OS::get_user_data_dir() const {
 	return ".";
 	return ".";

+ 1 - 0
core/os/os.h

@@ -252,6 +252,7 @@ public:
 	virtual String get_config_path() const;
 	virtual String get_config_path() const;
 	virtual String get_cache_path() const;
 	virtual String get_cache_path() const;
 	virtual String get_bundle_resource_dir() const;
 	virtual String get_bundle_resource_dir() const;
+	virtual String get_bundle_icon_path() const;
 
 
 	virtual String get_user_data_dir() const;
 	virtual String get_user_data_dir() const;
 	virtual String get_resource_dir() const;
 	virtual String get_resource_dir() const;

+ 5 - 3
main/main.cpp

@@ -1721,8 +1721,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
 		}
 		}
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
-		Ref<Image> icon = memnew(Image(app_icon_png));
-		DisplayServer::get_singleton()->set_icon(icon);
+		if (OS::get_singleton()->get_bundle_icon_path().is_empty()) {
+			Ref<Image> icon = memnew(Image(app_icon_png));
+			DisplayServer::get_singleton()->set_icon(icon);
+		}
 #endif
 #endif
 	}
 	}
 
 
@@ -2440,7 +2442,7 @@ bool Main::start() {
 #endif
 #endif
 	}
 	}
 
 
-	if (!hasicon) {
+	if (!hasicon && OS::get_singleton()->get_bundle_icon_path().is_empty()) {
 		Ref<Image> icon = memnew(Image(app_icon_png));
 		Ref<Image> icon = memnew(Image(app_icon_png));
 		DisplayServer::get_singleton()->set_icon(icon);
 		DisplayServer::get_singleton()->set_icon(icon);
 	}
 	}

+ 1 - 0
platform/osx/os_osx.h

@@ -82,6 +82,7 @@ public:
 	virtual String get_data_path() const override;
 	virtual String get_data_path() const override;
 	virtual String get_cache_path() const override;
 	virtual String get_cache_path() const override;
 	virtual String get_bundle_resource_dir() const override;
 	virtual String get_bundle_resource_dir() const override;
+	virtual String get_bundle_icon_path() const override;
 	virtual String get_godot_dir_name() const override;
 	virtual String get_godot_dir_name() const override;
 
 
 	virtual String get_system_dir(SystemDir p_dir, bool p_shared_storage = true) const override;
 	virtual String get_system_dir(SystemDir p_dir, bool p_shared_storage = true) const override;

+ 16 - 4
platform/osx/os_osx.mm

@@ -379,14 +379,26 @@ String OS_OSX::get_cache_path() const {
 }
 }
 
 
 String OS_OSX::get_bundle_resource_dir() const {
 String OS_OSX::get_bundle_resource_dir() const {
+	String ret;
+
 	NSBundle *main = [NSBundle mainBundle];
 	NSBundle *main = [NSBundle mainBundle];
-	NSString *resourcePath = [main resourcePath];
+	if (main) {
+		NSString *resourcePath = [main resourcePath];
+		ret.parse_utf8([resourcePath UTF8String]);
+	}
+	return ret;
+}
 
 
-	char *utfs = strdup([resourcePath UTF8String]);
+String OS_OSX::get_bundle_icon_path() const {
 	String ret;
 	String ret;
-	ret.parse_utf8(utfs);
-	free(utfs);
 
 
+	NSBundle *main = [NSBundle mainBundle];
+	if (main) {
+		NSString *iconPath = [[main infoDictionary] objectForKey:@"CFBundleIconFile"];
+		if (iconPath) {
+			ret.parse_utf8([iconPath UTF8String]);
+		}
+	}
 	return ret;
 	return ret;
 }
 }