From 55ce90ec00ca82891580408e83cac23fbb9ea9d7 Mon Sep 17 00:00:00 2001 From: Hyunin Song Date: Sat, 18 Nov 2017 15:16:44 +0900 Subject: [PATCH] Try to improve embedding method logic --- include/ConfigManager.h | 1 + src/core/ConfigManager.cpp | 31 +++++++++++++++++++++++-------- src/gui/SetupDialog.cpp | 23 ++++++++++++----------- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/include/ConfigManager.h b/include/ConfigManager.h index 3e5c0578f..74cb29c17 100644 --- a/include/ConfigManager.h +++ b/include/ConfigManager.h @@ -210,6 +210,7 @@ public: return m_recentlyOpenedProjects; } + static QStringList availabeVstEmbedMethods(); QString vstEmbedMethod() const; // returns true if the working dir (e.g. ~/lmms) exists on disk diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp index 8cbee6acf..481979960 100644 --- a/src/core/ConfigManager.cpp +++ b/src/core/ConfigManager.cpp @@ -190,19 +190,34 @@ QString ConfigManager::defaultVersion() const return LMMS_VERSION; } -QString ConfigManager::vstEmbedMethod() const +QStringList ConfigManager::availabeVstEmbedMethods() { - QString defaultMethod = "qt"; + QStringList methods; + methods.append("none"); +#if QT_VERSION >= 0x050100 + methods.append("qt"); +#endif +#ifdef LMMS_BUILD_WIN32 + methods.append("win32"); +#endif #ifdef LMMS_BUILD_LINUX - if (QX11Info::isPlatformX11()) { - defaultMethod = "xembed"; +#if QT_VERSION >= 0x050000 + if (static_cast(QApplication::instance())-> + platformName() == "xcb") +#else + if (qgetenv("QT_QPA_PLATFORM").isNull() + || qgetenv("QT_QPA_PLATFORM") == "xcb") +#endif + { + methods.append("xembed"); } #endif + return methods; +} -#ifdef LMMS_BUILD_WIN32 - defaultMethod = "win32"; -#endif - +QString ConfigManager::vstEmbedMethod() const +{ + QString defaultMethod = *(availabeVstEmbedMethods().end() - 1); return value( "ui", "vstembedmethod", defaultMethod ); } diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index 14355f894..e248b40a9 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -342,20 +342,21 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : embed_tw->setFixedHeight( 48 ); m_vstEmbedComboBox = new QComboBox( embed_tw ); m_vstEmbedComboBox->move( XDelta, YDelta ); + + QStringList embedMethods = ConfigManager::availabeVstEmbedMethods(); m_vstEmbedComboBox->addItem( tr( "No embedding" ), "none" ); -#if QT_VERSION >= 0x050100 - m_vstEmbedComboBox->addItem( tr( "Embed using Qt API" ), "qt" ); -#endif - -#ifdef LMMS_BUILD_WIN32 - m_vstEmbedComboBox->addItem( tr( "Embed using native Win32 API" ), "win32" ); -#endif - -#ifdef LMMS_BUILD_LINUX - if ( QX11Info::isPlatformX11() ) { + if( embedMethods.contains("qt") ) + { + m_vstEmbedComboBox->addItem( tr( "Embed using Qt API" ), "qt" ); + } + if( embedMethods.contains("win32") ) + { + m_vstEmbedComboBox->addItem( tr( "Embed using native Win32 API" ), "win32" ); + } + if( embedMethods.contains("xembed") ) + { m_vstEmbedComboBox->addItem( tr( "Embed using XEmbed protocol" ), "xembed" ); } -#endif m_vstEmbedComboBox->setCurrentIndex( m_vstEmbedComboBox->findData( m_vstEmbedMethod ) ); TabWidget * lang_tw = new TabWidget( tr( "LANGUAGE" ), general );