diff --git a/kcms/style/CMakeLists.txt b/kcms/style/CMakeLists.txt --- a/kcms/style/CMakeLists.txt +++ b/kcms/style/CMakeLists.txt @@ -21,6 +21,8 @@ add_library(kcm_style MODULE ${kcm_style_PART_SRCS}) +target_compile_definitions(kcm_style PUBLIC CMAKE_INSTALL_FULL_LIBEXECDIR="${CMAKE_INSTALL_FULL_LIBEXECDIR}") + target_link_libraries(kcm_style Qt5::X11Extras Qt5::DBus diff --git a/kcms/style/gtkpage.h b/kcms/style/gtkpage.h --- a/kcms/style/gtkpage.h +++ b/kcms/style/gtkpage.h @@ -45,6 +45,9 @@ QString gtk2ThemeFromConfig(); QString gtk3ThemeFromConfig(); + bool gtk2PreviewAvailable(); + bool gtk3PreviewAvailable(); + void showGtk2Preview(); void showGtk3Preview(); diff --git a/kcms/style/gtkpage.cpp b/kcms/style/gtkpage.cpp --- a/kcms/style/gtkpage.cpp +++ b/kcms/style/gtkpage.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -69,6 +70,16 @@ return dbusReply.value(); } +bool GtkPage::gtk2PreviewAvailable() +{ + return !QStandardPaths::findExecutable(QStringLiteral("gtk_preview"), {CMAKE_INSTALL_FULL_LIBEXECDIR}).isEmpty(); +} + +bool GtkPage::gtk3PreviewAvailable() +{ + return !QStandardPaths::findExecutable(QStringLiteral("gtk3_preview"), {CMAKE_INSTALL_FULL_LIBEXECDIR}).isEmpty(); +} + void GtkPage::showGtk2Preview() { gtkConfigInterface.call(QStringLiteral("showGtk2ThemePreview"), m_gtk2ThemesModel->selectedTheme()); diff --git a/kcms/style/package/contents/ui/GtkStylePage.qml b/kcms/style/package/contents/ui/GtkStylePage.qml --- a/kcms/style/package/contents/ui/GtkStylePage.qml +++ b/kcms/style/package/contents/ui/GtkStylePage.qml @@ -89,6 +89,7 @@ icon.name: "preview" text: i18n("Preview...") onClicked: kcm.gtkPage.showGtk2Preview() + visible: kcm.gtkPage.gtk2PreviewAvailable() } } } @@ -128,6 +129,7 @@ icon.name: "preview" text: i18n("Preview...") onClicked: kcm.gtkPage.showGtk3Preview() + visible: kcm.gtkPage.gtk3PreviewAvailable() } }