From 5c6c5ba048382f04ef11a83108d4025922e1b4fc Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 4 Apr 2025 23:19:14 +0200 Subject: [PATCH] Add argc,argv constructor to Application for use with webviews Signed-off-by: falkTX --- dgl/Application.hpp | 17 ++++++++++--- dgl/src/Application.cpp | 55 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/dgl/Application.hpp b/dgl/Application.hpp index da0278a8..c028b53c 100644 --- a/dgl/Application.hpp +++ b/dgl/Application.hpp @@ -1,6 +1,6 @@ /* * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2024 Filipe Coelho + * Copyright (C) 2012-2025 Filipe Coelho * * 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 @@ -54,6 +54,12 @@ BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_file_browser_on) BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_file_browser_off) #endif +#ifdef DGL_USE_WEB_VIEW +BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_web_view_on) +#else +BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_web_view_off) +#endif + #ifdef DGL_NO_SHARED_RESOURCES BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_no_shared_resources_on) #else @@ -78,11 +84,16 @@ class DISTRHO_API Application { public: /** - Constructor. + Constructor for standalone or plugin application. */ - // NOTE: the default value is not yet passed, so we catch where we use this Application(bool isStandalone = true); + /** + Constructor for a standalone application. + This specific constructor is required if using web views in standalone applications. + */ + Application(int argc, char* argv[]); + /** Destructor. */ diff --git a/dgl/src/Application.cpp b/dgl/src/Application.cpp index d69ef383..ad5b2bed 100644 --- a/dgl/src/Application.cpp +++ b/dgl/src/Application.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2024 Filipe Coelho + * Copyright (C) 2012-2025 Filipe Coelho * * 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 @@ -24,6 +24,11 @@ START_NAMESPACE_DGL +/* define webview start */ +#if defined(HAVE_X11) && defined(DISTRHO_OS_LINUX) && defined(DGL_USE_WEB_VIEW) +int dpf_webview_start(int argc, char* argv[]); +#endif + // -------------------------------------------------------------------------------------------------------------------- // build config sentinels @@ -42,6 +47,12 @@ BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_file_browser_on) BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_file_browser_off) #endif +#ifdef DGL_USE_WEB_VIEW +BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_web_view_on) +#else +BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_use_web_view_off) +#endif + #ifdef DGL_NO_SHARED_RESOURCES BUILD_CONFIG_SENTINEL(fail_to_link_is_mismatch_dgl_no_shared_resources_on) #else @@ -64,6 +75,11 @@ bool dpf_check_build_status() noexcept #else fail_to_link_is_mismatch_dgl_use_file_browser_off.ok && #endif + #ifdef DGL_USE_WEB_VIEW + fail_to_link_is_mismatch_dgl_use_web_view_on.ok && + #else + fail_to_link_is_mismatch_dgl_use_web_view_off.ok && + #endif #ifdef DGL_NO_SHARED_RESOURCES fail_to_link_is_mismatch_dgl_no_shared_resources_on.ok && #else @@ -96,6 +112,43 @@ Application::Application(const bool isStandalone) #else fail_to_link_is_mismatch_dgl_use_file_browser_off.ok = true; #endif + #ifdef DGL_USE_WEB_VIEW + fail_to_link_is_mismatch_dgl_use_web_view_on.ok = true; + #else + fail_to_link_is_mismatch_dgl_use_web_view_off.ok = true; + #endif + #ifdef DGL_NO_SHARED_RESOURCES + fail_to_link_is_mismatch_dgl_no_shared_resources_on.ok = true; + #else + fail_to_link_is_mismatch_dgl_no_shared_resources_off.ok = true; + #endif + DISTRHO_SAFE_ASSERT(dpf_check_build_status()); +} + +Application::Application(int argc, char* argv[]) + : pData(new PrivateData(true)) +{ + #if defined(HAVE_X11) && defined(DISTRHO_OS_LINUX) && defined(DGL_USE_WEB_VIEW) + if (argc >= 2 && std::strcmp(argv[1], "dpf-ld-linux-webview") == 0) + std::exit(dpf_webview_start(argc, argv)); + #endif + + // build config sentinels + #ifdef DPF_DEBUG + fail_to_link_is_mismatch_dpf_debug_on.ok = true; + #else + fail_to_link_is_mismatch_dpf_debug_off.ok = true; + #endif + #ifdef DGL_USE_FILE_BROWSER + fail_to_link_is_mismatch_dgl_use_file_browser_on.ok = true; + #else + fail_to_link_is_mismatch_dgl_use_file_browser_off.ok = true; + #endif + #ifdef DGL_USE_WEB_VIEW + fail_to_link_is_mismatch_dgl_use_web_view_on.ok = true; + #else + fail_to_link_is_mismatch_dgl_use_web_view_off.ok = true; + #endif #ifdef DGL_NO_SHARED_RESOURCES fail_to_link_is_mismatch_dgl_no_shared_resources_on.ok = true; #else