Copy mode button missing?

Where’s the copying mode button? I don’t want an extra copy of JUCE sources in my repository, I’ve already added JUCE using git-subtree.

Oops! Looks like it got nudged off the bottom of the panel… Thanks, I’ve put it back now!

i just downloaded the introjucer to check the new changes, i run it in the debug mode, load an old project into ijucer, is it just me or - the gui feels ultra sluggish. Can it be - it constantly create deep-copies of the whole project value-tree each time a button is pressed or something (only an assumption after pressing pause in the debugger, while gui not responding, whatching stack traces. )

>	Introjucer.exe!_heap_alloc_dbg_impl(unsigned int nSize=40, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x00c1eecc)  Line 427 + 0x9 bytes	C++
 	Introjucer.exe!_nh_malloc_dbg_impl(unsigned int nSize=40, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x00c1eecc)  Line 239 + 0x19 bytes	C++
 	Introjucer.exe!_nh_malloc_dbg(unsigned int nSize=40, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 296 + 0x1d bytes	C++
 	Introjucer.exe!malloc(unsigned int nSize=40)  Line 56 + 0x15 bytes	C++
 	Introjucer.exe!operator new(unsigned int size=40)  Line 59 + 0x9 bytes	C++
 	Introjucer.exe!juce::LinkedListPointer<juce::NamedValueSet::NamedValue>::addCopyOfList(const juce::LinkedListPointer<juce::NamedValueSet::NamedValue> & other={...})  Line 246 + 0x7 bytes	C++
 	Introjucer.exe!juce::NamedValueSet::NamedValueSet(const juce::NamedValueSet & other={...})  Line 82	C++
 	Introjucer.exe!juce::ValueTree::SharedObject::SharedObject(const juce::ValueTree::SharedObject & other={...})  Line 38 + 0x6b bytes	C++
 	Introjucer.exe!juce::ValueTree::SharedObject::SharedObject(const juce::ValueTree::SharedObject & other={...})  Line 41 + 0x2f bytes	C++
 	Introjucer.exe!juce::ValueTree::SharedObject::SharedObject(const juce::ValueTree::SharedObject & other={...})  Line 41 + 0x2f bytes	C++
 	Introjucer.exe!juce::ValueTree::SharedObject::SharedObject(const juce::ValueTree::SharedObject & other={...})  Line 41 + 0x2f bytes	C++
 	Introjucer.exe!juce::createCopyIfNotNull<juce::ValueTree::SharedObject>(juce::ValueTree::SharedObject * pointer=0x029ab440)  Line 68 + 0x54 bytes	C++
 	Introjucer.exe!juce::ValueTree::createCopy()  Line 713 + 0xe bytes	C++
 	Introjucer.exe!Project::Item::createCopy()  Line 431 + 0x51 bytes	C++
 	Introjucer.exe!ProjectExporter::ProjectExporter(Project & project_={...}, const juce::ValueTree & settings_={...})  Line 142 + 0x37 bytes	C++
 	Introjucer.exe!XCodeProjectExporter::XCodeProjectExporter(Project & project_={...}, const juce::ValueTree & settings_={...}, const bool iOS_=false)  Line 59 + 0x3e bytes	C++
 	Introjucer.exe!XCodeProjectExporter::createForSettings(Project & project={...}, const juce::ValueTree & settings={...})  Line 69 + 0x2f bytes	C++
 	Introjucer.exe!ProjectExporter::createExporter(Project & project={...}, const juce::ValueTree & settings={...})  Line 99 + 0x13 bytes	C++
 	Introjucer.exe!Project::createExporter(int index=1)  Line 918 + 0x58 bytes	C++
 	Introjucer.exe!Project::ExporterIterator::next()  Line 958 + 0x12 bytes	C++
 	Introjucer.exe!ProjectExporter::createPlatformDefaultExporter(Project & project={...})  Line 112 + 0x18 bytes	C++
 	Introjucer.exe!ProjectContentComponent::canProjectBeLaunched()  Line 409 + 0xf bytes	C++
 	Introjucer.exe!ProjectContentComponent::getCommandInfo(const int commandID=2097267, juce::ApplicationCommandInfo & result={...})  Line 523 + 0xb bytes	C++
 	Introjucer.exe!juce::ApplicationCommandManager::getTargetForCommand(const int commandID=2097267, juce::ApplicationCommandInfo & upToDateInfo={...})  Line 222	C++
 	Introjucer.exe!juce::Button::applicationCommandListChanged()  Line 520 + 0x16 bytes	C++
 	Introjucer.exe!juce::ListenerList<juce::ApplicationCommandManagerListener,juce::Array<juce::ApplicationCommandManagerListener *,juce::DummyCriticalSection> >::callChecked<juce::ListenerList<juce::ApplicationCommandManagerListener,juce::Array<juce::ApplicationCommandManagerListener *,juce::DummyCriticalSection> >::DummyBailOutChecker>(const juce::ListenerList<juce::ApplicationCommandManagerListener,juce::Array<juce::ApplicationCommandManagerListener *,juce::DummyCriticalSection> >::DummyBailOutChecker & bailOutChecker={...}, void (void)* callbackFunction=0x004d0f9e)  Line 159 + 0xd bytes	C++
 	Introjucer.exe!juce::ListenerList<juce::ApplicationCommandManagerListener,juce::Array<juce::ApplicationCommandManagerListener *,juce::DummyCriticalSection> >::call(void (void)* callbackFunction=0x004d0f9e)  Line 150	C++
 	Introjucer.exe!juce::ApplicationCommandManager::handleAsyncUpdate()  Line 306	C++
 	Introjucer.exe!juce::AsyncUpdater::AsyncUpdaterMessage::messageCallback()  Line 38	C++
 	Introjucer.exe!juce::WindowsMessageHelpers::dispatchMessageFromLParam(long lParam=43087912)  Line 50	C++
 	Introjucer.exe!juce::MessageManager::dispatchNextMessageOnSystemQueue(const bool returnIfNoPendingMessages=false)  Line 111 + 0x9 bytes	C++
 	Introjucer.exe!juce::MessageManager::runDispatchLoopUntil(int millisecondsToRunFor=-1)  Line 120 + 0x10 bytes	C++
 	Introjucer.exe!juce::MessageManager::runDispatchLoop()  Line 101	C++
 	Introjucer.exe!juce::JUCEApplication::main()  Line 213	C++

Hmm, I hadn’t noticed any sluggishness myself, but you’re right about it doing unnecessary work there. Thanks, I’ll do a bit of optimising…