diff --git a/.gitignore b/.gitignore
index 890ec2476..d5036a609 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,3 +48,6 @@ eepp.geany
/bin/assets/icon/ee.aps
/bin/.htaccess
.qtc_clangd
+/projects/osx/ecode/ecode.app
+/bin/assets/icon/ee.iconset
+ecode.dmg
diff --git a/bin/assets/icon/ee.icns b/bin/assets/icon/ee.icns
new file mode 100644
index 000000000..b9eae3d53
Binary files /dev/null and b/bin/assets/icon/ee.icns differ
diff --git a/projects/osx/ecode/Info.plist b/projects/osx/ecode/Info.plist
new file mode 100644
index 000000000..14506cb6e
--- /dev/null
+++ b/projects/osx/ecode/Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ CFBundleGetInfoString
+ ecode
+ CFBundleExecutable
+ run.sh
+ CFBundleIdentifier
+ ensoft.dev
+ CFBundleName
+ ecode
+ CFBundleIconFile
+ ecode.icns
+ CFBundleShortVersionString
+ 0.1
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ IFMajorVersion
+ 0
+ IFMinorVersion
+ 1
+ NSHighResolutionCapable
+
+ NSMainNibFile
+
+
+
diff --git a/projects/osx/ecode/build.app.sh b/projects/osx/ecode/build.app.sh
new file mode 100755
index 000000000..8e06b212a
--- /dev/null
+++ b/projects/osx/ecode/build.app.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+../make_no_fw.sh config=release ecode
+rm -rf ./ecode.app
+mkdir -p ecode.app/Contents/MacOS/
+mkdir -p ecode.app/Contents/Resources/
+cp ../../../bin/assets/icon/ee.icns ecode.app/Contents/Resources/ecode.icns
+cp Info.plist ecode.app/Contents/
+chmod +x run.sh
+cp run.sh ecode.app/Contents/MacOS
+cp ../../../libs/macosx/libeepp.dylib ecode.app/Contents/MacOS
+cp ../../../bin/ecode ecode.app/Contents/MacOS
+cp /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib ecode.app/Contents/MacOS
+install_name_tool -change /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib @executable_path/libSDL2-2.0.0.dylib ecode.app/Contents/MacOS/libeepp.dylib
+install_name_tool -change libeepp.dylib @executable_path/libeepp.dylib ecode.app/Contents/MacOS/ecode
+#cp -r ../../../bin/assets ecode.app/Contents/MacOS/assets
+mkdir -p ecode.app/Contents/MacOS/assets/colorschemes
+cp -r ../../../bin/assets/colorschemes/ ecode.app/Contents/MacOS/assets/colorschemes/
+cp -r ../../../bin/assets/fonts ecode.app/Contents/MacOS/assets/
+cp -r ../../../bin/assets/formatter ecode.app/Contents/MacOS/assets/
+cp -r ../../../bin/assets/icon ecode.app/Contents/MacOS/assets/
+cp -r ../../../bin/assets/linters ecode.app/Contents/MacOS/assets/
+mkdir ecode.app/Contents/MacOS/assets/ui
+cp ../../../bin/assets/ui/breeze.css ecode.app/Contents/MacOS/assets/ui/
diff --git a/projects/osx/ecode/create.dmg.sh b/projects/osx/ecode/create.dmg.sh
new file mode 100755
index 000000000..76b9aba07
--- /dev/null
+++ b/projects/osx/ecode/create.dmg.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# brew install create-dmg
+rm -f ecode.dmg
+create-dmg --icon ecode 0 16 --window-size 256 256 --app-drop-link 0 80 --icon-size 32 --text-size 12 --volicon ../../../bin/assets/icon/ee.icns ecode.dmg ecode.app
diff --git a/projects/osx/ecode/run.sh b/projects/osx/ecode/run.sh
new file mode 100755
index 000000000..3e9e2218b
--- /dev/null
+++ b/projects/osx/ecode/run.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+cd "${0%/*}"
+./ecode
diff --git a/projects/osx/ee.files b/projects/osx/ee.files
index 82706c780..7589e9653 100644
--- a/projects/osx/ee.files
+++ b/projects/osx/ee.files
@@ -1104,6 +1104,8 @@
../../src/tools/ecode/codeeditor.hpp
../../src/tools/ecode/docsearchcontroller.cpp
../../src/tools/ecode/docsearchcontroller.hpp
+../../src/tools/ecode/ecode.cpp
+../../src/tools/ecode/ecode.hpp
../../src/tools/ecode/filelocator.cpp
../../src/tools/ecode/filelocator.hpp
../../src/tools/ecode/filesystemlistener.cpp
@@ -1116,18 +1118,30 @@
../../src/tools/ecode/ignorematcher.hpp
../../src/tools/ecode/lintermodule.cpp
../../src/tools/ecode/lintermodule.hpp
+../../src/tools/ecode/modules/autocomplete/autocompletemodule.cpp
+../../src/tools/ecode/modules/autocomplete/autocompletemodule.hpp
+../../src/tools/ecode/modules/formatter/formattermodule.cpp
+../../src/tools/ecode/modules/formatter/formattermodule.hpp
+../../src/tools/ecode/modules/linter/lintermodule.cpp
+../../src/tools/ecode/modules/linter/lintermodule.hpp
../../src/tools/ecode/notificationcenter.cpp
../../src/tools/ecode/notificationcenter.hpp
../../src/tools/ecode/projectdirectorytree.cpp
../../src/tools/ecode/projectdirectorytree.hpp
../../src/tools/ecode/projectsearch.cpp
../../src/tools/ecode/projectsearch.hpp
+../../src/tools/ecode/thirdparty/json.hpp
+../../src/tools/ecode/thirdparty/subprocess.h
../../src/tools/ecode/uicodeeditorsplitter.cpp
../../src/tools/ecode/uicodeeditorsplitter.hpp
../../src/tools/ecode/uitreeviewglobalsearch.cpp
../../src/tools/ecode/uitreeviewglobalsearch.hpp
../../src/tools/ecode/widgetcommandexecuter.hpp
../../src/tools/mapeditor/mapeditor.cpp
+../../src/tools/mapeditor/mapeditor.cpp
+../../src/tools/textureatlaseditor/textureatlaseditor.cpp
../../src/tools/textureatlaseditor/textureatlaseditor.cpp
../../src/tools/texturepacker/texturepacker.cpp
+../../src/tools/texturepacker/texturepacker.cpp
+../../src/tools/uieditor/uieditor.cpp
../../src/tools/uieditor/uieditor.cpp
diff --git a/projects/osx/make_no_fw.sh b/projects/osx/make_no_fw.sh
index 5aa15eb78..b81887f0a 100755
--- a/projects/osx/make_no_fw.sh
+++ b/projects/osx/make_no_fw.sh
@@ -5,7 +5,7 @@ premake4 --file=../../premake4.lua gmake
cd ../../make/macosx/
sed -e "s/-Wl,-x//g" -i .make
-make $@
+make -j`nproc` $@
cd ../../bin/
ln -sf ../libs/macosx/libeepp.dylib .
diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp
index e1bd50ab8..a4c6a20de 100644
--- a/src/tools/ecode/ecode.cpp
+++ b/src/tools/ecode/ecode.cpp
@@ -863,7 +863,7 @@ UIMenu* App::createEditMenu() {
menu->add( i18n( "copy_file_path", "Copy File Path" ), findIcon( "copy" ),
getKeybind( "copy-file-path" ) )
->setId( "copy-file-path" );
- menu->addSeparator();
+ UIMenuSeparator* fileSep = menu->addSeparator();
menu->add( i18n( "key_bindings", "Key Bindings" ), findIcon( "keybindings" ),
getKeybind( "keybindings" ) )
->setId( "keybindings" );
@@ -872,7 +872,7 @@ UIMenu* App::createEditMenu() {
return;
runCommand( event->getNode()->getId() );
} );
- menu->addEventListener( Event::OnMenuShow, [&, menu]( const Event* ) {
+ menu->addEventListener( Event::OnMenuShow, [&, menu, fileSep]( const Event* ) {
if ( nullptr == mEditorSplitter->getCurEditor() )
return;
auto doc = mEditorSplitter->getCurEditor()->getDocumentRef();
@@ -882,6 +882,7 @@ UIMenu* App::createEditMenu() {
menu->getItemId( "cut" )->setEnabled( doc->hasSelection() );
menu->getItemId( "open-containing-folder" )->setVisible( doc->hasFilepath() );
menu->getItemId( "copy-file-path" )->setVisible( doc->hasFilepath() );
+ fileSep->setVisible( doc->hasFilepath() );
} );
return menu;
}
@@ -2576,7 +2577,7 @@ void App::initProjectTreeView( const std::string& path ) {
}
}
}
- } else {
+ } else if ( !mIsMacOSApp ) {
loadFolder( "." );
}
@@ -2644,6 +2645,13 @@ void App::init( std::string file, const Float& pidelDensity, const std::string&
: 0 );
mDisplayDPI = currentDisplay->getDPI();
mResPath = Sys::getProcessPath();
+#if EE_PLATFORM == EE_PLATFORM_MACOSX
+ if ( String::contains( mResPath, "ecode.app" ) ) {
+ mResPath = FileSystem::getCurrentWorkingDirectory();
+ FileSystem::dirAddSlashAtEnd( mResPath );
+ mIsMacOSApp = true;
+ }
+#endif
mConfig.window.pixelDensity =
pidelDensity > 0 ? pidelDensity
diff --git a/src/tools/ecode/ecode.hpp b/src/tools/ecode/ecode.hpp
index 54569c848..57f9ce941 100644
--- a/src/tools/ecode/ecode.hpp
+++ b/src/tools/ecode/ecode.hpp
@@ -117,6 +117,7 @@ class App : public UICodeEditorSplitter::Client {
std::shared_ptr mFileSystemModel;
size_t mMenuIconSize;
bool mDirTreeReady{ false };
+ bool mIsMacOSApp{ false };
ProjectDocumentConfig mProjectDocConfig;
std::unordered_set mTmpDocs;
std::string mCurrentProject;