mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 02:36:34 +01:00
PyFalkon: Remove PythonPluginObject
Instead just export global registerPlugin function.
This commit is contained in:
parent
b9cedf45a1
commit
1cf47bfdb5
@ -40,11 +40,13 @@ pyside2_config(--pyside2-shared-libraries-cmake PYSIDE2_SHARED_LIBRARIES 1)
|
|||||||
get_property(QT_CORE_INCLUDE_DIRS TARGET Qt5::Core PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
get_property(QT_CORE_INCLUDE_DIRS TARGET Qt5::Core PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
get_property(QT_GUI_INCLUDE_DIRS TARGET Qt5::Gui PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
get_property(QT_GUI_INCLUDE_DIRS TARGET Qt5::Gui PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
get_property(QT_WIDGETS_INCLUDE_DIRS TARGET Qt5::Widgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
get_property(QT_WIDGETS_INCLUDE_DIRS TARGET Qt5::Widgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_property(QT_WEBENGINECORE_INCLUDE_DIRS TARGET Qt5::WebEngineCore PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
get_property(QT_WEBENGINEWIDGETS_INCLUDE_DIRS TARGET Qt5::WebEngineWidgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
get_property(QT_WEBENGINEWIDGETS_INCLUDE_DIRS TARGET Qt5::WebEngineWidgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
set(QT_INCLUDE_DIRS
|
set(QT_INCLUDE_DIRS
|
||||||
${QT_CORE_INCLUDE_DIRS}
|
${QT_CORE_INCLUDE_DIRS}
|
||||||
${QT_GUI_INCLUDE_DIRS}
|
${QT_GUI_INCLUDE_DIRS}
|
||||||
${QT_WIDGETS_INCLUDE_DIRS}
|
${QT_WIDGETS_INCLUDE_DIRS}
|
||||||
|
${QT_WEBENGINECORE_INCLUDE_DIRS}
|
||||||
${QT_WEBENGINEWIDGETS_INCLUDE_DIRS}
|
${QT_WEBENGINEWIDGETS_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
set(INCLUDES "")
|
set(INCLUDES "")
|
||||||
@ -93,7 +95,6 @@ set(GENERATED_SOURCES
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/pyfalkon_module_wrapper.cpp
|
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/pyfalkon_module_wrapper.cpp
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/desktopfile_wrapper.cpp
|
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/desktopfile_wrapper.cpp
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/plugininterface_wrapper.cpp
|
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/plugininterface_wrapper.cpp
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/PyFalkon/pythonpluginobject_wrapper.cpp
|
|
||||||
)
|
)
|
||||||
set(GENERATED_SOURCES_DEPENDENCIES
|
set(GENERATED_SOURCES_DEPENDENCIES
|
||||||
${WRAPPED_HEADER}
|
${WRAPPED_HEADER}
|
||||||
@ -121,7 +122,6 @@ endforeach()
|
|||||||
|
|
||||||
set( PyFalkon_SRCS
|
set( PyFalkon_SRCS
|
||||||
pythonplugin.cpp
|
pythonplugin.cpp
|
||||||
pythonpluginobject.cpp
|
|
||||||
${GENERATED_SOURCES}
|
${GENERATED_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -2,17 +2,20 @@
|
|||||||
<typesystem package="PyFalkon">
|
<typesystem package="PyFalkon">
|
||||||
<load-typesystem name="typesystem_webenginewidgets.xml" generate="no"/>
|
<load-typesystem name="typesystem_webenginewidgets.xml" generate="no"/>
|
||||||
|
|
||||||
|
<inject-code class="native" position="beginning">
|
||||||
|
#include <pythonplugin.h>
|
||||||
|
</inject-code>
|
||||||
|
|
||||||
<value-type name="DesktopFile"/>
|
<value-type name="DesktopFile"/>
|
||||||
<object-type name="PluginInterface">
|
<object-type name="PluginInterface">
|
||||||
<enum-type name="InitState"/>
|
<enum-type name="InitState"/>
|
||||||
</object-type>
|
</object-type>
|
||||||
|
|
||||||
<object-type name="PythonPluginObject">
|
<add-function signature="registerPlugin(PluginInterface*)">
|
||||||
<modify-function signature="registerPlugin(PluginInterface*)">
|
<inject-code class="target" position="beginning">
|
||||||
<modify-argument index="1">
|
Py_INCREF(%PYARG_1);
|
||||||
<define-ownership owner="c++"/>
|
pyfalkon_register_plugin(%1);
|
||||||
</modify-argument>
|
</inject-code>
|
||||||
</modify-function>
|
</add-function>
|
||||||
</object-type>
|
|
||||||
|
|
||||||
</typesystem>
|
</typesystem>
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* ============================================================ */
|
* ============================================================ */
|
||||||
#include "pythonplugin.h"
|
#include "pythonplugin.h"
|
||||||
#include "pythonpluginobject.h"
|
|
||||||
|
|
||||||
#include "plugins.h"
|
#include "plugins.h"
|
||||||
#include "datapaths.h"
|
#include "datapaths.h"
|
||||||
@ -38,7 +37,7 @@ enum State
|
|||||||
|
|
||||||
State state = PythonUninitialized;
|
State state = PythonUninitialized;
|
||||||
|
|
||||||
PythonPluginObject *pluginObject = nullptr;
|
PluginInterface *pluginInterface = nullptr;
|
||||||
QHash<PyObject*, PluginInterface*> pluginInstances;
|
QHash<PyObject*, PluginInterface*> pluginInstances;
|
||||||
|
|
||||||
static QStringList script_paths()
|
static QStringList script_paths()
|
||||||
@ -55,7 +54,6 @@ static void cleanup()
|
|||||||
if (state > PythonUninitialized) {
|
if (state > PythonUninitialized) {
|
||||||
Py_Finalize();
|
Py_Finalize();
|
||||||
state = PythonUninitialized;
|
state = PythonUninitialized;
|
||||||
delete pluginObject;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,34 +67,6 @@ static void set_path(const QStringList &scriptPaths)
|
|||||||
qputenv("PYTHONPATH", paths.join(QL1C(':')).toLocal8Bit());
|
qputenv("PYTHONPATH", paths.join(QL1C(':')).toLocal8Bit());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void register_plugin_object()
|
|
||||||
{
|
|
||||||
pluginObject = new PythonPluginObject();
|
|
||||||
|
|
||||||
PyTypeObject *typeObject = Shiboken::SbkType<PythonPluginObject>();
|
|
||||||
PyObject *po = Shiboken::Conversions::pointerToPython(reinterpret_cast<const SbkObjectType *>(typeObject), pluginObject);
|
|
||||||
if (!po) {
|
|
||||||
qWarning() << "Failed to create wrapper for" << pluginObject;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Py_INCREF(po);
|
|
||||||
|
|
||||||
PyObject *module = PyImport_AddModule("Falkon");
|
|
||||||
if (!module) {
|
|
||||||
Py_DECREF(po);
|
|
||||||
PyErr_Print();
|
|
||||||
qWarning() << "Failed to locate Falkon module!";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PyModule_AddObject(module, "plugin", po) < 0) {
|
|
||||||
Py_DECREF(po);
|
|
||||||
PyErr_Print();
|
|
||||||
qWarning() << "Failed to add plugin object to Falkon module!";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static State init()
|
static State init()
|
||||||
{
|
{
|
||||||
if (state > PythonUninitialized) {
|
if (state > PythonUninitialized) {
|
||||||
@ -121,11 +91,14 @@ static State init()
|
|||||||
return state = PythonError;
|
return state = PythonError;
|
||||||
}
|
}
|
||||||
|
|
||||||
register_plugin_object();
|
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pyfalkon_register_plugin(PluginInterface *plugin)
|
||||||
|
{
|
||||||
|
pluginInterface = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
Plugins::Plugin pyfalkon_load_plugin(const QString &name)
|
Plugins::Plugin pyfalkon_load_plugin(const QString &name)
|
||||||
{
|
{
|
||||||
QString fullPath;
|
QString fullPath;
|
||||||
@ -160,7 +133,7 @@ void pyfalkon_init_plugin(Plugins::Plugin *plugin)
|
|||||||
|
|
||||||
const QString moduleName = plugin->pluginId.mid(7);
|
const QString moduleName = plugin->pluginId.mid(7);
|
||||||
|
|
||||||
pluginObject->ptr = nullptr;
|
pluginInterface = nullptr;
|
||||||
|
|
||||||
module = PyImport_ImportModule(qPrintable(moduleName));
|
module = PyImport_ImportModule(qPrintable(moduleName));
|
||||||
if (!module) {
|
if (!module) {
|
||||||
@ -168,13 +141,13 @@ void pyfalkon_init_plugin(Plugins::Plugin *plugin)
|
|||||||
qWarning() << "Failed to import module" << moduleName;
|
qWarning() << "Failed to import module" << moduleName;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!pluginObject->ptr) {
|
if (!pluginInterface) {
|
||||||
qWarning() << "No plugin registered! Falkon.plugin.registerPlugin() must be called from script.";
|
qWarning() << "No plugin registered! Falkon.registerPlugin() must be called from script.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pluginInstances[module] = pluginObject->ptr;
|
pluginInstances[module] = pluginInterface;
|
||||||
plugin->instance = pluginObject->ptr;
|
plugin->instance = pluginInterface;
|
||||||
plugin->data = QVariant::fromValue(static_cast<void*>(module));
|
plugin->data = QVariant::fromValue(static_cast<void*>(module));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#include "plugins.h"
|
#include "plugins.h"
|
||||||
|
|
||||||
|
void pyfalkon_register_plugin(PluginInterface *plugin);
|
||||||
|
|
||||||
extern "C" Q_DECL_EXPORT Plugins::Plugin pyfalkon_load_plugin(const QString &name);
|
extern "C" Q_DECL_EXPORT Plugins::Plugin pyfalkon_load_plugin(const QString &name);
|
||||||
extern "C" Q_DECL_EXPORT void pyfalkon_init_plugin(Plugins::Plugin *plugin);
|
extern "C" Q_DECL_EXPORT void pyfalkon_init_plugin(Plugins::Plugin *plugin);
|
||||||
extern "C" Q_DECL_EXPORT QVector<Plugins::Plugin> pyfalkon_load_available_plugins();
|
extern "C" Q_DECL_EXPORT QVector<Plugins::Plugin> pyfalkon_load_available_plugins();
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
/* ============================================================
|
|
||||||
* Falkon - Qt web browser
|
|
||||||
* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
* ============================================================ */
|
|
||||||
#include "pythonpluginobject.h"
|
|
||||||
|
|
||||||
PluginInterface *PythonPluginObject::ptr = nullptr;
|
|
||||||
|
|
||||||
PythonPluginObject::PythonPluginObject(QObject *parent)
|
|
||||||
: QObject(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void PythonPluginObject::registerPlugin(PluginInterface *plugin)
|
|
||||||
{
|
|
||||||
ptr = plugin;
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
/* ============================================================
|
|
||||||
* Falkon - Qt web browser
|
|
||||||
* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
* ============================================================ */
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class PluginInterface;
|
|
||||||
|
|
||||||
class PythonPluginObject : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit PythonPluginObject(QObject *parent = nullptr);
|
|
||||||
|
|
||||||
void registerPlugin(PluginInterface *plugin);
|
|
||||||
|
|
||||||
static PluginInterface *ptr;
|
|
||||||
};
|
|
@ -1,6 +1,21 @@
|
|||||||
// Falkon
|
/* ============================================================
|
||||||
|
* Falkon - Qt web browser
|
||||||
|
* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* ============================================================ */
|
||||||
|
|
||||||
|
#include "webview.h"
|
||||||
#include "desktopfile.h"
|
#include "desktopfile.h"
|
||||||
#include "plugininterface.h"
|
#include "plugininterface.h"
|
||||||
|
|
||||||
// PyFalkon
|
|
||||||
#include "pythonpluginobject.h"
|
|
||||||
|
Loading…
Reference in New Issue
Block a user