| Index: Source/modules/webmidi/MIDIAccess.cpp
|
| diff --git a/Source/modules/webmidi/MIDIAccess.cpp b/Source/modules/webmidi/MIDIAccess.cpp
|
| index a004a9571f8dbe97c997f2baf0e2158ecbe81deb..5da99b509264a51c309e2f3d84ea70337579808a 100644
|
| --- a/Source/modules/webmidi/MIDIAccess.cpp
|
| +++ b/Source/modules/webmidi/MIDIAccess.cpp
|
| @@ -56,9 +56,9 @@ MIDIAccess::MIDIAccess(PassOwnPtr<MIDIAccessor> accessor, bool sysexEnabled, con
|
| for (size_t i = 0; i < ports.size(); ++i) {
|
| const MIDIAccessInitializer::PortDescriptor& port = ports[i];
|
| if (port.type == MIDIPort::MIDIPortTypeInput) {
|
| - m_inputs.append(MIDIInput::create(this, port.id, port.manufacturer, port.name, port.version));
|
| + m_inputs.append(MIDIInput::create(this, port.id, port.manufacturer, port.name, port.version, port.isActive));
|
| } else {
|
| - m_outputs.append(MIDIOutput::create(this, m_outputs.size(), port.id, port.manufacturer, port.name, port.version));
|
| + m_outputs.append(MIDIOutput::create(this, m_outputs.size(), port.id, port.manufacturer, port.name, port.version, port.isActive));
|
| }
|
| }
|
| }
|
| @@ -70,11 +70,15 @@ MIDIAccess::~MIDIAccess()
|
| MIDIInputMap* MIDIAccess::inputs() const
|
| {
|
| HeapHashMap<String, Member<MIDIInput> > inputs;
|
| + size_t inactiveCount = 0;
|
| for (size_t i = 0; i < m_inputs.size(); ++i) {
|
| MIDIInput* input = m_inputs[i];
|
| - inputs.add(input->id(), input);
|
| + if (input->isActive())
|
| + inputs.add(input->id(), input);
|
| + else
|
| + inactiveCount++;
|
| }
|
| - if (inputs.size() != m_inputs.size()) {
|
| + if ((inputs.size() + inactiveCount) != m_inputs.size()) {
|
| // There is id duplication that violates the spec.
|
| inputs.clear();
|
| }
|
| @@ -84,28 +88,46 @@ MIDIInputMap* MIDIAccess::inputs() const
|
| MIDIOutputMap* MIDIAccess::outputs() const
|
| {
|
| HeapHashMap<String, Member<MIDIOutput> > outputs;
|
| + size_t inactiveCount = 0;
|
| for (size_t i = 0; i < m_outputs.size(); ++i) {
|
| MIDIOutput* output = m_outputs[i];
|
| - outputs.add(output->id(), output);
|
| + if (output->isActive())
|
| + outputs.add(output->id(), output);
|
| + else
|
| + inactiveCount++;
|
| }
|
| - if (outputs.size() != m_outputs.size()) {
|
| + if ((outputs.size() + inactiveCount) != m_outputs.size()) {
|
| // There is id duplication that violates the spec.
|
| outputs.clear();
|
| }
|
| return new MIDIOutputMap(outputs);
|
| }
|
|
|
| -void MIDIAccess::didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version)
|
| +void MIDIAccess::didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version, bool isActive)
|
| {
|
| ASSERT(isMainThread());
|
| - m_inputs.append(MIDIInput::create(this, id, manufacturer, name, version));
|
| + m_inputs.append(MIDIInput::create(this, id, manufacturer, name, version, isActive));
|
| }
|
|
|
| -void MIDIAccess::didAddOutputPort(const String& id, const String& manufacturer, const String& name, const String& version)
|
| +void MIDIAccess::didAddOutputPort(const String& id, const String& manufacturer, const String& name, const String& version, bool isActive)
|
| {
|
| ASSERT(isMainThread());
|
| unsigned portIndex = m_outputs.size();
|
| - m_outputs.append(MIDIOutput::create(this, portIndex, id, manufacturer, name, version));
|
| + m_outputs.append(MIDIOutput::create(this, portIndex, id, manufacturer, name, version, isActive));
|
| +}
|
| +
|
| +void MIDIAccess::didSetInputPortState(unsigned portIndex, bool isActive)
|
| +{
|
| + ASSERT(isMainThread());
|
| + if (portIndex < m_inputs.size())
|
| + m_inputs[portIndex]->setActiveState(isActive);
|
| +}
|
| +
|
| +void MIDIAccess::didSetOutputPortState(unsigned portIndex, bool isActive)
|
| +{
|
| + ASSERT(isMainThread());
|
| + if (portIndex < m_outputs.size())
|
| + m_outputs[portIndex]->setActiveState(isActive);
|
| }
|
|
|
| void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStamp)
|
|
|