From 3f8b86a559a56e58b161f95096b5f0aa3ba36e0e Mon Sep 17 00:00:00 2001 From: Andrew Wiltshire <62200778+AW1534@users.noreply.github.com> Date: Sat, 31 May 2025 18:58:08 +0100 Subject: [PATCH] Ignore "Keep plugin windows on top" setting when on wayland (#7901) Fix a crash that occurs when running under Wayland and when loading a VST plugin with the option "Keep plugin windows on top when not embedded" enabled. --- include/GuiApplication.h | 1 + plugins/VstBase/VstPlugin.cpp | 7 +++---- src/gui/GuiApplication.cpp | 5 +++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/GuiApplication.h b/include/GuiApplication.h index 16680934f..02fb6ed67 100644 --- a/include/GuiApplication.h +++ b/include/GuiApplication.h @@ -55,6 +55,7 @@ public: static GuiApplication* instance(); static void sigintHandler(int); + static bool isWayland(); #ifdef LMMS_BUILD_WIN32 static QFont getWin32SystemFont(); #endif diff --git a/plugins/VstBase/VstPlugin.cpp b/plugins/VstBase/VstPlugin.cpp index 5dbe7a698..f26245728 100644 --- a/plugins/VstBase/VstPlugin.cpp +++ b/plugins/VstBase/VstPlugin.cpp @@ -49,12 +49,12 @@ #include "AudioEngine.h" #include "ConfigManager.h" +#include "FileDialog.h" #include "GuiApplication.h" #include "LocaleHelper.h" #include "MainWindow.h" #include "PathUtil.h" #include "Song.h" -#include "FileDialog.h" #ifdef LMMS_BUILD_LINUX # include @@ -404,9 +404,8 @@ bool VstPlugin::processMessage( const message & _m ) { case IdVstPluginWindowID: m_pluginWindowID = _m.getInt(); - if( m_embedMethod == "none" - && ConfigManager::inst()->value( - "ui", "vstalwaysontop" ).toInt() ) + if (m_embedMethod == "none" && !gui::GuiApplication::isWayland() + && ConfigManager::inst()->value("ui", "vstalwaysontop").toInt()) { #ifdef LMMS_BUILD_WIN32 // We're changing the owner, not the parent, diff --git a/src/gui/GuiApplication.cpp b/src/gui/GuiApplication.cpp index 7e62a3141..292284b3c 100644 --- a/src/gui/GuiApplication.cpp +++ b/src/gui/GuiApplication.cpp @@ -79,6 +79,11 @@ GuiApplication* GuiApplication::instance() return s_instance; } +bool GuiApplication::isWayland() +{ + return QGuiApplication::platformName().contains("wayland"); +} + GuiApplication::GuiApplication()