set(lattedock-app_SRCS
    alternativeshelper.cpp
    apptypes.cpp
    infoview.cpp
    knscompat.cpp
    lattecorona.cpp
    declarativeimports/interfaces.cpp
    screenpool.cpp
    primaryoutputwatcher.cpp
    main.cpp
    coretypes.h
)

add_subdirectory(data)
add_subdirectory(declarativeimports)
add_subdirectory(indicator)
add_subdirectory(layout)
add_subdirectory(layouts)
add_subdirectory(package)
add_subdirectory(plasma/extended)
add_subdirectory(settings)
add_subdirectory(settings/generic)
add_subdirectory(settings/actionsdialog)
add_subdirectory(settings/detailsdialog)
add_subdirectory(settings/detailsdialog/delegates)
add_subdirectory(settings/exporttemplatedialog)
add_subdirectory(settings/exporttemplatedialog/delegates)
add_subdirectory(settings/screensdialog)
add_subdirectory(settings/screensdialog/delegates)
add_subdirectory(settings/settingsdialog)
add_subdirectory(settings/settingsdialog/delegates)
add_subdirectory(settings/viewsdialog)
add_subdirectory(settings/viewsdialog/delegates)
add_subdirectory(shortcuts)
add_subdirectory(templates)
add_subdirectory(tools)
add_subdirectory(view)
add_subdirectory(view/helpers)
add_subdirectory(view/indicator)
add_subdirectory(view/settings)
add_subdirectory(view/windowstracker)
add_subdirectory(wm)
add_subdirectory(wm/tracker)

set(latte_dbusXML dbus/org.kde.LatteDock.xml)
qt_add_dbus_adaptor(lattedock-app_SRCS ${latte_dbusXML} lattecorona.h Latte::Corona lattedockadaptor)

ki18n_wrap_ui(lattedock-app_SRCS settings/actionsdialog/actionsdialog.ui)
ki18n_wrap_ui(lattedock-app_SRCS settings/detailsdialog/detailsdialog.ui)
ki18n_wrap_ui(lattedock-app_SRCS settings/exporttemplatedialog/exporttemplatedialog.ui)
ki18n_wrap_ui(lattedock-app_SRCS settings/screensdialog/screensdialog.ui)
ki18n_wrap_ui(lattedock-app_SRCS settings/settingsdialog/settingsdialog.ui)
ki18n_wrap_ui(lattedock-app_SRCS settings/viewsdialog/viewsdialog.ui)

ecm_add_qtwayland_client_protocol(lattedock-app_SRCS
    PROTOCOL ${PLASMA_WAYLAND_PROTOCOLS_DIR}/kde-primary-output-v1.xml
    BASENAME kde-primary-output-v1
)

# Plasma 6 KWin no longer advertises kde_primary_output_v1; kde_output_order_v1
# replaces it (compositor sends the desktop output order; first entry is the
# logical primary). Bind both so we work on old and new sessions.
ecm_add_qtwayland_client_protocol(lattedock-app_SRCS
    PROTOCOL ${PLASMA_WAYLAND_PROTOCOLS_DIR}/kde-output-order-v1.xml
    BASENAME kde-output-order-v1
)

add_executable(latte-dock-ng ${lattedock-app_SRCS})
qt_add_resources(latte-dock-ng "paneltracker" PREFIX "/latte" FILES wm/plasmapaneltracker.js)
add_executable(latte-dock-ng-add-launcher launcherhelper.cpp)

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16)
    # GCC 16 flags Qt 6 QMetaType's intentional incomplete-type SFINAE probe
    # when the generated moc aggregate later includes Latte::View's definition.
    # Keep the workaround on this generated translation unit only; remove it
    # when that Qt probe or GCC diagnostic no longer produces the false positive.
    set_source_files_properties(
        "${CMAKE_CURRENT_BINARY_DIR}/latte-dock-ng_autogen/mocs_compilation.cpp"
        PROPERTIES COMPILE_OPTIONS "-Wno-sfinae-incomplete"
    )
endif()

# The private.app QML plugin is hosted by this executable and resolves its
# application-facing type dependencies from the exported process symbols.
set_target_properties(latte-dock-ng PROPERTIES
    ENABLE_EXPORTS TRUE
    CXX_VISIBILITY_PRESET default
)

if(LATTE_LAYERSHELL_HAS_SET_SCREEN)
    target_compile_definitions(latte-dock-ng PRIVATE LATTE_LAYERSHELL_HAS_SET_SCREEN)
endif()
if(LATTE_LAYERSHELL_HAS_DESIRED_SIZE)
    target_compile_definitions(latte-dock-ng PRIVATE LATTE_LAYERSHELL_HAS_DESIRED_SIZE)
endif()

include(FakeTarget.cmake)

target_link_libraries(latte-dock-ng
    latteLogging
    Qt6::DBus
    Qt6::Widgets
    Qt6::Quick
    Qt6::Qml
    Plasma::Activities
    KF6::Archive
    KF6::CoreAddons
    KF6::Crash
    KF6::DBusAddons
    ${LATTE_DECLARATIVE_TARGET}
    KF6::GuiAddons
    KF6::GlobalAccel
    KF6::I18n
    KF6::IconThemes
    KF6::IconWidgets
    KF6::KIOWidgets
    KF6::Notifications
    KF6::Package
    ${LATTE_CONFIGQML_TARGET}
    ${LATTE_NEWSTUFF_TARGET}
    ${LATTE_QUICKADDONS_TARGET}
    ${LATTE_SVG_TARGET}
    Plasma::Plasma
    Plasma::PlasmaQuick
    ${LATTE_WAYLANDCLIENT_TARGET}
    KF6::WindowSystem
    KF6::XmlGui
    Wayland::Client
    LayerShellQt::Interface
)

target_link_libraries(latte-dock-ng-add-launcher Qt6::Core Qt6::DBus)

configure_file(org.kde.latte-dock.desktop.cmake org.kde.latte-dock.desktop)
configure_file(org.kde.latte-dock.kickeractions.desktop.cmake org.kde.latte-dock.kickeractions.desktop)
configure_file(org.kde.latte-dock.appdata.xml.cmake org.kde.latte-dock.appdata.xml)

set(latte_kickeraction_permissions OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
if(LATTE_INSTALL_USER_KICKERACTION_EXECUTABLE)
    list(APPEND latte_kickeraction_permissions OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
endif()

install(TARGETS latte-dock-ng ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
install(TARGETS latte-dock-ng-add-launcher ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.latte-dock.desktop DESTINATION ${KDE_INSTALL_APPDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.latte-dock.kickeractions.desktop
        DESTINATION ${KDE_INSTALL_DATADIR}/plasma/kickeractions
        PERMISSIONS ${latte_kickeraction_permissions})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.latte-dock.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
install(FILES dbus/org.kde.LatteDock.xml DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR})
install(FILES lattedock.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})
install(FILES latte-layouts.knsrc DESTINATION  ${KDE_INSTALL_KNSRCDIR})
install(FILES latte-indicators.knsrc DESTINATION  ${KDE_INSTALL_KNSRCDIR})


add_subdirectory(packageplugins)
