diff --git a/files/utils.cc b/files/utils.cc index 784093eae..1df878900 100644 --- a/files/utils.cc +++ b/files/utils.cc @@ -872,7 +872,10 @@ void setup_program_paths() { U7mkdir("", 0755); U7mkdir("", 0755); U7mkdir("", 0755); +} + #ifdef MACOSX +void setup_appbundle() { // setup APPBUNDLE needed to launch Exult Studio from one std::unique_ptr::type, CFDeleter> fileUrl {std::move(CFBundleCopyBundleURL(CFBundleGetMainBundle()))}; if (fileUrl) { @@ -886,8 +889,8 @@ void setup_program_paths() { clear_system_path(""); } } -#endif } +#endif /* * Change the current directory diff --git a/files/utils.h b/files/utils.h index 98a40aeb0..9ed6a96da 100644 --- a/files/utils.h +++ b/files/utils.h @@ -455,6 +455,9 @@ void cleanup_output(const char *prefix = "std"); #endif void setup_data_dir(const std::string &data_path, const char *runpath); void setup_program_paths(); +#ifdef MACOSX +void setup_appbundle(); +#endif int U7chdir( const char *dirname diff --git a/mapedit/exult_studio.cc b/mapedit/exult_studio.cc index 59817d22b..4fc64a842 100644 --- a/mapedit/exult_studio.cc +++ b/mapedit/exult_studio.cc @@ -22,11 +22,44 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "studio.h" -#ifdef _WIN32 +#if defined(MACOSX) || defined(_WIN32) #include "utils.h" #endif int main(int argc, char **argv) { + +#ifdef MACOSX + // setting up environment for Exult Studio in an app bundle + setup_appbundle(); + if (is_system_path_defined("")) { + std::string app_path = get_system_path(""); + if (U7exists(app_path)) { + std::string bundle_res; + std::string bundle_data; + std::string bundle_pixbuf; + std::string bundle_im; + bundle_res = app_path; + bundle_res += "/Contents/Resources"; + bundle_data = bundle_res; + bundle_data += "/share"; + bundle_pixbuf = bundle_res; + bundle_pixbuf += "/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"; + bundle_im = bundle_res; + bundle_im += "/lib/gtk-3.0/3.0.0/immodules.cache"; + const gchar *b_res = bundle_res.c_str(); + const gchar *b_data = bundle_data.c_str(); + const gchar *b_pixbuf= bundle_pixbuf.c_str(); + const gchar *b_im = bundle_im.c_str(); + g_setenv("XDG_DATA_DIRS", b_data, 1); + g_setenv("GTK_DATA_PREFIX", b_res, 1); + g_setenv("GTK_EXE_PREFIX", b_res, 1); + g_setenv("GTK_PATH", b_res, 1); + g_setenv("GDK_PIXBUF_MODULE_FILE", b_pixbuf, 1); + g_setenv("GTK_IM_MODULE_FILE", b_im, 1); + } + } +#endif + ExultStudio studio(argc, argv); studio.run(); diff --git a/mapedit/studio.cc b/mapedit/studio.cc index 8eca18729..b7f065dd7 100644 --- a/mapedit/studio.cc +++ b/mapedit/studio.cc @@ -740,6 +740,7 @@ ExultStudio::ExultStudio(int argc, char **argv): glade_path(nullptr), // Setup virtual directories string data_path; #ifdef MACOSX + setup_appbundle(); string app_path; if (is_system_path_defined("")) { app_path = get_system_path("");