diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index e990db73e1a9b388aed1765cbc2dceae49c0fef1..7379f591ed863187a738a724c4c8032438de6dd4 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -127,14 +127,19 @@ void MainWindow::dragMoveEvent(QDragMoveEvent * event) bool MainWindow::loadPart() { - KPluginFactory *factory = 0; - KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("ark_part")); + KPluginFactory *factory = Q_NULLPTR; - if (service) { - factory = KPluginLoader(service->library()).factory(); + const auto plugins = KPluginLoader::findPlugins(QString(), [](const KPluginMetaData& metaData) { + return metaData.pluginId() == QStringLiteral("arkpart") && + metaData.serviceTypes().contains(QStringLiteral("KParts/ReadOnlyPart")) && + metaData.serviceTypes().contains(QStringLiteral("Browser/View")); + }); + + if (plugins.size() == 1) { + factory = KPluginLoader(plugins.first().fileName()).factory(); } - m_part = factory ? static_cast(factory->create(this)) : 0; + m_part = factory ? static_cast(factory->create(this)) : Q_NULLPTR; if (!m_part) { KMessageBox::error(this, i18n("Unable to find Ark's KPart component, please check your installation.")); diff --git a/part/CMakeLists.txt b/part/CMakeLists.txt index 1f17fb095c0a794e23a6c89f41c572c65d8c8871..199d9cba8adf4d437771ffe1477814c6e3660010 100644 --- a/part/CMakeLists.txt +++ b/part/CMakeLists.txt @@ -30,6 +30,8 @@ configure_file( ${CMAKE_CURRENT_BINARY_DIR}/ark_part.desktop ) +kcoreaddons_desktop_to_json(arkpart ${CMAKE_CURRENT_BINARY_DIR}/ark_part.desktop SERVICES_TYPES kpart.desktop browserview.desktop) + install(TARGETS arkpart DESTINATION ${KDE_INSTALL_PLUGINDIR}) ########### install files ############### diff --git a/part/part.cpp b/part/part.cpp index b87bcafc8a02e3296e328bad8e320c192e734e67..76146462f1e62e1e0003d752ef18df7a820cab22 100644 --- a/part/part.cpp +++ b/part/part.cpp @@ -75,7 +75,7 @@ using namespace Kerfuffle; -K_PLUGIN_FACTORY(Factory, registerPlugin();) +K_PLUGIN_FACTORY_WITH_JSON(Factory, "ark_part.json", registerPlugin();) namespace Ark {