diff --git a/.gitignore b/.gitignore index 8902fe4..e93540d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build/ build-cmake/ +build-kf5/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 598da6b..9070687 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,13 @@ -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.16) project(kde-ollie VERSION 0.1.0 LANGUAGES CXX) +option(OLLIE_KF5 "Build against KF5/Qt5 (Plasma 5.27)" OFF) + +# Suppress CMP0160 warnings from KF5 cmake files (read-only IMPORTED property) +if(OLLIE_KF5) + cmake_policy(SET CMP0160 OLD) +endif() + set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) @@ -14,100 +21,189 @@ include(KDECompilerSettings NO_POLICY_SCOPE) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -find_package(Qt6 REQUIRED COMPONENTS Core DBus Widgets Quick) -find_package(KF6StatusNotifierItem REQUIRED) -find_package(KF6 REQUIRED COMPONENTS Runner Notifications CoreAddons Config) -find_package(Plasma REQUIRED) - # libollie.so built by Go (expected in build/ after `make lib`) set(OLLIE_LIB "${CMAKE_SOURCE_DIR}/build/libollie.so") set(OLLIE_HEADER "${CMAKE_SOURCE_DIR}/build/libollie.h") -# --- Daemon --- +if(OLLIE_KF5) + # --- Qt5 / KF5 --- + find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Quick Qml) + find_package(KF5 REQUIRED COMPONENTS + Notifications + Runner + CoreAddons + Config + Plasma + TextEditor + ) -qt6_add_dbus_adaptor(DBUS_ADAPTOR_SRCS - daemon/org.ollie.SessionManager.xml - daemon/session_manager.h SessionManager) + # --- Daemon --- + qt5_add_dbus_adaptor(DBUS_ADAPTOR_SRCS + daemon/org.ollie.SessionManager.xml + daemon/session_manager.h SessionManager) -add_executable(ollie-kde - daemon/main.cpp - daemon/session_manager.cpp - ${DBUS_ADAPTOR_SRCS} -) -target_include_directories(ollie-kde PRIVATE - ${CMAKE_SOURCE_DIR}/build - ${CMAKE_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} -) -target_link_libraries(ollie-kde - Qt6::Core - Qt6::DBus - ${OLLIE_LIB} -) + add_executable(ollie-kde + daemon/main.cpp + daemon/session_manager.cpp + ${DBUS_ADAPTOR_SRCS} + ) + target_include_directories(ollie-kde PRIVATE + ${CMAKE_SOURCE_DIR}/build + ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ) + target_link_libraries(ollie-kde + Qt5::Core + Qt5::DBus + ${OLLIE_LIB} + ) -# --- System Tray --- + # --- System Tray --- + add_executable(ollie-tray + tray/main.cpp + tray/ollie_tray.cpp + ) + target_include_directories(ollie-tray PRIVATE + ${CMAKE_SOURCE_DIR} + ) + target_link_libraries(ollie-tray + Qt5::Core + Qt5::DBus + Qt5::Widgets + KF5::Notifications + ) -add_executable(ollie-tray - tray/main.cpp - tray/ollie_tray.cpp -) -target_include_directories(ollie-tray PRIVATE - ${CMAKE_SOURCE_DIR} -) -target_link_libraries(ollie-tray - Qt6::Core - Qt6::DBus - Qt6::Widgets - KF6::StatusNotifierItem -) + # --- KRunner Plugin --- + kcoreaddons_add_plugin(krunner_ollie SOURCES krunner/ollie_runner.cpp INSTALL_NAMESPACE "kf5/krunner") + target_link_libraries(krunner_ollie + KF5::Runner + Qt5::Core + Qt5::DBus + Qt5::Widgets + ) -# --- KRunner Plugin --- + # --- Kate Plugin --- + kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp INSTALL_NAMESPACE "kf5/ktexteditor") + target_link_libraries(ollie_kate + KF5::TextEditor + Qt5::Core + Qt5::DBus + Qt5::Widgets + ) -kcoreaddons_add_plugin(krunner_ollie SOURCES krunner/ollie_runner.cpp INSTALL_NAMESPACE "kf6/krunner") -target_link_libraries(krunner_ollie - KF6::Runner - Qt6::Core - Qt6::DBus - Qt6::Widgets -) - -# --- Kate Plugin --- - -find_package(KF6TextEditor REQUIRED) - -kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp INSTALL_NAMESPACE "kf6/ktexteditor") -target_link_libraries(ollie_kate - KF6::TextEditor - Qt6::Core - Qt6::DBus - Qt6::Widgets -) - -# --- Plasmoid QML Plugin --- - -qt6_add_qml_module(ollie-plasmoid-plugin - URI org.ollie.private - VERSION 1.0 - SOURCES - plasmoid/plugin/olliedbusclient.h + # --- Plasmoid QML Plugin (manual for Qt5) --- + add_library(ollie-plasmoid-plugin SHARED plasmoid/plugin/olliedbusclient.cpp - OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/org/ollie/private -) -target_link_libraries(ollie-plasmoid-plugin PRIVATE - Qt6::Core - Qt6::DBus - Qt6::Quick -) -target_include_directories(ollie-plasmoid-plugin PRIVATE - ${CMAKE_SOURCE_DIR}/plasmoid/plugin -) + plasmoid/plugin/qmlplugin.cpp + ) + target_link_libraries(ollie-plasmoid-plugin + Qt5::Core + Qt5::DBus + Qt5::Quick + Qt5::Qml + ) + target_include_directories(ollie-plasmoid-plugin PRIVATE + ${CMAKE_SOURCE_DIR}/plasmoid/plugin + ) + set_target_properties(ollie-plasmoid-plugin PROPERTIES + OUTPUT_NAME "ollieprivateplugin" + ) -# --- Plasmoid Package --- + # --- Plasmoid Package --- + plasma_install_package(plasmoid org.ollie.plasmoid) -plasma_install_package(plasmoid org.ollie.plasmoid) + # --- Install --- + install(TARGETS ollie-kde ollie-tray DESTINATION ${KDE_INSTALL_BINDIR}) + install(TARGETS ollie-plasmoid-plugin + DESTINATION ${KDE_INSTALL_QMLDIR}/org/ollie/private) + install(FILES plasmoid/plugin/qmldir + DESTINATION ${KDE_INSTALL_QMLDIR}/org/ollie/private) -# --- Install --- +else() + # --- Qt6 / KF6 --- + find_package(Qt6 REQUIRED COMPONENTS Core DBus Widgets Quick) + find_package(KF6StatusNotifierItem REQUIRED) + find_package(KF6 REQUIRED COMPONENTS Runner Notifications CoreAddons Config) + find_package(Plasma REQUIRED) -install(TARGETS ollie-kde ollie-tray DESTINATION ${KDE_INSTALL_BINDIR}) -install(TARGETS ollie-plasmoid-plugin - DESTINATION ${KDE_INSTALL_QMLDIR}/org/ollie/private) + # --- Daemon --- + qt6_add_dbus_adaptor(DBUS_ADAPTOR_SRCS + daemon/org.ollie.SessionManager.xml + daemon/session_manager.h SessionManager) + + add_executable(ollie-kde + daemon/main.cpp + daemon/session_manager.cpp + ${DBUS_ADAPTOR_SRCS} + ) + target_include_directories(ollie-kde PRIVATE + ${CMAKE_SOURCE_DIR}/build + ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ) + target_link_libraries(ollie-kde + Qt6::Core + Qt6::DBus + ${OLLIE_LIB} + ) + + # --- System Tray --- + add_executable(ollie-tray + tray/main.cpp + tray/ollie_tray.cpp + ) + target_include_directories(ollie-tray PRIVATE + ${CMAKE_SOURCE_DIR} + ) + target_link_libraries(ollie-tray + Qt6::Core + Qt6::DBus + Qt6::Widgets + KF6::StatusNotifierItem + ) + + # --- KRunner Plugin --- + kcoreaddons_add_plugin(krunner_ollie SOURCES krunner/ollie_runner.cpp INSTALL_NAMESPACE "kf6/krunner") + target_link_libraries(krunner_ollie + KF6::Runner + Qt6::Core + Qt6::DBus + Qt6::Widgets + ) + + # --- Kate Plugin --- + find_package(KF6TextEditor REQUIRED) + kcoreaddons_add_plugin(ollie_kate SOURCES kate/ollie_kate.cpp INSTALL_NAMESPACE "kf6/ktexteditor") + target_link_libraries(ollie_kate + KF6::TextEditor + Qt6::Core + Qt6::DBus + Qt6::Widgets + ) + + # --- Plasmoid QML Plugin --- + qt6_add_qml_module(ollie-plasmoid-plugin + URI org.ollie.private + VERSION 1.0 + SOURCES + plasmoid/plugin/olliedbusclient.h + plasmoid/plugin/olliedbusclient.cpp + OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/org/ollie/private + ) + target_link_libraries(ollie-plasmoid-plugin PRIVATE + Qt6::Core + Qt6::DBus + Qt6::Quick + ) + target_include_directories(ollie-plasmoid-plugin PRIVATE + ${CMAKE_SOURCE_DIR}/plasmoid/plugin + ) + + # --- Plasmoid Package --- + plasma_install_package(plasmoid org.ollie.plasmoid) + + # --- Install --- + install(TARGETS ollie-kde ollie-tray DESTINATION ${KDE_INSTALL_BINDIR}) + install(TARGETS ollie-plasmoid-plugin + DESTINATION ${KDE_INSTALL_QMLDIR}/org/ollie/private) +endif() diff --git a/Makefile b/Makefile index d23a975..e027e3a 100644 --- a/Makefile +++ b/Makefile @@ -23,12 +23,11 @@ daemon: lib cmake --build $(BUILD_DIR) # Step 2b: Build using KF5/Qt5 (for Plasma 5.27) +KF5_BUILD_DIR := build-kf5 + kf5: lib - @cp CMakeLists.txt CMakeLists.txt.kf6.bak && \ - trap 'mv -f CMakeLists.txt.kf6.bak CMakeLists.txt' EXIT && \ - cp CMakeLists-kf5.txt CMakeLists.txt && \ - cmake -B $(BUILD_DIR) -S . --fresh && \ - cmake --build $(BUILD_DIR) + cmake -B $(KF5_BUILD_DIR) -S . -DOLLIE_KF5=ON + cmake --build $(KF5_BUILD_DIR) # --- KF6 Install (default) --- @@ -133,21 +132,21 @@ plasmoid-uninstall: kf5-install: kf5 @echo "=== Installing ollie-kde (KF5) ===" # Daemon + tray binaries - install -m755 $(BUILD_DIR)/ollie-kde /usr/bin/ - install -m755 $(BUILD_DIR)/ollie-tray /usr/bin/ + install -m755 $(KF5_BUILD_DIR)/ollie-kde /usr/bin/ + install -m755 $(KF5_BUILD_DIR)/ollie-tray /usr/bin/ # Go shared library install -m755 $(LIB_DIR)/libollie.so /usr/lib/x86_64-linux-gnu/ # KRunner plugin mkdir -p /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner - install -m755 $(BUILD_DIR)/lib/krunner_ollie.so \ + install -m755 $(KF5_BUILD_DIR)/lib/krunner_ollie.so \ /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner/ # Kate plugin mkdir -p /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor - install -m755 $(BUILD_DIR)/lib/ollie_kate.so \ + install -m755 $(KF5_BUILD_DIR)/lib/ollie_kate.so \ /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/ # Plasmoid QML plugin mkdir -p /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private - install -m755 $(BUILD_DIR)/lib/libollieprivateplugin.so \ + install -m755 $(KF5_BUILD_DIR)/lib/libollieprivateplugin.so \ /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private/ install -m644 plasmoid/plugin/qmldir \ /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private/ diff --git a/plasmoid/contents/ui/main-kf5.qml b/plasmoid/contents/ui/main-kf5.qml index 0ed7cdd..e016a65 100644 --- a/plasmoid/contents/ui/main-kf5.qml +++ b/plasmoid/contents/ui/main-kf5.qml @@ -160,7 +160,7 @@ Item { Layout.fillWidth: true elide: Text.ElideRight font.family: "monospace" - font.pixelSize: Kirigami.Theme.defaultFont.pixelSize + font.pointSize: Kirigami.Theme.defaultFont.pointSize visible: !sessionDelegate.renaming } @@ -168,7 +168,7 @@ Item { id: inlineRenameField Layout.fillWidth: true font.family: "monospace" - font.pixelSize: Kirigami.Theme.defaultFont.pixelSize + font.pointSize: Kirigami.Theme.defaultFont.pointSize visible: sessionDelegate.renaming onAccepted: { var newName = text.trim() @@ -195,7 +195,7 @@ Item { Label { text: modelData.agent opacity: 0.7 - font.pixelSize: Kirigami.Theme.smallFont.pixelSize + font.pointSize: Kirigami.Theme.defaultFont.pointSize visible: !sessionDelegate.renaming } @@ -232,7 +232,7 @@ Item { ? "(waiting for output...)" : "Select or create a session") font.family: "monospace" - font.pixelSize: Kirigami.Theme.defaultFont.pixelSize + font.pointSize: Kirigami.Theme.defaultFont.pointSize color: dbus.chatText ? Kirigami.Theme.textColor : Kirigami.Theme.disabledTextColor @@ -283,7 +283,7 @@ Item { Layout.fillWidth: true Layout.leftMargin: 8 Layout.bottomMargin: 4 - font.pixelSize: Kirigami.Theme.smallFont.pixelSize + font.pointSize: Kirigami.Theme.defaultFont.pointSize opacity: 0.6 text: { var id = dbus.activeSessionId