diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 937d1d9b91..4415118af5 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1908,9 +1908,18 @@ void GUI_App::init_app_config() // Mac : "~/Library/Application Support/Slic3r" if (data_dir().empty()) { - // Orca: check if data_dir folder exists in application folder - // use it if it exists - boost::filesystem::path app_data_dir_path = boost::filesystem::current_path() / "data_dir"; + // Orca: check if data_dir folder exists in application folder use it if it exists + // Note:wxStandardPaths::Get().GetExecutablePath() return following paths + // Unix: /usr/local/bin/exename + // Windows: "C:\Programs\AppFolder\exename.exe" + // Mac: /Applications/exename.app/Contents/MacOS/exename + // TODO: have no idea what to do with Linux bundles + auto _app_folder = boost::filesystem::path(wxStandardPaths::Get().GetExecutablePath().ToUTF8().data()).parent_path(); +#ifdef __APPLE__ + // On macOS, the executable is inside the .app bundle. + _app_folder = _app_folder.parent_path().parent_path().parent_path(); +#endif + boost::filesystem::path app_data_dir_path = _app_folder / "data_dir"; if (boost::filesystem::exists(app_data_dir_path)) { set_data_dir(app_data_dir_path.string()); }