diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,8 +19,11 @@ include(ECMOptionalAddSubdirectory) include(FindPkgConfig) -pkg_check_modules(GCONF REQUIRED gconf-2.0) -pkg_check_modules(GOBJECT REQUIRED gobject-2.0) +pkg_check_modules(GCONF gconf-2.0) +pkg_check_modules(GOBJECT gobject-2.0) +if (GCONF_FOUND AND GOBJECT_FOUND) + set(HAVE_GCONF TRUE) +endif() find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core @@ -41,6 +44,8 @@ find_package(Canberra REQUIRED) find_package(GLIB2 REQUIRED) +configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) + add_subdirectory(applet) add_subdirectory(src) add_subdirectory(data) diff --git a/config.h.cmake b/config.h.cmake new file mode 100644 --- /dev/null +++ b/config.h.cmake @@ -0,0 +1,3 @@ +/* config.h. Generated by cmake from config.h.cmake */ + +#cmakedefine01 HAVE_GCONF diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,4 @@ -include_directories(${PULSEAUDIO_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${GCONF_INCLUDE_DIRS} - ${GOBJECT_INCLUDE_DIRS}) +include_directories(${PULSEAUDIO_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR}) set(cpp_SRCS card.cpp @@ -15,7 +14,6 @@ sink.cpp sinkinput.cpp modulemanager.cpp - gconfitem.cpp source.cpp sourceoutput.cpp stream.cpp @@ -38,6 +36,11 @@ set_property(SOURCE qml/dbus/osdService.xml APPEND PROPERTY CLASSNAME OsdServiceInterface) qt5_add_dbus_interface(dbus_SRCS qml/dbus/osdService.xml osdservice) +if (HAVE_GCONF) + include_directories(${GCONF_INCLUDE_DIRS} ${GOBJECT_INCLUDE_DIRS}) + set(cpp_SRCS ${cpp_SRCS} gconfitem.cpp) +endif() + add_library(plasma-volume-declarative SHARED ${dbus_SRCS} ${cpp_SRCS} ${qml_SRCS}) target_link_libraries(plasma-volume-declarative Qt5::Core @@ -47,11 +50,16 @@ KF5::GlobalAccel ${PULSEAUDIO_LIBRARY} ${PULSEAUDIO_MAINLOOP_LIBRARY} - ${GCONF_LDFLAGS} - ${GOBJECT_LDFLAGS} ${CANBERRA_LIBRARIES} ) +if (HAVE_GCONF) + target_link_libraries(plasma-volume-declarative + ${GCONF_LDFLAGS} + ${GOBJECT_LDFLAGS} + ) +endif() + set(PRIVATE_QML_INSTALL_DIR ${QML_INSTALL_DIR}/org/kde/plasma/private/volume) install(TARGETS plasma-volume-declarative DESTINATION ${PRIVATE_QML_INSTALL_DIR}) install(FILES ${qml_SRCS} DESTINATION ${PRIVATE_QML_INSTALL_DIR}) diff --git a/src/kcm/package/contents/ui/Advanced.qml b/src/kcm/package/contents/ui/Advanced.qml --- a/src/kcm/package/contents/ui/Advanced.qml +++ b/src/kcm/package/contents/ui/Advanced.qml @@ -56,6 +56,7 @@ Header { Layout.fillWidth: true text: i18n("Advanced Output Configuration") + visible: moduleManager.settingsSupported } ModuleManager { @@ -71,6 +72,7 @@ checked: moduleManager.combineSinks onCheckedChanged: moduleManager.combineSinks = checked; enabled: moduleManager.loadedModules.indexOf("module-gconf") != -1 + visible: moduleManager.settingsSupported } CheckBox { @@ -81,14 +83,15 @@ checked: moduleManager.switchOnConnect onCheckedChanged: moduleManager.switchOnConnect = checked; enabled: moduleManager.loadedModules.indexOf("module-gconf") != -1 + visible: moduleManager.settingsSupported } Label { Layout.alignment: Qt.AlignHCenter enabled: false font.italic: true text: i18n("Requires 'module-gconf' PulseAudio module") - visible: moduleManager.loadedModules.indexOf("module-gconf") == -1 + visible: moduleManager.settingsSupported && moduleManager.loadedModules.indexOf("module-gconf") == -1 } } } diff --git a/src/modulemanager.h b/src/modulemanager.h --- a/src/modulemanager.h +++ b/src/modulemanager.h @@ -38,12 +38,15 @@ class ModuleManager : public QObject { Q_OBJECT + Q_PROPERTY(bool settingsSupported READ settingsSupported CONSTANT) Q_PROPERTY(bool combineSinks READ combineSinks WRITE setCombineSinks NOTIFY combineSinksChanged) Q_PROPERTY(bool switchOnConnect READ switchOnConnect WRITE setSwitchOnConnect NOTIFY switchOnConnectChanged) Q_PROPERTY(QStringList loadedModules READ loadedModules NOTIFY loadedModulesChanged) public: ModuleManager(QObject *parent = nullptr); ~ModuleManager(); + + bool settingsSupported() const; bool combineSinks() const; void setCombineSinks(bool combineSinks); bool switchOnConnect() const; diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp --- a/src/modulemanager.cpp +++ b/src/modulemanager.cpp @@ -21,20 +21,22 @@ #include "modulemanager.h" #include "module.h" +#include "../config.h" +#if HAVE_GCONF +#include "gconfitem.h" #define PA_GCONF_ROOT "/system/pulseaudio" #define PA_GCONF_PATH_MODULES PA_GCONF_ROOT"/modules" - -#include "gconfitem.h" +#endif #include namespace QPulseAudio { +#if HAVE_GCONF class GConfModule : public GConfItem { - Q_OBJECT public: GConfModule(const QString &configName, const QString &moduleName, QObject *parent); bool isEnabled() const; @@ -67,17 +69,21 @@ } set(QStringLiteral("locked"), false); } +#endif ModuleManager::ModuleManager(QObject *parent) : - QObject(parent), - m_combineSinks(new GConfModule(QStringLiteral("combine"), QStringLiteral("module-combine"), this)), - m_switchOnConnect(new GConfModule(QStringLiteral("switch-on-connect"), QStringLiteral("module-switch-on-connect"), this)), - m_deviceManager(new GConfModule(QStringLiteral("device-manager"), QStringLiteral("module-device-manager"), this)) + QObject(parent) { +#if HAVE_GCONF + m_combineSinks = new GConfModule(QStringLiteral("combine"), QStringLiteral("module-combine"), this); + m_switchOnConnect = new GConfModule(QStringLiteral("switch-on-connect"), QStringLiteral("module-switch-on-connect"), this); + m_deviceManager = new GConfModule(QStringLiteral("device-manager"), QStringLiteral("module-device-manager"), this); + connect(m_combineSinks, &GConfItem::subtreeChanged, this, &ModuleManager::combineSinksChanged); connect(m_switchOnConnect, &GConfItem::subtreeChanged, this, &ModuleManager::switchOnConnectChanged); connect(m_deviceManager, &GConfItem::subtreeChanged, this, &ModuleManager::switchOnConnectChanged); +#endif QTimer *updateModulesTimer = new QTimer(this); updateModulesTimer->setInterval(500); @@ -92,14 +98,31 @@ { }; +bool ModuleManager::settingsSupported() const +{ +#if HAVE_GCONF + return true; +#else + return false; +#endif +} + bool ModuleManager::combineSinks() const { +#if HAVE_GCONF return m_combineSinks->isEnabled(); +#else + return false; +#endif } void ModuleManager::setCombineSinks(bool combineSinks) { +#if HAVE_GCONF m_combineSinks->setEnabled(combineSinks); +#else + Q_UNUSED(combineSinks) +#endif } bool ModuleManager::switchOnConnect() const @@ -109,13 +132,21 @@ //Note on the first run m_deviceManager will appear to be disabled even though it's actually running //because there is no gconf entry, however m_switchOnConnect will only exist if set by Plasma PA //hence only check this entry +#if HAVE_GCONF return m_switchOnConnect->isEnabled() ; +#else + return false; +#endif } void ModuleManager::setSwitchOnConnect(bool switchOnConnect) { +#if HAVE_GCONF m_deviceManager->setEnabled(!switchOnConnect); m_switchOnConnect->setEnabled(switchOnConnect); +#else + Q_UNUSED(switchOnConnect) +#endif } QStringList ModuleManager::loadedModules() const @@ -134,5 +165,3 @@ } } - -#include "modulemanager.moc"