diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h b/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h index 005ce50bb5..c2fd313c60 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h @@ -725,7 +725,7 @@ private: const Identifier propertyName (o.getPropertyName(j)); String val (o.getProperty (propertyName).toString()); - if (val.isEmpty() || (val.containsAnyOf (" \t;<>()=,-\r\n") + if (val.isEmpty() || (val.containsAnyOf (" \t;<>()=,&+-_\r\n") && ! (val.trimStart().startsWithChar ('(') || val.trimStart().startsWithChar ('{')))) val = val.quoted(); diff --git a/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp b/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp index 56174f4e9e..d1ba634480 100644 --- a/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp +++ b/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp @@ -233,7 +233,7 @@ public: log ("num IDispatch wrapper objs: " + String (--numDOWID)); } - const var getProperty (const Identifier& propertyName) const + var getProperty (const Identifier& propertyName) const { const String nameCopy (propertyName.toString()); LPCOLESTR name = nameCopy.toUTF16(); @@ -312,7 +312,7 @@ public: return source->GetIDsOfNames (IID_NULL, (LPOLESTR*) &name, 1, 0, &id) == S_OK; } - const var invokeMethod (const Identifier& methodName, const var* parameters, int numParameters) + var invokeMethod (const Identifier& methodName, const var* parameters, int numParameters) { var returnValue; const String nameCopy (methodName.toString()); diff --git a/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp b/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp index 0d825b3d1e..316e208656 100644 --- a/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp +++ b/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp @@ -572,7 +572,7 @@ public: DBG ("num NP wrapper objs: " + String (--numDOWNP)); } - const var getProperty (const var::identifier& propertyName) const + var getProperty (const var::identifier& propertyName) const { NPVariant result; VOID_TO_NPVARIANT (result); @@ -610,8 +610,8 @@ public: return browser.hasmethod (npp, source, getIdentifierFromString (methodName)); } - const var invokeMethod (const var::identifier& methodName, - const var* parameters, + var invokeMethod (const var::identifier& methodName, + const var* parameters, int numParameters) { var returnVal; diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index bfcbfd5405..392589f9f1 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -26751,6 +26751,9 @@ void AudioDeviceManager::createDeviceTypesIfNeeded() if (availableDeviceTypes.size() > 0) currentDeviceType = availableDeviceTypes.getUnchecked(0)->getTypeName(); + + for (int i = 0; i < availableDeviceTypes.size(); ++i) + availableDeviceTypes.getUnchecked(i)->addListener (&callbackHandler); } } @@ -26760,6 +26763,11 @@ const OwnedArray & AudioDeviceManager::getAvailableDeviceType return availableDeviceTypes; } +void AudioDeviceManager::audioDeviceListChanged() +{ + sendChangeMessage(); +} + static void addIfNotNull (OwnedArray & list, AudioIODeviceType* const device) { if (device != nullptr) @@ -27528,6 +27536,11 @@ void AudioDeviceManager::CallbackHandler::handleIncomingMidiMessage (MidiInput* owner->handleIncomingMidiMessageInt (source, message); } +void AudioDeviceManager::CallbackHandler::audioDeviceListChanged() +{ + owner->audioDeviceListChanged(); +} + void AudioDeviceManager::playTestSound() { { // cunningly nested to swap, unlock and delete in that order. @@ -27632,6 +27645,14 @@ AudioIODeviceType::~AudioIODeviceType() { } +void AudioIODeviceType::addListener (Listener* l) { listeners.add (l); } +void AudioIODeviceType::removeListener (Listener* l) { listeners.remove (l); } + +void AudioIODeviceType::callDeviceChangeListeners() +{ + listeners.call (&AudioIODeviceType::Listener::audioDeviceListChanged); +} + #if ! JUCE_MAC AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_CoreAudio() { return nullptr; } #endif @@ -55142,14 +55163,18 @@ void TextEditor::setText (const String& newText, } } -Value& TextEditor::getTextValue() +void TextEditor::updateValueFromText() { if (valueTextNeedsUpdating) { valueTextNeedsUpdating = false; textValue = getText(); } +} +Value& TextEditor::getTextValue() +{ + updateValueFromText(); return textValue; } @@ -56082,6 +56107,7 @@ void TextEditor::handleCommandMessage (const int commandId) break; case TextEditorDefs::focusLossMessageId: + updateValueFromText(); listeners.callChecked (checker, &TextEditorListener::textEditorFocusLost, (TextEditor&) *this); break; @@ -75025,6 +75051,14 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiInputSelectorComponentListBox); }; +struct AudioDeviceSetupDetails +{ + AudioDeviceManager* manager; + int minNumInputChannels, maxNumInputChannels; + int minNumOutputChannels, maxNumOutputChannels; + bool useStereoPairs; +}; + class AudioDeviceSettingsPanel : public Component, public ChangeListener, public ComboBoxListener, // (can't use ComboBox::Listener due to idiotic VC2005 bug) @@ -75032,7 +75066,7 @@ class AudioDeviceSettingsPanel : public Component, { public: AudioDeviceSettingsPanel (AudioIODeviceType* type_, - AudioIODeviceType::DeviceSetupDetails& setup_, + AudioDeviceSetupDetails& setup_, const bool hideAdvancedOptionsWithButton) : type (type_), setup (setup_) @@ -75302,7 +75336,7 @@ public: private: AudioIODeviceType* const type; - const AudioIODeviceType::DeviceSetupDetails setup; + const AudioDeviceSetupDetails setup; ScopedPointer outputDeviceDropDown, inputDeviceDropDown, sampleRateDropDown, bufferSizeDropDown; ScopedPointer