aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv_gtk.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-02-16 21:37:27 +0100
committerDavid Robillard <d@drobilla.net>2020-03-17 12:31:02 +0100
commit74c4c4d9badcd6ffc452baf8bea5530f44e95b4d (patch)
tree1720115d81744b9e80aa677302ae205d3632d088 /src/jalv_gtk.c
parent15f779a8603bc3f020e7000189900c52964771cd (diff)
downloadjalv-74c4c4d9badcd6ffc452baf8bea5530f44e95b4d.tar.gz
jalv-74c4c4d9badcd6ffc452baf8bea5530f44e95b4d.tar.bz2
jalv-74c4c4d9badcd6ffc452baf8bea5530f44e95b4d.zip
Implement ui:requestValue
Diffstat (limited to 'src/jalv_gtk.c')
-rw-r--r--src/jalv_gtk.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/jalv_gtk.c b/src/jalv_gtk.c
index 71259bd..5cf9a97 100644
--- a/src/jalv_gtk.c
+++ b/src/jalv_gtk.c
@@ -630,6 +630,42 @@ patch_put_get(Jalv* jalv,
return 0;
}
+static LV2UI_Request_Value_Status
+on_request_value(LV2UI_Feature_Handle handle,
+ const LV2_URID key,
+ const LV2_URID type,
+ const LV2_Feature* const* features)
+{
+ Jalv* jalv = (Jalv*)handle;
+ ControlID* control = get_property_control(&jalv->controls, key);
+
+ if (!control) {
+ return LV2UI_REQUEST_VALUE_ERR_UNKNOWN;
+ } else if (control->value_type != jalv->forge.Path) {
+ return LV2UI_REQUEST_VALUE_ERR_UNSUPPORTED;
+ }
+
+ GtkWidget* dialog =
+ gtk_file_chooser_dialog_new("Choose file",
+ GTK_WINDOW(jalv->window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) {
+ char* path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+
+ set_control(control, strlen(path), jalv->forge.Path, path);
+
+ g_free(path);
+ }
+
+ gtk_widget_destroy(dialog);
+
+ return 0;
+}
+
static void
property_changed(Jalv* jalv, LV2_URID key, const LV2_Atom* value)
{
@@ -1197,6 +1233,8 @@ jalv_open_ui(Jalv* jalv)
jalv_ui_instantiate(jalv, jalv_native_ui_type(), alignment);
}
+ jalv->features.request_value.request = on_request_value;
+
if (jalv->ui_instance) {
GtkWidget* widget = (GtkWidget*)suil_instance_get_widget(
jalv->ui_instance);