diff options
author | Robin Gareus <robin@gareus.org> | 2013-08-25 16:20:27 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2013-08-25 16:21:18 +0200 |
commit | 1d972d05c5e889e4358d18ec6ba0c8e2e11a64e4 (patch) | |
tree | fa108cffdeece8db2f6adf2711e617b2830b18f4 /gtk2_ardour | |
parent | 4cdb018cae8580581359274d6397779b79263bdc (diff) |
add LV2 support for kx:external-ui#
the ABI of http://kxstudio.sf.net/ns/lv2ext/external-ui# is identical to
http://lv2plug.in/ns/extensions/ui#external
It just adds a distinction between #Host and #Widget for cosmetic reasons.
Sadly some newer plugins are released with only support for kxstudio URI :(
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/lv2_external_ui.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/lv2_plugin_ui.cc | 9 | ||||
-rw-r--r-- | gtk2_ardour/lv2_plugin_ui.h | 1 |
3 files changed, 10 insertions, 2 deletions
diff --git a/gtk2_ardour/lv2_external_ui.h b/gtk2_ardour/lv2_external_ui.h index 19fa912f04..9f404e6d9a 100644 --- a/gtk2_ardour/lv2_external_ui.h +++ b/gtk2_ardour/lv2_external_ui.h @@ -37,6 +37,8 @@ /** UI extension suitable for out-of-process UIs */ #define LV2_EXTERNAL_UI_URI "http://lv2plug.in/ns/extensions/ui#external" +#define LV2_EXTERNAL_UI_KX__Host "http://kxstudio.sf.net/ns/lv2ext/external-ui#Host" + #ifdef __cplusplus extern "C" { #endif diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc index 6f22ce5182..168f2d6798 100644 --- a/gtk2_ardour/lv2_plugin_ui.cc +++ b/gtk2_ardour/lv2_plugin_ui.cc @@ -171,6 +171,7 @@ LV2PluginUI::output_update() //cout << "output_update" << endl; if (_external_ui_ptr) { LV2_EXTERNAL_UI_RUN(_external_ui_ptr); + if (!_external_ui_ptr) return; // ui was closed here } /* FIXME only works with control output ports (which is all we support now anyway) */ @@ -222,12 +223,16 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title) _external_ui_feature.URI = LV2_EXTERNAL_UI_URI; _external_ui_feature.data = &_external_ui_host; + _external_kxui_feature.URI = LV2_EXTERNAL_UI_KX__Host; + _external_kxui_feature.data = &_external_ui_host; + ++features_count; features = (LV2_Feature**)malloc( - sizeof(LV2_Feature*) * (features_count + 1)); - for (size_t i = 0; i < features_count - 1; ++i) { + sizeof(LV2_Feature*) * (features_count + 2)); + for (size_t i = 0; i < features_count - 2; ++i) { features[i] = features_src[i]; } + features[features_count - 2] = &_external_kxui_feature; features[features_count - 1] = &_external_ui_feature; features[features_count] = NULL; } else { diff --git a/gtk2_ardour/lv2_plugin_ui.h b/gtk2_ardour/lv2_plugin_ui.h index edb90cb154..40e3890e1c 100644 --- a/gtk2_ardour/lv2_plugin_ui.h +++ b/gtk2_ardour/lv2_plugin_ui.h @@ -78,6 +78,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox std::vector<ControllableRef> _controllables; struct lv2_external_ui_host _external_ui_host; LV2_Feature _external_ui_feature; + LV2_Feature _external_kxui_feature; struct lv2_external_ui* _external_ui_ptr; LV2_Feature _parent_feature; Gtk::Window* _win_ptr; |