aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHanspeter Portner <dev@open-music-kontrollers.ch>2017-10-22 18:30:20 +0200
committerDavid Robillard <d@drobilla.net>2020-04-05 13:21:24 +0200
commit6721ea54b752b183c45bac83d705f7de40e74fd1 (patch)
treee3cc280096294279e85d3c9aa00531eefe29272e /src
parented1015dd8c99d8fe6275b7c8fb95774d206e6ee9 (diff)
downloadjalv-6721ea54b752b183c45bac83d705f7de40e74fd1.tar.gz
jalv-6721ea54b752b183c45bac83d705f7de40e74fd1.tar.bz2
jalv-6721ea54b752b183c45bac83d705f7de40e74fd1.zip
Add a command line argument to select a specific UI
Diffstat (limited to 'src')
-rw-r--r--src/jalv.c9
-rw-r--r--src/jalv_console.c7
-rw-r--r--src/jalv_gtk.c2
-rw-r--r--src/jalv_internal.h1
4 files changed, 19 insertions, 0 deletions
diff --git a/src/jalv.c b/src/jalv.c
index c54d7ad..09b15e3 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -737,6 +737,15 @@ jalv_select_custom_ui(const Jalv* const jalv)
{
const char* const native_ui_type_uri = jalv_native_ui_type();
+ if (jalv->opts.ui_uri) {
+ // Specific UI explicitly requested by user
+ LilvNode* uri = lilv_new_uri(jalv->world, jalv->opts.ui_uri);
+ const LilvUI* ui = lilv_uis_get_by_uri(jalv->uis, uri);
+
+ lilv_node_free(uri);
+ return ui;
+ }
+
#ifdef HAVE_SUIL
if (native_ui_type_uri) {
// Try to find an embeddable UI
diff --git a/src/jalv_console.c b/src/jalv_console.c
index a97b388..2d4a197 100644
--- a/src/jalv_console.c
+++ b/src/jalv_console.c
@@ -38,6 +38,7 @@ print_usage(const char* name, bool error)
fprintf(os, " -b SIZE Buffer size for plugin <=> UI communication\n");
fprintf(os, " -c SYM=VAL Set control value (e.g. \"vol=1.4\")\n");
fprintf(os, " -d Dump plugin <=> UI communication\n");
+ fprintf(os, " -U URI Load the UI with the given URI\n");
fprintf(os, " -h Display this help and exit\n");
fprintf(os, " -l DIR Load state from save directory\n");
fprintf(os, " -n NAME JACK client name\n");
@@ -74,6 +75,12 @@ jalv_init(int* argc, char*** argv, JalvOptions* opts)
opts->show_ui = true;
} else if ((*argv)[a][1] == 'p') {
opts->print_controls = true;
+ } else if ((*argv)[a][1] == 'U') {
+ if (++a == *argc) {
+ fprintf(stderr, "Missing argument for -U\n");
+ return 1;
+ }
+ opts->ui_uri = jalv_strdup((*argv)[a]);
} else if ((*argv)[a][1] == 'u') {
if (++a == *argc) {
fprintf(stderr, "Missing argument for -u\n");
diff --git a/src/jalv_gtk.c b/src/jalv_gtk.c
index bd9bc36..375ea76 100644
--- a/src/jalv_gtk.c
+++ b/src/jalv_gtk.c
@@ -97,6 +97,8 @@ jalv_init(int* argc, char*** argv, JalvOptions* opts)
"Load state from preset", "URI" },
{ "dump", 'd', 0, G_OPTION_ARG_NONE, &opts->dump,
"Dump plugin <=> UI communication", NULL },
+ { "ui-uri", 'U', 0, G_OPTION_ARG_STRING, &opts->ui_uri,
+ "Load the UI with the given URI", "URI" },
{ "trace", 't', 0, G_OPTION_ARG_NONE, &opts->trace,
"Print trace messages from plugin", NULL },
{ "show-hidden", 's', 0, G_OPTION_ARG_NONE, &opts->show_hidden,
diff --git a/src/jalv_internal.h b/src/jalv_internal.h
index 0e76fd0..855cf62 100644
--- a/src/jalv_internal.h
+++ b/src/jalv_internal.h
@@ -175,6 +175,7 @@ typedef struct {
int show_ui; ///< Show non-embedded UI
int print_controls; ///< Print control changes to stdout
int non_interactive; ///< Do not listen for commands on stdin
+ char* ui_uri; ///< URI of UI to load
} JalvOptions;
typedef struct {