| @@ -231,7 +231,7 @@ const CustomData& CarlaPlugin::customData(const size_t index) const | |||||
| { | { | ||||
| CARLA_ASSERT(index < kData->custom.count()); | CARLA_ASSERT(index < kData->custom.count()); | ||||
| return (index < kData->custom.count()) ? kData->custom.getAt(index) : kCustomDataNull; | |||||
| return (index < kData->custom.count()) ? *kData->custom.getAt(index) : kCustomDataNull; | |||||
| } | } | ||||
| int32_t CarlaPlugin::chunkData(void** const dataPtr) | int32_t CarlaPlugin::chunkData(void** const dataPtr) | ||||
| @@ -1117,24 +1117,28 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c | |||||
| if (saveData) | if (saveData) | ||||
| { | { | ||||
| #if 0 | |||||
| // Check if we already have this key | // Check if we already have this key | ||||
| for (size_t i=0; i < kData->custom.count(); i++) | |||||
| for (size_t i=0, count=kData->custom.count(); i < count; i++) | |||||
| { | { | ||||
| if (std::strcmp(custom[i].key, key) == 0) | |||||
| CustomData* const cData(kData->custom.getAt(i)); | |||||
| assert(cData->type != nullptr); | |||||
| assert(cData->key != nullptr); | |||||
| assert(cData->value != nullptr); | |||||
| if (std::strcmp(cData->key, key) == 0) | |||||
| { | { | ||||
| delete[] custom[i].value; | |||||
| custom[i].value = carla_strdup(value); | |||||
| delete[] cData->value; | |||||
| cData->value = carla_strdup(value); | |||||
| return; | return; | ||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| // Otherwise store it | // Otherwise store it | ||||
| CustomData newData; | |||||
| newData.type = carla_strdup(type); | |||||
| newData.key = carla_strdup(key); | |||||
| newData.value = carla_strdup(value); | |||||
| CustomData* newData(new CustomData); | |||||
| newData->type = carla_strdup(type); | |||||
| newData->key = carla_strdup(key); | |||||
| newData->value = carla_strdup(value); | |||||
| kData->custom.append(newData); | kData->custom.append(newData); | ||||
| } | } | ||||
| } | } | ||||
| @@ -409,7 +409,7 @@ struct CarlaPluginProtectedData { | |||||
| PluginParameterData param; | PluginParameterData param; | ||||
| PluginProgramData prog; | PluginProgramData prog; | ||||
| PluginMidiProgramData midiprog; | PluginMidiProgramData midiprog; | ||||
| NonRtListNew<CustomData> custom; | |||||
| NonRtList<CustomData*> custom; | |||||
| CarlaMutex mutex; | CarlaMutex mutex; | ||||
| @@ -131,7 +131,7 @@ public: | |||||
| if (fDescriptor != nullptr) | if (fDescriptor != nullptr) | ||||
| { | { | ||||
| if (fIsUiVisible) | |||||
| if (fDescriptor->ui_show != nullptr && fIsUiVisible) | |||||
| fDescriptor->ui_show(fHandle, false); | fDescriptor->ui_show(fHandle, false); | ||||
| if (fDescriptor->deactivate != nullptr && kData->activeBefore) | if (fDescriptor->deactivate != nullptr && kData->activeBefore) | ||||
| @@ -487,7 +487,10 @@ public: | |||||
| QString filenameTry = QFileDialog::getOpenFileName(nullptr, "Open Audio File"); | QString filenameTry = QFileDialog::getOpenFileName(nullptr, "Open Audio File"); | ||||
| if (! filenameTry.isEmpty()) | if (! filenameTry.isEmpty()) | ||||
| fDescriptor->set_custom_data(fHandle, "file", filenameTry.toUtf8().constData()); | |||||
| { | |||||
| const char* const filename = filenameTry.toUtf8().constData(); | |||||
| setCustomData(CUSTOM_DATA_STRING, "file", filename, false); | |||||
| } | |||||
| kData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | kData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | ||||
| } | } | ||||
| @@ -520,7 +523,7 @@ public: | |||||
| CARLA_ASSERT(fDescriptor != nullptr); | CARLA_ASSERT(fDescriptor != nullptr); | ||||
| CARLA_ASSERT(fHandle != nullptr); | CARLA_ASSERT(fHandle != nullptr); | ||||
| if (fIsUiVisible) | |||||
| if (fIsUiVisible && fDescriptor != nullptr && fHandle != nullptr && fDescriptor->ui_idle != nullptr) | |||||
| fDescriptor->ui_idle(fHandle); | fDescriptor->ui_idle(fHandle); | ||||
| } | } | ||||