/usr/include/kpluginloader.h is in kdelibs5-dev 4:4.14.38-0ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | /* This file is part of the KDE project
Copyright (C) 2007 Bernhard Loos <nhuh.put@web.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KDECORE_KPLUGINLOADER_H
#define KDECORE_KPLUGINLOADER_H
#include <kglobal.h>
#include <kdeversion.h>
#include <kexportplugin.h>
#include <QtCore/QPluginLoader>
#include <QtCore/QtPlugin>
class KComponentData;
class KPluginFactory;
class KService;
class KPluginLoaderPrivate;
/**
* \class KPluginLoader kpluginloader.h <KPluginLoader>
*
* This class can be used to dynamically load a plugin library at runtime.
*
* This class makes sure that the Qt and KDE versions used to compile this library aren't newer than
* the ones currently used.
*
*
* This class is reentrant, you can load plugins from different threads. You can also have multiple
* PluginLoaders for one library without negative effects.
* The object obtained with factory() or the inherited method QPluginLoader::instance() is
* cached inside the library. If you call factory() or instance() multiple times, you will always get
* the same object, even from different threads and different KPluginLoader instances.
* You can delete this object easily, a new one will be created if factory() or instance() is called
* afterwards. factory() uses instance() internally.
*
* KPluginLoader inherits QPluginLoader::unload(). It is safe to call this method if you loaded a plugin
* and decide not to use it for some reason. But as soon as you start to use the factory from the plugin,
* you should stay away from it. It's nearly impossible to keep track of all objects created directly or
* indirectly from the plugin and all other pointers into plugin code. Using unload() in this case is asking
* for trouble. If you really need to unload your plugins, you have to take care to convert the clipboard
* content to text, because the plugin could have registered a custom mime source. You also have to delete
* the factory of the plugin, otherwise you will create a leak.
* The destructor of KPluginLoader doesn't call unload.
*
* Sample code:
* \code
* KPluginLoader loader( ...library or kservice... );
* KPluginFactory* factory = loader.factory();
* if (!factory) {
* kWarning() << "Error loading plugin:" << loader.errorString();
* } else {
* MyInterface* obj = factory->create<MyInterface>();
* if (!obj) {
* kWarning() << "Error creating object";
* }
* }
* \endcode
*
* \see KPluginFactory
*
* \author Bernhard Loos <nhuh.put@web.de>
*/
class KDECORE_EXPORT KPluginLoader : public QPluginLoader
{
Q_OBJECT
Q_PROPERTY(QString fileName READ fileName) // KDE5: REMOVE?
Q_PROPERTY(QString pluginName READ pluginName) // KDE5: REMOVE?
public:
/**
* Used this constructor to load a plugin with a given library name. Plugin libraries shouldn't have a 'lib' prefix.
*
* errorString() will be set if problems are encountered.
*
* \param plugin The name of the plugin library.
* \param componentdata The KStandardDirs object from componentdata is used to search the library.
* \param parent A parent object.
*/
explicit KPluginLoader(const QString &plugin, const KComponentData &componentdata = KGlobal::mainComponent(), QObject *parent = 0);
/**
* Used this constructor to load a plugin from a service. The service must contain a library.
*
* errorString() will be set if problems are encountered.
*
* \param service The service for which the library should be loaded.
* \param componentdata The KStandardDirs object from componentdata is used to search the library.
* \param parent A parent object.
*/
explicit KPluginLoader(const KService &service, const KComponentData &componentdata = KGlobal::mainComponent(), QObject *parent = 0);
/**
* Destroys the plugin loader.
*/
~KPluginLoader();
/**
* Used to obtain the factory object of the plugin. You have to give a class which inherits KPluginFactory
* to K_EXPORT_PLUGIN to use this method.
*
* \returns The factory of the plugin or 0 on error.
*/
KPluginFactory *factory();
/**
* The name of this plugin as given to the constructor.
* \returns the plugin name
*/
QString pluginName() const;
/**
* Queries the plugin version.
* \returns The version given to K_EXPORT_PLUGIN_VERSION or (quint32) -1 if not set.
*/
quint32 pluginVersion() const;
/**
* Queries the last error.
* \returns The description of the last error.
*/
QString errorString() const;
bool isLoaded() const;
protected:
/**
* Performs the loading of the plugin.
*/
bool load();
private:
Q_DECLARE_PRIVATE(KPluginLoader)
Q_DISABLE_COPY(KPluginLoader)
using QPluginLoader::setFileName;
KPluginLoaderPrivate *const d_ptr;
};
#endif
|