Coder Social home page Coder Social logo

suil's Introduction

LV2

LV2 is a plugin standard for audio systems. It defines an extensible C API for plugins, and a format for self-contained "bundle" directories that contain plugins, metadata, and other resources. See http://lv2plug.in/ for more information.

This package contains specifications (C headers and Turtle data files), documentation generation tools, tests, and example plugins.

Installation

See the installation instructions for details on how to configure, build, and install LV2 with meson.

By default, on UNIX-like systems, everything is installed within the prefix, and LV2 bundles are installed in the "lv2" subdirectory of the libdir. On other systems, bundles are installed by default to the standard location for plugins on the system. The bundle installation directory can be overridden with the lv2dir option.

The specification bundles are run-time dependencies of LV2 applications. Programs expect their data to be available somewhere in LV2_PATH. See http://lv2plug.in/pages/filesystem-hierarchy-standard.html for details on the standard installation paths.

Headers

The lv2/ include namespace is reserved for this LV2 distribution. Other projects may extend LV2, but must place their headers elsewhere.

Headers are installed to includedir with paths like:

#include "lv2/urid/urid.h"

For backwards compatibility, if the old_headers option is set, then headers are also installed to the older URI-based paths:

#include "lv2/lv2plug.in/ns/ext/urid/urid.h"

Projects still using this style are encourated to migrate to the shorter style above.

suil's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

suil's Issues

Build with qt5 fails on linux

I am building the suil package for Solus and it currently works with both gtk2 and gtk3 but building with qt5 fails. See error below:
image

From what I can tell, cocoa is part of MacOS and not really used on Linux? Is there any way to turn it off, liek adding a option in the waf build file?

Trouble showing gtk UIs in Ubuntu 20.04 (Qt 5 host)

Hi,
I'm having some issue with the following case:

On Ubuntu 20.04, by default, Qt uses the qgtk3 platform theme which calls gtk_init.

But when I try to show a calf UI:

(ossia-score:12415): GLib-GObject-WARNING **: 16:04:32.067: cannot register existing type 'GdkDisplayManager'

(ossia-score:12415): GLib-CRITICAL **: 16:04:32.067: g_once_init_leave: assertion 'result != 0' failed

(ossia-score:12415): GLib-GObject-CRITICAL **: 16:04:32.067: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

(ossia-score:12415): GLib-GObject-WARNING **: 16:04:32.067: invalid (NULL) pointer instance

(ossia-score:12415): GLib-GObject-CRITICAL **: 16:04:32.067: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(ossia-score:12415): GLib-GObject-WARNING **: 16:04:32.067: invalid (NULL) pointer instance

(ossia-score:12415): GLib-GObject-CRITICAL **: 16:04:32.067: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(ossia-score:12415): GLib-GObject-WARNING **: 16:04:32.070: cannot register existing type 'GdkDisplay'

(ossia-score:12415): GLib-CRITICAL **: 16:04:32.070: g_once_init_leave: assertion 'result != 0' failed

(ossia-score:12415): GLib-GObject-CRITICAL **: 16:04:32.070: g_type_register_static: assertion 'parent_type > 0' failed

(ossia-score:12415): GLib-CRITICAL **: 16:04:32.070: g_once_init_leave: assertion 'result != 0' failed

(ossia-score:12415): GLib-GObject-CRITICAL **: 16:04:32.070: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
Erreur de segmentation (core dumped)

with the following stack trace:

(gdb) bt
#0  0x00007fff54962aa5 in gdk_display_open () at /lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#1  0x00007fff5493116a in gdk_display_open_default_libgtk_only () at /lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#2  0x00007fff54b05f4d in gtk_init () at /lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#3  0x00007fff6e9087ee in suil_wrapper_new () at /usr/lib/x86_64-linux-gnu/suil-0/libsuil_gtk2_in_qt5.so
#4  0x00007ffff16a405c in suil_instance_new () at /lib/x86_64-linux-gnu/libsuil-0.so.0

what is the correct thing to do in that case ?

Unable to wrap UI type

I am building audacity against system libraries on Arch linux.
When audacity tries to display a UI of a plugin, the following error pops up in the console, and no UI pops up.

suil error: Unable to wrap UI type http://lv2plug.in/ns/extensions/ui#GtkUI as type http://lv2plug.in/ns/extensions/ui#Gtk3UI

How do I go about finding out more about this error? What are the possible reasons that it pops up? I have been blaming wxWidgets so far, but I am starting to have my doubts as I have been trying various versions of wxWidgets, and always get the same error.

QT5 in QT5

Hey,
I'm wondering if I understand the thing correctly.
I want to run a QT5 plugin UI inside of an embedded QT5 application (running with EGLFS). Does that mean that I need to have a qt5_in_qt5 wrapper which doesn't exist yet?
As a particular example, I want to run fil4.lv2 EQ plugin's UI inside Carla running as a standalone EGLFS app. Carla seems to be able to run like EGLFS app, but that rich fil4.lv2's UI doesn't open.
Thanks.

suil 0.10.{14,16} build failure

๐Ÿ‘‹ trying to build the latest release, but run into some build issue. The error log is as below:

build error
../src/qt5_in_gtk.cpp:128:36: error: use of undeclared identifier 'gtk_socket_get_id'; did you mean 'g_socket_get_fd'?
  const WId            id   = (WId)gtk_socket_get_id(s);
                                   ^~~~~~~~~~~~~~~~~
                                   g_socket_get_fd
/opt/homebrew/Cellar/glib/2.72.3/include/glib-2.0/gio/gsocket.h:85:24: note: 'g_socket_get_fd' declared here
int                    g_socket_get_fd                  (GSocket                 *socket);
                       ^
../src/qt5_in_gtk.cpp:128:54: error: cannot initialize a parameter of type 'GSocket *' (aka '_GSocket *') with an lvalue of type 'AtkSocket *const' (aka '_AtkSocket *const')
  const WId            id   = (WId)gtk_socket_get_id(s);
                                                     ^
/opt/homebrew/Cellar/glib/2.72.3/include/glib-2.0/gio/gsocket.h:85:83: note: passing argument to parameter 'socket' here
int                    g_socket_get_fd                  (GSocket                 *socket);
                                                                                  ^
7 errors generated.
ninja: build stopped: subcommand failed.

full build log, https://github.com/Homebrew/homebrew-core/runs/7709799805
relates to Homebrew/homebrew-core#107505
relates to Homebrew/homebrew-core#108065

suil 0.10.12 compilation error

Trying to build the latest release suil 0.0.12, but got the following compilation error:

  + install /opt/homebrew/Cellar/suil/0.10.12/lib/suil-0/libsuil_cocoa_in_gtk2.dylib (from build/libsuil_cocoa_in_gtk2.dylib)
  ../src/gtk2_in_qt5.cpp:99:5: error: static_cast from 'GdkNativeWindow' (aka 'void *') to 'WId' (aka 'unsigned long long') is not allowed
      static_cast<WId>(gtk_plug_get_id(reinterpret_cast<GtkPlug*>(plug)));
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.
  
  ../src/qt5_in_gtk.cpp:128:31: error: static_cast from 'GdkNativeWindow' (aka 'void *') to 'WId' (aka 'unsigned long long') is not allowed
    const WId            id   = static_cast<WId>(gtk_socket_get_id(s));
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.
  
  Waf: Leaving directory `/private/tmp/suil-20220528-20257-vmmiwl/suil-0.10.12/build'

full build log, https://github.com/Homebrew/homebrew-core/runs/6640500695
relates to Homebrew/homebrew-core#102533

Build fail after upgrade 0.10.0 -> 0.10.2

After update I get (no build option set / default)

| Waf: Entering directory /home/superandy/tmp/oe-core-glibc/work/cortexa7t2hf-neon-vfpv4-mortsgna-linux-gnueabi/suil/0.10.2-r0/build' | [ 1/19] Compiling src/instance.c | [ 2/19] Compiling src/host.c | [ 3/19] Compiling src/gtk2_in_qt5.cpp | [ 4/19] Compiling src/qt5_in_gtk2.cpp | [ 5/19] Compiling src/x11_in_gtk2.c | [ 6/19] Compiling src/x11_in_gtk3.c | [ 7/19] Compiling src/x11_in_qt5.cpp | [ 8/19] Compiling src/cocoa_in_qt5.mm | arm-mortsgna-linux-gnueabi-g++: error: ../suil-0.10.2/src/cocoa_in_qt5.mm: Objective-C++ compiler not installed on this system | | Waf: Leaving directory /home/superandy/tmp/oe-core-glibc/work/cortexa7t2hf-neon-vfpv4-mortsgna-linux-gnueabi/suil/0.10.2-r0/build'

Looks to me some waf magic is going on..

Building with LV2 SDK in non-standard path fails. pkg-config is not honored

Subject says it all. easy fix:

--- a/wscript
+++ b/wscript
@@ -361,7 +361,7 @@ def build(bld):
                   install_path = module_dir,
                   cflags       = cflags,
                   lib          = modlib)
-        autowaf.use_lib(bld, obj, 'X11')
+        autowaf.use_lib(bld, obj, 'X11 LV2')
 
     # Documentation
     autowaf.build_dox(bld, 'SUIL', SUIL_VERSION, top, out)

qt5 in gtk3 patch

not comprehensively tested but seems to work fine with *v1 plugins when using the suil code internally (copied inside another project instead of using the shared libraries)

From 8b432505127f4572a4716b09a622f77c06c9dd45 Mon Sep 17 00:00:00 2001
From: Alexandros Theodotou <[email protected]>
Date: Sun, 17 Feb 2019 15:13:29 +0000
Subject: [PATCH] add qt5_in_gtk3 support

---
 src/instance.c      |   8 ++
 src/qt5_in_gtk3.cpp | 231 ++++++++++++++++++++++++++++++++++++++++++++
 wscript             |  16 +++
 3 files changed, 255 insertions(+)
 create mode 100644 src/qt5_in_gtk3.cpp

diff --git a/src/instance.c b/src/instance.c
index d365ca2..61037fc 100644
--- a/src/instance.c
+++ b/src/instance.c
@@ -54,6 +54,8 @@ suil_ui_supported(const char* host_type_uri,
 	               && !strcmp(ui_type_uri, X11_UI_URI))
 	           || (!strcmp(host_type_uri, GTK3_UI_URI)
 	               && !strcmp(ui_type_uri, X11_UI_URI))
+	           || (!strcmp(host_type_uri, GTK3_UI_URI)
+	               && !strcmp(ui_type_uri, QT5_UI_URI))
 	           || (!strcmp(host_type_uri, GTK2_UI_URI)
 	               && !strcmp(ui_type_uri, WIN_UI_URI))
 	           || (!strcmp(host_type_uri, GTK2_UI_URI)
@@ -114,6 +116,12 @@ open_wrapper(SuilHost*      host,
 		module_name = "suil_x11_in_gtk3";
 	}
 #endif
+#ifdef SUIL_WITH_QT5_IN_GTK3
+	if (!strcmp(container_type_uri, GTK3_UI_URI)
+	    && !strcmp(ui_type_uri, QT5_UI_URI)) {
+		module_name = "suil_qt5_in_gtk3";
+	}
+#endif
 #ifdef SUIL_WITH_WIN_IN_GTK2
 	if (!strcmp(container_type_uri, GTK2_UI_URI)
 	    && !strcmp(ui_type_uri, WIN_UI_URI)) {
diff --git a/src/qt5_in_gtk3.cpp b/src/qt5_in_gtk3.cpp
new file mode 100644
index 0000000..ca7677e
--- /dev/null
+++ b/src/qt5_in_gtk3.cpp
@@ -0,0 +1,231 @@
+/*
+  Copyright 2011-2017 David Robillard <http://drobilla.net>
+  Copyright 2018 Rui Nuno Capela <[email protected]>
+
+  Permission to use, copy, modify, and/or distribute this software for any
+  purpose with or without fee is hereby granted, provided that the above
+  copyright notice and this permission notice appear in all copies.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <gtk/gtk.h>
+
+#include <QVBoxLayout>
+#include <QWidget>
+#include <QWindow>
+
+#include <gtk/gtkx.h>
+
+#include "lv2/lv2plug.in/ns/ext/options/options.h"
+#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
+
+#include "./suil_internal.h"
+
+extern "C" {
+
+#define SUIL_TYPE_QT_WRAPPER (suil_qt_wrapper_get_type())
+#define SUIL_QT_WRAPPER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SUIL_TYPE_QT_WRAPPER, SuilQtWrapper))
+
+typedef struct _SuilQtWrapper      SuilQtWrapper;
+typedef struct _SuilQtWrapperClass SuilQtWrapperClass;
+
+struct _SuilQtWrapper {
+	GtkSocket                   socket;
+	QWidget*                    qembed;
+	SuilWrapper*                wrapper;
+	SuilInstance*               instance;
+	const LV2UI_Idle_Interface* idle_iface;
+	guint                       idle_id;
+	guint                       idle_ms;
+};
+
+struct _SuilQtWrapperClass {
+	GtkSocketClass parent_class;
+};
+
+GType suil_qt_wrapper_get_type(void);  // Accessor for SUIL_TYPE_QT_WRAPPER
+
+G_DEFINE_TYPE(SuilQtWrapper, suil_qt_wrapper, GTK_TYPE_SOCKET)
+
+static void
+suil_qt_wrapper_finalize(GObject* gobject)
+{
+	SuilQtWrapper* const self = SUIL_QT_WRAPPER(gobject);
+
+	if (self->idle_id) {
+		g_source_remove(self->idle_id);
+		self->idle_id = 0;
+	}
+
+	if (self->instance->handle) {
+		self->instance->descriptor->cleanup(self->instance->handle);
+		self->instance->handle = NULL;
+	}
+
+	if (self->qembed) {
+		self->qembed->deleteLater();
+	}
+
+	self->qembed        = NULL;
+	self->idle_iface    = NULL;
+	self->wrapper->impl = NULL;
+
+	G_OBJECT_CLASS(suil_qt_wrapper_parent_class)->finalize(gobject);
+}
+
+static void
+suil_qt_wrapper_class_init(SuilQtWrapperClass* klass)
+{
+	GObjectClass* const gobject_class = G_OBJECT_CLASS(klass);
+
+	gobject_class->finalize = suil_qt_wrapper_finalize;
+}
+
+static void
+suil_qt_wrapper_init(SuilQtWrapper* self)
+{
+	self->qembed     = NULL;
+	self->wrapper    = NULL;
+	self->instance   = NULL;
+	self->idle_iface = NULL;
+	self->idle_id    = 0;
+	self->idle_ms    = 1000 / 30;  // 30 Hz default
+}
+
+static void
+suil_qt_wrapper_realize(GtkWidget* w, gpointer data)
+{
+	SuilQtWrapper* const wrap = SUIL_QT_WRAPPER(w);
+	GtkSocket* const     s    = GTK_SOCKET(w);
+	const WId            id   = (WId)gtk_socket_get_id(s);
+
+	wrap->qembed->winId();
+	wrap->qembed->windowHandle()->setParent(QWindow::fromWinId(id));
+	wrap->qembed->show();
+}
+
+static int
+suil_qt_wrapper_resize(LV2UI_Feature_Handle handle, int width, int height)
+{
+	gtk_widget_set_size_request(GTK_WIDGET(handle), width, height);
+
+	return 0;
+}
+
+static gboolean
+suil_qt_wrapper_idle(void* data)
+{
+	SuilQtWrapper* const wrap = SUIL_QT_WRAPPER(data);
+
+	if (wrap->idle_iface) {
+		wrap->idle_iface->idle(wrap->instance->handle);
+		return TRUE;  // Continue calling
+	}
+
+	return FALSE;
+}
+
+static int
+wrapper_wrap(SuilWrapper*  wrapper,
+             SuilInstance* instance)
+{
+	SuilQtWrapper* const wrap = SUIL_QT_WRAPPER(wrapper->impl);
+
+	wrap->qembed   = new QWidget();
+	wrap->wrapper  = wrapper;
+	wrap->instance = instance;
+
+	QWidget*     qwidget = (QWidget*)instance->ui_widget;
+	QVBoxLayout* layout  = new QVBoxLayout();
+	layout->setMargin(0);
+	layout->setSpacing(0);
+	layout->addWidget(qwidget);
+
+	wrap->qembed->setLayout(layout);
+
+	g_signal_connect_after(G_OBJECT(wrap), "realize",
+	                       G_CALLBACK(suil_qt_wrapper_realize), NULL);
+
+	instance->host_widget = GTK_WIDGET(wrap);
+
+	const LV2UI_Idle_Interface* idle_iface = NULL;
+	if (instance->descriptor->extension_data) {
+		idle_iface = (const LV2UI_Idle_Interface*)
+			instance->descriptor->extension_data(LV2_UI__idleInterface);
+	}
+
+	if (idle_iface) {
+		wrap->idle_iface = idle_iface;
+		wrap->idle_id    = g_timeout_add(
+			wrap->idle_ms, suil_qt_wrapper_idle, wrap);
+	}
+
+	return 0;
+}
+
+static void
+wrapper_free(SuilWrapper* wrapper)
+{
+	if (wrapper->impl) {
+		SuilQtWrapper* const wrap = SUIL_QT_WRAPPER(wrapper->impl);
+		gtk_widget_destroy(GTK_WIDGET(wrap));
+	}
+}
+
+SUIL_LIB_EXPORT
+SuilWrapper*
+suil_wrapper_new(SuilHost*      host,
+                 const char*    host_type_uri,
+                 const char*    ui_type_uri,
+                 LV2_Feature*** features,
+                 unsigned       n_features)
+{
+	SuilWrapper* wrapper = (SuilWrapper*)calloc(1, sizeof(SuilWrapper));
+	wrapper->wrap = wrapper_wrap;
+	wrapper->free = wrapper_free;
+
+	SuilQtWrapper* const wrap = SUIL_QT_WRAPPER(
+		g_object_new(SUIL_TYPE_QT_WRAPPER, NULL));
+
+	wrap->wrapper = NULL;
+	wrapper->impl = wrap;
+
+	wrapper->resize.handle    = wrap;
+	wrapper->resize.ui_resize = suil_qt_wrapper_resize;
+
+	suil_add_feature(features, &n_features, LV2_UI__resize, &wrapper->resize);
+	suil_add_feature(features, &n_features, LV2_UI__idleInterface, NULL);
+
+	// Scan for URID map and options
+	LV2_URID_Map*       map     = NULL;
+	LV2_Options_Option* options = NULL;
+	for (LV2_Feature** f = *features; *f && (!map || !options); ++f) {
+		if (!strcmp((*f)->URI, LV2_OPTIONS__options)) {
+			options = (LV2_Options_Option*)(*f)->data;
+		} else if (!strcmp((*f)->URI, LV2_URID__map)) {
+			map = (LV2_URID_Map*)(*f)->data;
+		}
+	}
+
+	if (map && options) {
+		// Set UI update rate if given
+		LV2_URID ui_updateRate = map->map(map->handle, LV2_UI__updateRate);
+		for (LV2_Options_Option* o = options; o->key; ++o) {
+			if (o->key == ui_updateRate) {
+				wrap->idle_ms = 1000.0f / *(const float*)o->value;
+				break;
+			}
+		}
+	}
+
+	return wrapper;
+}
+
+}  // extern "C"
diff --git a/wscript b/wscript
index 89ab039..8ed5e66 100644
--- a/wscript
+++ b/wscript
@@ -121,6 +121,9 @@ def configure(conf):
     if conf.env.HAVE_GTK3 and conf.env.HAVE_GTK3_X11:
         autowaf.define(conf, 'SUIL_WITH_X11_IN_GTK3', 1)
 
+    if conf.env.HAVE_GTK3 and conf.env.HAVE_QT5:
+        autowaf.define(conf, 'SUIL_WITH_QT5_IN_GTK3', 1)
+
     if conf.env.HAVE_GTK2 and conf.env.HAVE_GTK2_QUARTZ:
         autowaf.define(conf, 'SUIL_WITH_COCOA_IN_GTK2', 1)
 
@@ -176,6 +179,7 @@ def configure(conf):
                 ('win', 'gtk2'),
                 ('x11', 'gtk2'),
                 ('x11', 'gtk3'),
+                ('qt5', 'gtk3'),
                 ('x11', 'qt4'),
                 ('x11', 'qt5'),
                 ('cocoa', 'qt5')]
@@ -307,6 +311,18 @@ def build(bld):
                   linkflags    = bld.env.NODELETE_FLAGS)
         autowaf.use_lib(bld, obj, 'GTK3 GTK3_X11 LV2')
 
+    if bld.env.SUIL_WITH_QT5_IN_GTK3:
+        obj = bld(features     = 'cxx cxxshlib',
+                  source       = 'src/qt5_in_gtk3.cpp',
+                  target       = 'suil_qt5_in_gtk3',
+                  includes     = ['.'],
+                  defines      = ['SUIL_SHARED', 'SUIL_INTERNAL'],
+                  install_path = module_dir,
+                  cflags       = cflags,
+                  lib          = modlib,
+                  linkflags    = bld.env.NODELETE_FLAGS)
+        autowaf.use_lib(bld, obj, 'GTK3 QT5 LV2')
+
     if bld.env.SUIL_WITH_COCOA_IN_GTK2:
         obj = bld(features     = 'cxx cshlib',
                   source       = 'src/cocoa_in_gtk2.mm',
-- 
2.20.1

Building with older - non C++11 -- compilers fails (OSX gcc)

suil needs C++11 only for QT5. autowaf.set_cxx11_mode(conf) should only be enabled when using QT5.

Proposed change, not worth a PR:

diff --git a/wscript b/wscript
index 5141cbe..cd3e6a8 100644
--- a/wscript
+++ b/wscript
@@ -49,7 +49,6 @@ def configure(conf):
     autowaf.configure(conf)
     autowaf.display_header('Suil Configuration')
     autowaf.set_c99_mode(conf)
-    autowaf.set_cxx11_mode(conf)
 
     conf.env.BUILD_SHARED = not Options.options.no_shared
     conf.env.BUILD_STATIC = Options.options.static
@@ -108,6 +107,9 @@ def configure(conf):
     autowaf.define(conf, 'SUIL_GTK2_LIB_NAME', Options.options.gtk2_lib_name);
     autowaf.define(conf, 'SUIL_GTK3_LIB_NAME', Options.options.gtk3_lib_name);
 
+    if conf.env.HAVE_QT5:
+        autowaf.set_cxx11_mode(conf)
+
     if conf.env.HAVE_GTK2 and conf.env.HAVE_QT4:
         autowaf.define(conf, 'SUIL_WITH_GTK2_IN_QT4', 1)
         autowaf.define(conf, 'SUIL_WITH_QT4_IN_GTK2', 1)

Jalv.gtk2 and gtk3 crashing when trying to show UI for LSP plugins

Related issue:
lsp-plugins/lsp-plugins#12

It seems that something is going wrong when wrapping X11UI with GTK2 and GTK3.
jalv.qt works just fine and thows the UI.

Issuing the command:
jalv.gtk http://lsp-plug.in/plugins/lv2/comp_delay_mono

I get error:

error: failed to open file /home/sadko/.lv2/presets/manifest.ttl (No such file or directory)
lilv_world_load_file(): error: Error loading file `file:///home/sadko/.lv2/presets/manifest.ttl'
lilv_world_load_bundle(): error: Error reading file:///home/sadko/.lv2/presets/manifest.ttl
Plugin:       http://lsp-plug.in/plugins/lv2/comp_delay_mono
UI:           http://lsp-plug.in/ui/lv2/comp_delay_mono
JACK Name:    LSP Delay Compensator Mono
Block length: 1024 frames
MIDI buffers: 32768 bytes
Comm buffers: 65536 bytes
Update rate:  25.0 Hz

bypass      = 0.000000
mode        = 0.000000
ramp        = 0.000000
samp        = 0.000000
m           = 0.000000
cm          = 0.000000
t           = 20.000000
time        = 0.000000
dry         = 0.000000
wet         = 1.000000
g_out       = 1.000000
d_t         = 0.000000
d_s         = 0.000000
d_d         = 0.000000
out_latency = 0.000000
Segmentation fault (core dumped)

Here's the GDB backtrace:

(gdb) t a a bt

Thread 4 (Thread 0x7fffec96b700 (LWP 18760)):
#0  0x00007ffff423a129 in syscall () at /lib64/libc.so.6
#1  0x00007ffff6a06ff7 in  () at /usr/lib64/libjack.so.0
#2  0x00007ffff69ee9a5 in  () at /usr/lib64/libjack.so.0
#3  0x00007ffff69eda77 in  () at /usr/lib64/libjack.so.0
#4  0x00007ffff69ed268 in  () at /usr/lib64/libjack.so.0
#5  0x00007ffff6a051e6 in  () at /usr/lib64/libjack.so.0
#6  0x00007ffff7bc0559 in start_thread () at /lib64/libpthread.so.0
#7  0x00007ffff423f81f in clone () at /lib64/libc.so.6

Thread 3 (Thread 0x7fffed95f700 (LWP 18759)):
#0  0x00007ffff7bc9e98 in read () at /lib64/libpthread.so.0
#1  0x00007ffff6a0644e in  () at /usr/lib64/libjack.so.0
#2  0x00007ffff6a09a51 in  () at /usr/lib64/libjack.so.0
#3  0x00007ffff6a051e6 in  () at /usr/lib64/libjack.so.0
#4  0x00007ffff7bc0559 in start_thread () at /lib64/libpthread.so.0
#5  0x00007ffff423f81f in clone () at /lib64/libc.so.6

Thread 2 (Thread 0x7fffed9e0700 (LWP 18758)):
#0  0x00007ffff7bc689d in pthread_cond_wait@@GLIBC_2.3.2 () at /lib64/libpthread.so.0
#1  0x00007ffff6a05bac in  () at /usr/lib64/libjack.so.0
#2  0x00007ffff69fd825 in  () at /usr/lib64/libjack.so.0
#3  0x00007ffff6a051e6 in  () at /usr/lib64/libjack.so.0
#4  0x00007ffff7bc0559 in start_thread () at /lib64/libpthread.so.0
#5  0x00007ffff423f81f in clone () at /lib64/libc.so.6

Thread 1 (Thread 0x7ffff7fa8a00 (LWP 18754)):
#0  0x00007ffff7bc2e90 in pthread_mutex_lock () at /lib64/libpthread.so.0
#1  0x00007ffff34a66da in XrmQGetResource () at /usr/lib64/libX11.so.6
#2  0x00007ffff34823b6 in XGetDefault () at /usr/lib64/libX11.so.6
#3  0x00007ffff5a213be in  () at /usr/lib64/libcairo.so.2
#4  0x00007ffff5a23e10 in  () at /usr/lib64/libcairo.so.2
#5  0x00007ffff59f3c50 in cairo_surface_get_font_options () at /usr/lib64/libcairo.so.2
#6  0x00007ffff59b0d02 in  () at /usr/lib64/libcairo.so.2
#7  0x00007ffff59b3e04 in  () at /usr/lib64/libcairo.so.2
#8  0x00007ffff59a5cd4 in cairo_show_glyphs () at /usr/lib64/libcairo.so.2
#9  0x00007ffff5ee5f1b in  () at /usr/lib64/libpangocairo-1.0.so.0
#10 0x00007ffff5ee627f in  () at /usr/lib64/libpangocairo-1.0.so.0
#11 0x00007ffff4f830f9 in pango_renderer_draw_glyphs () at /usr/lib64/libpango-1.0.so.0
#12 0x00007ffff5ee64e4 in pango_cairo_show_glyph_string () at /usr/lib64/libpangocairo-1.0.so.0
#13 0x00007ffff4f830f9 in pango_renderer_draw_glyphs () at /usr/lib64/libpango-1.0.so.0
#14 0x00007ffff4f8318e in pango_renderer_draw_glyph_item () at /usr/lib64/libpango-1.0.so.0
#15 0x00007ffff4f83c21 in pango_renderer_draw_layout_line () at /usr/lib64/libpango-1.0.so.0
#16 0x00007ffff4f83ff5 in pango_renderer_draw_layout () at /usr/lib64/libpango-1.0.so.0
#17 0x00007ffff61190ee in gdk_draw_layout_with_colors () at /usr/lib64/libgdk-x11-2.0.so.0
#18 0x00007ffff611935d in gdk_draw_layout () at /usr/lib64/libgdk-x11-2.0.so.0
#19 0x00007ffff654a0c6 in  () at /usr/lib64/libgtk-x11-2.0.so.0
#20 0x00007ffff64cb128 in  () at /usr/lib64/libgtk-x11-2.0.so.0
#21 0x00007ffff641b72c in  () at /usr/lib64/libgtk-x11-2.0.so.0
#22 0x00007ffff64d5f6b in  () at /usr/lib64/libgtk-x11-2.0.so.0
#23 0x00007ffff4d14851 in g_closure_invoke () at /usr/lib64/libgobject-2.0.so.0
#24 0x00007ffff4d274b0 in  () at /usr/lib64/libgobject-2.0.so.0
#25 0x00007ffff4d2fc7f in g_signal_emit_valist () at /usr/lib64/libgobject-2.0.so.0
#26 0x00007ffff4d30c6f in g_signal_emit () at /usr/lib64/libgobject-2.0.so.0
#27 0x00007ffff65e4bbc in  () at /usr/lib64/libgtk-x11-2.0.so.0
#28 0x00007ffff646013e in gtk_container_propagate_expose () at /usr/lib64/libgtk-x11-2.0.so.0
#29 0x00007ffff645ec6e in  () at /usr/lib64/libgtk-x11-2.0.so.0
--Type <RET> for more, q to quit, c to continue without paging--
#30 0x00007ffff64e3c46 in  () at /usr/lib64/libgtk-x11-2.0.so.0
#31 0x00007ffff64d5f6b in  () at /usr/lib64/libgtk-x11-2.0.so.0
#32 0x00007ffff4d14851 in g_closure_invoke () at /usr/lib64/libgobject-2.0.so.0
#33 0x00007ffff4d274b0 in  () at /usr/lib64/libgobject-2.0.so.0
#34 0x00007ffff4d2fc7f in g_signal_emit_valist () at /usr/lib64/libgobject-2.0.so.0
#35 0x00007ffff4d30c6f in g_signal_emit () at /usr/lib64/libgobject-2.0.so.0
#36 0x00007ffff65e4bbc in  () at /usr/lib64/libgtk-x11-2.0.so.0
#37 0x00007ffff646013e in gtk_container_propagate_expose () at /usr/lib64/libgtk-x11-2.0.so.0
#38 0x00007ffff64e5c25 in  () at /usr/lib64/libgtk-x11-2.0.so.0
#39 0x00007ffff645ec6e in  () at /usr/lib64/libgtk-x11-2.0.so.0
#40 0x00007ffff64e1511 in  () at /usr/lib64/libgtk-x11-2.0.so.0
#41 0x00007ffff64d5f6b in  () at /usr/lib64/libgtk-x11-2.0.so.0
#42 0x00007ffff4d1493d in g_closure_invoke () at /usr/lib64/libgobject-2.0.so.0
#43 0x00007ffff4d274b0 in  () at /usr/lib64/libgobject-2.0.so.0
#44 0x00007ffff4d2fc7f in g_signal_emit_valist () at /usr/lib64/libgobject-2.0.so.0
#45 0x00007ffff4d30c6f in g_signal_emit () at /usr/lib64/libgobject-2.0.so.0
#46 0x00007ffff65e4bbc in  () at /usr/lib64/libgtk-x11-2.0.so.0
#47 0x00007ffff64d4d6d in gtk_main_do_event () at /usr/lib64/libgtk-x11-2.0.so.0
#48 0x00007ffff612e39f in  () at /usr/lib64/libgdk-x11-2.0.so.0
#49 0x00007ffff612e345 in  () at /usr/lib64/libgdk-x11-2.0.so.0
#50 0x00007ffff612af63 in  () at /usr/lib64/libgdk-x11-2.0.so.0
#51 0x00007ffff612b8a0 in gdk_window_process_all_updates () at /usr/lib64/libgdk-x11-2.0.so.0
#52 0x00007ffff645e991 in  () at /usr/lib64/libgtk-x11-2.0.so.0
#53 0x00007ffff610b21c in  () at /usr/lib64/libgdk-x11-2.0.so.0
#54 0x00007ffff4a37807 in  () at /usr/lib64/libglib-2.0.so.0
#55 0x00007ffff4a3ae07 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#56 0x00007ffff4a3b1b0 in  () at /usr/lib64/libglib-2.0.so.0
#57 0x00007ffff4a3b4c2 in g_main_loop_run () at /usr/lib64/libglib-2.0.so.0
#58 0x00007ffff64d3b77 in gtk_main () at /usr/lib64/libgtk-x11-2.0.so.0
#59 0x0000555555564816 in jalv_open_ui ()
#60 0x000055555555f0c3 in main ()

x11_in_qt5 ignores XWindow initial size

run

jalv.qt5 http://gareus.org/oss/lv2/tuna#one

The plugin calls XCreateWindow (... 517, 300, ...) and sets XSetNormalHints:

  Program supplied minimum size: 517 by 300
  Program supplied maximum size: 517 by 300

Yet jalv.qt5 brings up a window 200x100.

jalv.gtk, jalv.gtk3 work correctly and honor min/max and default size, jalv.qt4 has the correct default size (517x324 with jalv's menu bar) but does not enforce the size constraints.

Tested with gtk/qt on debian 10.3 with suil fbf5c73

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.