summaryrefslogtreecommitdiff
path: root/gtk2_ardour/lv2_plugin_ui.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-02-16 22:32:47 +0100
committerDavid Robillard <d@drobilla.net>2020-03-17 16:55:35 +0100
commit45026100aa0f2a94637aad39e7d39213738ff57a (patch)
tree89bc7c8a8a8f668c5db80cf680484036a5665072 /gtk2_ardour/lv2_plugin_ui.cc
parenta7a781971e146a6a98c0c55543b849c6adcd41f0 (diff)
LV2: Implement ui:requestValue feature
Diffstat (limited to 'gtk2_ardour/lv2_plugin_ui.cc')
-rw-r--r--gtk2_ardour/lv2_plugin_ui.cc42
1 files changed, 27 insertions, 15 deletions
diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc
index bd0198921d..1e2af6ad92 100644
--- a/gtk2_ardour/lv2_plugin_ui.cc
+++ b/gtk2_ardour/lv2_plugin_ui.cc
@@ -19,6 +19,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifdef WAF_BUILD
+#include "gtk2ardour-config.h"
+#endif
+
#include <gtkmm/stock.h>
#include "ardour/lv2_plugin.h"
@@ -135,19 +139,22 @@ LV2PluginUI::set_path_property (int response,
active_parameter_requests.erase (desc.key);
}
-uint32_t
-LV2PluginUI::request_parameter (void* handle, LV2_URID key)
+#ifdef HAVE_LV2_1_17_2
+LV2UI_Request_Value_Status
+LV2PluginUI::request_value(void* handle,
+ LV2_URID key,
+ LV2_URID type,
+ const LV2_Feature* const* features)
{
LV2PluginUI* me = (LV2PluginUI*)handle;
- /* This will return `PropertyDescriptors nothing` when not found */
const ParameterDescriptor& desc (me->_lv2->get_property_descriptor(key));
- if (desc.datatype != Variant::PATH) {
- return 0;
- }
-
- if (me->active_parameter_requests.find (key) != me->active_parameter_requests.end()) {
- return 0; /* already showing dialog */
+ if (desc.key == (uint32_t)-1) {
+ return LV2UI_REQUEST_VALUE_ERR_UNKNOWN;
+ } else if (desc.datatype != Variant::PATH) {
+ return LV2UI_REQUEST_VALUE_ERR_UNSUPPORTED;
+ } else if (me->active_parameter_requests.count (key)) {
+ return LV2UI_REQUEST_VALUE_BUSY;
}
me->active_parameter_requests.insert (key);
@@ -173,8 +180,9 @@ LV2PluginUI::request_parameter (void* handle, LV2_URID key)
lv2ui_file_dialog->signal_response().connect (sigc::bind (sigc::mem_fun (*me, &LV2PluginUI::set_path_property), desc, lv2ui_file_dialog));
lv2ui_file_dialog->present();
- return 0;
+ return LV2UI_REQUEST_VALUE_SUCCESS;
}
+#endif
void
LV2PluginUI::update_timeout()
@@ -341,11 +349,11 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
features[fi] = features_src[fi];
}
-#if 0
- _lv2ui_request_paramater.handle = this;
- _lv2ui_request_paramater.request = LV2PluginUI::request_parameter;
- _lv2ui_request_feature.URI = LV2_UI_PREFIX "requestParameter";
- _lv2ui_request_feature.data = &_lv2ui_request_paramater;
+#ifdef HAVE_LV2_1_17_2
+ _lv2ui_request_value.handle = this;
+ _lv2ui_request_value.request = LV2PluginUI::request_value;
+ _lv2ui_request_feature.URI = LV2_UI__requestValue;
+ _lv2ui_request_feature.data = &_lv2ui_request_value;
features[fi++] = &_lv2ui_request_feature;
#endif
@@ -381,7 +389,11 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
}
features[fi] = NULL;
+#ifdef HAVE_LV2_1_17_2
+ assert (fi == features_count + (is_external_ui ? 3 : 1));
+#else
assert (fi == features_count + (is_external_ui ? 2 : 1));
+#endif
if (!ui_host) {
ui_host = suil_host_new(LV2PluginUI::write_from_ui,