diff --git a/graphics/spectacle/Makefile b/graphics/spectacle/Makefile --- a/graphics/spectacle/Makefile +++ b/graphics/spectacle/Makefile @@ -17,7 +17,7 @@ xorg USE_KDE= attica auth codecs completion config configwidgets coreaddons \ dbusaddons globalaccel guiaddons i18n jobwidgets kdeclarative \ - kio kpipewire libkipi newstuff notifications package purpose \ + kio libkipi newstuff notifications package purpose \ service solid wayland widgetsaddons windowsystem xmlgui \ doctools:build ecm:build USE_QT= concurrent core dbus declarative gui network printsupport \ @@ -25,6 +25,11 @@ buildtools:build qmake:build testlib:build USE_XORG= x11 xcb xext xfixes -OPTIONS_DEFINE= DOCS +OPTIONS_DEFINE= DOCS PIPEWIRE +OPTIONS_DEFAULT= PIPEWIRE +PIPEWIRE_DESC= Screen capture via PipeWire +PIPEWIRE_USE= KDE=kpipewire +PIPEWIRE_CMAKE_BOOL_OFF= DISABLE_PIPEWIRE +PIPEWIRE_EXTRA_PATCHES_OFF= ${FILESDIR}/extra-patch-pipewire-off .include diff --git a/graphics/spectacle/files/extra-patch-pipewire-off b/graphics/spectacle/files/extra-patch-pipewire-off new file mode 100644 --- /dev/null +++ b/graphics/spectacle/files/extra-patch-pipewire-off @@ -0,0 +1,87 @@ +diff -ur CMakeLists.txt.orig CMakeLists.txt +--- CMakeLists.txt.orig ++++ CMakeLists.txt +@@ -74,10 +74,16 @@ + if (QT_MAJOR_VERSION EQUAL "5") + find_package(QtWaylandScanner REQUIRED) + endif() +-find_package(KPipeWire) ++option(DISABLE_PIPEWIRE "Disable PipeWire support." OFF) ++if(NOT DISABLE_PIPEWIRE) ++ find_package(KPipeWire REQUIRED) ++ if(KPipeWire_FOUND) ++ set(PIPEWIRE_FOUND 1) ++ endif() ++endif() + set_package_properties(KPipeWire PROPERTIES DESCRIPTION + "Used to record pipewire streams into a file" +- TYPE REQUIRED ++ TYPE OPTIONAL + ) + + # optional components +diff -ur src/CMakeLists.txt.orig src/CMakeLists.txt +--- src/CMakeLists.txt.orig ++++ src/CMakeLists.txt +@@ -9,6 +9,10 @@ + ecm_qt_declare_logging_category(SPECTACLE_SRCS HEADER spectacle_core_debug.h IDENTIFIER SPECTACLE_CORE_LOG CATEGORY_NAME org.kde.spectacle.core DESCRIPTION "spectacle (core)" EXPORT SPECTACLE) + ecm_qt_declare_logging_category(SPECTACLE_SRCS HEADER spectacle_gui_debug.h IDENTIFIER SPECTACLE_GUI_LOG CATEGORY_NAME org.kde.spectacle.gui DESCRIPTION "spectacle (gui)" EXPORT SPECTACLE) + ++if(PIPEWIRE_FOUND) ++ list(APPEND SPECTACLE_SRCS Platforms/VideoPlatformWayland.cpp) ++endif() ++ + add_executable(spectacle + ${SPECTACLE_SRCS} + Main.cpp +@@ -44,7 +48,6 @@ + Platforms/PlatformKWinWayland.cpp + Platforms/PlatformKWinWayland2.cpp + Platforms/VideoPlatform.cpp +- Platforms/VideoPlatformWayland.cpp + Platforms/screencasting.cpp + + ../resources.qrc +@@ -83,6 +86,10 @@ + + ki18n_wrap_ui(spectacle Gui/SettingsDialog/GeneralOptions.ui Gui/SettingsDialog/SaveOptions.ui) + ++if(PIPEWIRE_FOUND) ++ target_link_libraries(spectacle K::KPipeWireRecord) ++endif() ++ + target_link_libraries( + spectacle + Qt::Concurrent +@@ -106,7 +113,6 @@ + KF${QT_MAJOR_VERSION}::XmlGui + KF${QT_MAJOR_VERSION}::GuiAddons + KF${QT_MAJOR_VERSION}::Kirigami2 +- K::KPipeWireRecord + Wayland::Client + ) + +diff -ur src/Platforms/PlatformLoader.cpp src/Platforms/PlatformLoader.cpp +--- src/Platforms/PlatformLoader.cpp ++++ src/Platforms/PlatformLoader.cpp +@@ -10,7 +10,9 @@ + #include "PlatformKWinWayland.h" + #include "PlatformKWinWayland2.h" + #include "PlatformNull.h" ++#ifdef PIPEWIRE_FOUND + #include "VideoPlatformWayland.h" ++#endif + + #ifdef XCB_FOUND + #include "PlatformXcb.h" +@@ -44,8 +46,10 @@ + + VideoPlatformPtr loadVideoPlatform() + { ++#ifdef PIPEWIRE_FOUND + if (KWindowSystem::isPlatformWayland()) { + return std::make_unique(); + } ++#endif + return std::make_unique(); + }