From bcf49fb95bee12bbc4bef0578285ad296deafcae Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 24 Apr 2020 01:25:43 +0200 Subject: [PATCH] Install the kontact plugin into kontact5, with JSON metadata. Summary: This will allow kontact to use KPluginLoader one day. It also fixes compilation with current kontactinterface API. Test Plan: rm $prefix/lib64/plugins/kontact_zanshinplugin.so ; make install kontact still finds the zanshin plugin The same steps (other than old-kontact-interface compatibility) were already pushed to all other kontact plugins. This commit is very similar to https://phabricator.kde.org/D28847 and its predecessor commit, in zanshin. --- src/kontact_plugin/CMakeLists.txt | 11 ++++++++- src/kontact_plugin/kjots_plugin.cpp | 34 ++++++++++++++++++++------ src/kontact_plugin/kjots_plugin.h | 5 ++++ src/kontact_plugin/kjotsplugin.desktop | 2 +- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/kontact_plugin/CMakeLists.txt b/src/kontact_plugin/CMakeLists.txt index 8a6b5e1..dec4b8b 100644 --- a/src/kontact_plugin/CMakeLists.txt +++ b/src/kontact_plugin/CMakeLists.txt @@ -1,13 +1,22 @@ include_directories(${kjots_SOURCE_DIR}/src) +# TODO: remove once kontactinterface 5.14.42 is required +if(NOT CMAKE_VERSION VERSION_LESS "3.10.0") + # CMake 3.9+ warns about automoc on files without Q_OBJECT, and doesn't know about other macros. + # 3.10+ lets us provide more macro names that require automoc. + # KF5 >= 5.42 takes care itself of adding its macros in its cmake config files + list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "EXPORT_KONTACT_PLUGIN_WITH_JSON") +endif() + set(kontact_kjots_PART_SRCS kjots_plugin.cpp ) add_library(kontact_kjotsplugin MODULE ${kontact_kjots_PART_SRCS}) target_link_libraries(kontact_kjotsplugin KF5::KontactInterface) +kcoreaddons_desktop_to_json(kontact_kjotsplugin kjotsplugin.desktop) -install(TARGETS kontact_kjotsplugin DESTINATION ${KDE_INSTALL_PLUGINDIR}) +install(TARGETS kontact_kjotsplugin DESTINATION ${KDE_INSTALL_PLUGINDIR}/kontact5) install(FILES kjotsplugin.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/kontact) install(FILES kjots.setdlg DESTINATION ${KDE_INSTALL_DATADIR}/kontact/ksettingsdialog) diff --git a/src/kontact_plugin/kjots_plugin.cpp b/src/kontact_plugin/kjots_plugin.cpp index 66e7ed5..b74d601 100644 --- a/src/kontact_plugin/kjots_plugin.cpp +++ b/src/kontact_plugin/kjots_plugin.cpp @@ -33,7 +33,25 @@ #include #include -EXPORT_KONTACT_PLUGIN(KJotsPlugin, kjots) +#if KONTACTINTERFACE_VERSION < QT_VERSION_CHECK(5, 14, 42) +/** + Exports Kontact plugin. + @param pluginclass the class to instanciate (must derive from KontactInterface::Plugin + @param jsonFile filename of the JSON file, generated from a .desktop file + */ +#define EXPORT_KONTACT_PLUGIN_WITH_JSON( pluginclass, jsonFile ) \ + class Instance \ + { \ + public: \ + static QObject *createInstance( QWidget *, QObject *parent, const QVariantList &list ) \ + { return new pluginclass( static_cast( parent ), list ); } \ + }; \ + K_PLUGIN_FACTORY_WITH_JSON( KontactPluginFactory, jsonFile, registerPlugin< pluginclass > \ + ( QString(), Instance::createInstance ); ) \ + K_EXPORT_PLUGIN_VERSION(KONTACT_PLUGIN_VERSION) +#endif + +EXPORT_KONTACT_PLUGIN_WITH_JSON(KJotsPlugin, "kjotsplugin.json") KJotsPlugin::KJotsPlugin(KontactInterface::Core *core, const QVariantList &) : KontactInterface::Plugin(core, core, "kjots") @@ -63,15 +81,17 @@ QStringList KJotsPlugin::invisibleToolbarActions() const return { QStringLiteral("new_page"), QStringLiteral("new_book") }; } +#if KONTACTINTERFACE_VERSION >= QT_VERSION_CHECK(5, 14, 42) +KParts::Part *KJotsPlugin::createPart() +{ + return loadPart(); +} +#else KParts::ReadOnlyPart *KJotsPlugin::createPart() { - KParts::ReadOnlyPart *part = loadPart(); - if (!part) { - return Q_NULLPTR; - } - - return part; + return loadPart(); } +#endif QStringList KJotsPlugin::configModules() const { diff --git a/src/kontact_plugin/kjots_plugin.h b/src/kontact_plugin/kjots_plugin.h index cd62373..4945d25 100644 --- a/src/kontact_plugin/kjots_plugin.h +++ b/src/kontact_plugin/kjots_plugin.h @@ -24,6 +24,7 @@ #define KJOTS_PLUGIN_H #include +#include namespace KontactInterface { @@ -62,7 +63,11 @@ public: QStringList invisibleToolbarActions() const Q_DECL_OVERRIDE; protected: +#if KONTACTINTERFACE_VERSION >= QT_VERSION_CHECK(5, 14, 42) + KParts::Part *createPart() override; +#else KParts::ReadOnlyPart *createPart() Q_DECL_OVERRIDE; +#endif KontactInterface::UniqueAppWatcher *mUniqueAppWatcher; private: diff --git a/src/kontact_plugin/kjotsplugin.desktop b/src/kontact_plugin/kjotsplugin.desktop index 1339753..d5a198f 100644 --- a/src/kontact_plugin/kjotsplugin.desktop +++ b/src/kontact_plugin/kjotsplugin.desktop @@ -3,7 +3,7 @@ Type=Service Icon=kjots X-KDE-ServiceTypes=Kontact/Plugin,KPluginInfo -X-KDE-Library=kontact_kjotsplugin +X-KDE-Library=kontact5/kontact_kjotsplugin X-KDE-KontactPluginVersion=10 X-KDE-KontactPartLibraryName=kjotspart X-KDE-KontactPartExecutableName=kjots -- GitLab