add_subdirectory(kirigami-filepicker)

add_definitions(-DTRANSLATION_DOMAIN="xdg-desktop-portal-kde")

include_directories(${Qt5PrintSupport_PRIVATE_INCLUDE_DIRS})

add_executable(xdg-desktop-portal-kde)

set(xdg_desktop_portal_kde_SRCS
    access.cpp
    accessdialog.cpp
    accessdialog.h
    access.h
    account.cpp
    account.h
    appchooser.cpp
    appchooserdialog.cpp
    appchooserdialog.h
    appchooser.h
    background.cpp
    background.h
    dbushelpers.cpp
    desktopportal.cpp
    desktopportal.h
    email.cpp
    email.h
    filechooser.cpp
    filechooser.h
    globalshortcuts.cpp
    inhibit.cpp
    inhibit.h
    notification.cpp
    notification.h
    notificationinhibition.cpp
    notificationinhibition.h
    outputsmodel.cpp
    print.cpp
    print.h
    quickdialog.cpp
    remotedesktop.cpp
    remotedesktopdialog.cpp
    remotedesktopdialog.h
    remotedesktop.h
    request.cpp
    request.h
    screencast.cpp
    screencast.h
    screencasting.cpp
    screencasting.h
    screencastwidget.cpp
    screencastwidget.h
    screenchooserdialog.cpp
    screenchooserdialog.h
    screenshot.cpp
    screenshotdialog.cpp
    screenshotdialog.h
    screenshot.h
    session.cpp
    session.h
    settings.cpp
    settings.h
    userinfodialog.cpp
    userinfodialog.h
    utils.cpp
    utils.h
    waylandintegration.cpp
    waylandintegration.h
    waylandintegration_p.h
    xdg-desktop-portal-kde.cpp
    resources.qrc
    portalicon.cpp
    dynamiclauncher.cpp
    dynamiclauncherdialog.cpp
    xdgshortcut.cpp
)

ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeBackground"
    CATEGORY_NAME "xdp-kde-background"
    HEADER background_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Background"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeNotificationInhibition"
    CATEGORY_NAME "xdp-kde-notificationinhibition"
    HEADER notificationinhibition_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Notification Inhibition"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeAccess"
    CATEGORY_NAME "xdp-kde-access"
    HEADER access_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Access"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeAccount"
    CATEGORY_NAME "xdp-kde-account"
    HEADER account_debug.h)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeSettings"
    CATEGORY_NAME "xdp-kde-settings"
    HEADER settings_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Settings"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeAppChooser"
    CATEGORY_NAME "xdp-kde-app-chooser"
    HEADER appchooser_debug.h
    DESCRIPTION "XDG Desktop Portal KDE App Chooser"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeDesktopPortal"
    CATEGORY_NAME "xdp-kde-desktop-portal"
    HEADER desktopportal_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Desktop Portal"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeDynamicLauncher"
    CATEGORY_NAME "xdp-kde-dynamic-launcher"
    HEADER dynamiclauncher_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Dynamic Launcher"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeDynamicLauncherDialog"
    CATEGORY_NAME "xdp-kde-dynamic-launcher-dialog"
    HEADER dynamiclauncherdialog_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Dynamic Launcher Dialog"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeEmail"
    CATEGORY_NAME "xdp-kde-email"
    HEADER email_debug.h
    DESCRIPTION "XDG Desktop Portal KDE e-mail"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeFileChooser"
    CATEGORY_NAME "xdp-kde-file-chooser"
    HEADER filechooser_debug.h
    DESCRIPTION "XDG Desktop Portal KDE File Chooser"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeInhibit"
    CATEGORY_NAME "xdp-kde-inhibit"
    HEADER inhibit_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Inhibit"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeNotification"
    CATEGORY_NAME "xdp-kde-notification"
    HEADER notification_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Notification"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdePrint"
    CATEGORY_NAME "xdp-kde-print"
    HEADER print_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Print"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeRemoteDesktop"
    CATEGORY_NAME "xdp-kde-remotedesktop"
    HEADER remotedesktop_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Remote Desktop"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeRemoteDesktopDialog"
    CATEGORY_NAME "xdp-kde-remote-desktop-dialog"
    HEADER remotedesktopdialog_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Remote Desktop Dialog"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgRequestKdeRequest"
    CATEGORY_NAME "xdp-kde-request"
    HEADER request_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Request"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeScreenCast"
    CATEGORY_NAME "xdp-kde-screencast"
    HEADER screencast_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Screencast"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeScreenshot"
    CATEGORY_NAME "xdp-kde-screenshot"
    HEADER screenshot_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Screenshot"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeScreenshotDialog"
    CATEGORY_NAME "xdp-kde-screenshot-dialog"
    HEADER screenshotdialog_debug.h)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgSessionKdeSession"
    CATEGORY_NAME "xdp-kde-session"
    HEADER session_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Session"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKde"
    CATEGORY_NAME "xdp-kde"
    HEADER debug.h
    DESCRIPTION "XDG Desktop Portal KDE Generic"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeWaylandIntegration"
    CATEGORY_NAME "xdp-kde-wayland-integration"
    HEADER waylandintegration_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Wayland"
    EXPORT XDPKDE
)
ecm_qt_declare_logging_category(xdg_desktop_portal_kde_SRCS
    IDENTIFIER "XdgDesktopPortalKdeAccessDialog"
    CATEGORY_NAME "xdp-kde-access-dialog"
    HEADER accessdialog_debug.h
    DESCRIPTION "XDG Desktop Portal KDE Access Dialog"
    EXPORT XDPKDE
)

set(kglobalaccel_xml ${KGLOBALACCEL_DBUS_INTERFACES_DIR}/kf5_org.kde.KGlobalAccel.xml)
set_source_files_properties(${kglobalaccel_xml} PROPERTIES
    INCLUDE "kglobalaccel.h"
    NO_NAMESPACE TRUE
    CLASSNAME "KGlobalAccelInterface"
)
qt_add_dbus_interface(xdg_desktop_portal_kde_SRCS ${kglobalaccel_xml} kglobalaccel_interface)

set(kglobalaccel_component_xml ${KGLOBALACCEL_DBUS_INTERFACES_DIR}/kf5_org.kde.kglobalaccel.Component.xml)
set_source_files_properties(${kglobalaccel_component_xml} PROPERTIES
    INCLUDE "kglobalshortcutinfo.h"
    NO_NAMESPACE TRUE
    CLASSNAME "KGlobalAccelComponentInterface"
)
qt_add_dbus_interface(xdg_desktop_portal_kde_SRCS ${kglobalaccel_component_xml} kglobalaccel_component_interface)

if (QT_MAJOR_VERSION EQUAL "5")
    ecm_add_qtwayland_client_protocol(xdg_desktop_portal_kde_SRCS
        PROTOCOL ${PLASMA_WAYLAND_PROTOCOLS_DIR}/zkde-screencast-unstable-v1.xml
        BASENAME zkde-screencast-unstable-v1
    )
    ecm_add_qtwayland_client_protocol(xdg_desktop_portal_kde_SRCS
        PROTOCOL ${Wayland_DATADIR}/wayland.xml
        BASENAME wayland
    )
else()
    qt6_generate_wayland_protocol_client_sources(xdg-desktop-portal-kde FILES ${PLASMA_WAYLAND_PROTOCOLS_DIR}/zkde-screencast-unstable-v1.xml)
    qt6_generate_wayland_protocol_client_sources(xdg-desktop-portal-kde FILES ${Wayland_DATADIR}/wayland.xml)
endif()


set_source_files_properties(../data/org.freedesktop.Accounts.User.xml PROPERTIES NO_NAMESPACE TRUE)
qt_add_dbus_interface(xdg_desktop_portal_kde_SRCS ../data/org.freedesktop.Accounts.User.xml user_interface)

set_source_files_properties(../data/org.freedesktop.portal.Documents.xml PROPERTIES NO_NAMESPACE TRUE)
qt_add_dbus_interface(xdg_desktop_portal_kde_SRCS ../data/org.freedesktop.portal.Documents.xml documents_interface)

set_source_files_properties(../data/org.kde.KIOFuse.VFS.xml PROPERTIES NO_NAMESPACE TRUE)
qt_add_dbus_interface(xdg_desktop_portal_kde_SRCS ../data/org.kde.KIOFuse.VFS.xml fuse_interface)

qt_add_dbus_interface(xdg_desktop_portal_kde_SRCS ../data/org.freedesktop.Application.xml fdo_application_interface)

target_sources(xdg-desktop-portal-kde PRIVATE ${xdg_desktop_portal_kde_SRCS})

target_link_libraries(xdg-desktop-portal-kde
    Qt::Core
    Qt::GuiPrivate
    Qt::DBus
    Qt::Concurrent
    Qt::PrintSupport
    Qt::QuickWidgets
    Qt::Widgets
    Qt::WaylandClient
    KF5::CoreAddons
    KF5::ConfigCore
    KF5::Declarative
    KF5::GlobalAccel
    KF5::GuiAddons
    KF5::I18n
    KF5::KIOFileWidgets
    KF5::Notifications
    KF5::Service
    KF5::WaylandClient
    KF5::WidgetsAddons
    KF5::WindowSystem
    KF5::IconThemes
    KirigamiFilepicker
    Wayland::Client
    PkgConfig::XKB
)
if (QT_MAJOR_VERSION EQUAL "6")
    target_link_libraries(xdg-desktop-portal-kde Qt::PrintSupportPrivate Qt::GuiPrivate)
elseif (QT_MAJOR_VERSION EQUAL "5")
    target_link_libraries(xdg-desktop-portal-kde Qt::XkbCommonSupportPrivate)
endif()

install(TARGETS xdg-desktop-portal-kde DESTINATION ${KDE_INSTALL_LIBEXECDIR})

install(FILES
    xdg-desktop-portal-kde.notifyrc
    DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})

ecm_qt_install_logging_categories(EXPORT XDPKDE FILE xdp-kde.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR})
