Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToolsDevler <info@toolsdevler.net>2020-11-17 18:34:31 +0300
committerToolsDevler <info@toolsdevler.net>2020-12-31 03:03:24 +0300
commitab61c28670f012e84ab946a05d6e4c1ed65771d6 (patch)
tree217c2376b686886551b512c28f34ad24fd0ee438
parent5b918b21839e4d5eaf643a36bd450a7c74541cd9 (diff)
WIP: Seperate module and plugin implementation
-rw-r--r--src/remmina_plugin_python_module.c389
-rw-r--r--src/remmina_plugin_python_remmina.c953
-rw-r--r--src/remmina_plugin_python_remmina.h771
3 files changed, 2082 insertions, 31 deletions
diff --git a/src/remmina_plugin_python_module.c b/src/remmina_plugin_python_module.c
index 1e2c3d7e5..917bbb815 100644
--- a/src/remmina_plugin_python_module.c
+++ b/src/remmina_plugin_python_module.c
@@ -119,37 +119,6 @@ typedef struct {
} PyPlugin;
-/**
- * @brief Wraps the log_printf function of RemminaPluginService.
- *
- * @details This function is only called by the Python engine! There is only one argument
- * since Python offers an inline string formatting which renders any formatting capabilities
- * redundant.
- *
- * @param self Is always NULL since it is a static function of the 'remmina' module
- * @param msg The message to print.
- */
-static PyObject* remmina_plugin_python_log_printf_wrapper(PyObject* self, PyObject* msg);
-
-/**
- * @brief Accepts an instance of a Python class representing a Remmina plugin.
- *
- * @details This function is only called by the Python engine!
- *
- * @param self Is always NULL since it is a static function of the 'remmina' module
- * @param plugin An instance of a Python plugin class.
- */
-static PyObject* remmina_plugin_python_register_plugin(PyObject* self, PyObject* plugin);
-
-/**
- * @brief Retrieves the viewport of the current connection window if available.
- *
- * @details This function is only called by the Python engine!
- *
- * @param self Is always NULL since it is a static function of the 'remmina' module
- * @param plugin The handle to retrieve the RemminaConnectionWidget
- */
-static PyObject* remmina_plugin_python_get_viewport(PyObject* self, PyObject* handle);
/**
* @brief Initializes the 'remmina' module
@@ -157,6 +126,7 @@ static PyObject* remmina_plugin_python_get_viewport(PyObject* self, PyObject* ha
*/
PyMODINIT_FUNC remmina_plugin_python_module_initialize(void);
+
/**
* @brief The functions of the remmina module.
*
@@ -168,6 +138,82 @@ static PyMethodDef remmina_python_module_type_methods[] = {
{"register_plugin", (PyCFunction)remmina_plugin_python_register_plugin, METH_O, NULL },
{"log_print", (PyCFunction)remmina_plugin_python_log_printf_wrapper, METH_VARARGS, NULL },
{"get_viewport", (PyCFunction)remmina_plugin_python_get_viewport, METH_O, NULL },
+ {"get_viewport", (PyCFunction)remmina_plugin_manager_register_plugin_wrapper},
+ {"protocol_widget_get_width", (PyCFunction)remmina_protocol_widget_get_width_wrapper},
+ {"protocol_widget_set_width", (PyCFunction)remmina_protocol_widget_set_width_wrapper},
+ {"protocol_widget_get_height", (PyCFunction)remmina_protocol_widget_get_height_wrapper},
+ {"protocol_widget_set_height", (PyCFunction)remmina_protocol_widget_set_height_wrapper},
+ {"protocol_widget_get_current_scale_mode", (PyCFunction)remmina_protocol_widget_get_current_scale_mode_wrapper},
+ {"protocol_widget_get_expand", (PyCFunction)remmina_protocol_widget_get_expand_wrapper},
+ {"protocol_widget_set_expand", (PyCFunction)remmina_protocol_widget_set_expand_wrapper},
+ {"protocol_widget_has_error", (PyCFunction)remmina_protocol_widget_has_error_wrapper},
+ {"protocol_widget_set_error", (PyCFunction)remmina_protocol_widget_set_error_wrapper},
+ {"protocol_widget_is_closed", (PyCFunction)remmina_protocol_widget_is_closed_wrapper},
+ {"protocol_widget_get_file", (PyCFunction)remmina_protocol_widget_get_file_wrapper},
+ {"protocol_widget_emit_signal", (PyCFunction)remmina_protocol_widget_emit_signal_wrapper},
+ {"protocol_widget_register_hostkey", (PyCFunction)remmina_protocol_widget_register_hostkey_wrapper},
+ {"protocol_widget_start_direct_tunnel", (PyCFunction)remmina_protocol_widget_start_direct_tunnel_wrapper},
+ {"protocol_widget_start_reverse_tunnel", (PyCFunction)remmina_protocol_widget_start_reverse_tunnel_wrapper},
+ {"protocol_widget_start_xport_tunnel", (PyCFunction)remmina_protocol_widget_start_xport_tunnel_wrapper},
+ {"protocol_widget_set_display", (PyCFunction)remmina_protocol_widget_set_display_wrapper},
+ {"protocol_widget_signal_connection_closed", (PyCFunction)remmina_protocol_widget_signal_connection_closed_wrapper},
+ {"protocol_widget_signal_connection_opened", (PyCFunction)remmina_protocol_widget_signal_connection_opened_wrapper},
+ {"protocol_widget_update_align", (PyCFunction)remmina_protocol_widget_update_align_wrapper},
+ {"protocol_widget_unlock_dynres", (PyCFunction)remmina_protocol_widget_unlock_dynres_wrapper},
+ {"protocol_widget_desktop_resize", (PyCFunction)remmina_protocol_widget_desktop_resize_wrapper},
+ {"protocol_widget_panel_auth", (PyCFunction)remmina_protocol_widget_panel_auth_wrapper},
+ {"protocol_widget_panel_new_certificate", (PyCFunction)remmina_protocol_widget_panel_new_certificate_wrapper},
+ {"protocol_widget_panel_changed_certificate", (PyCFunction)remmina_protocol_widget_panel_changed_certificate_wrapper},
+ {"protocol_widget_get_username", (PyCFunction)remmina_protocol_widget_get_username_wrapper},
+ {"protocol_widget_get_password", (PyCFunction)remmina_protocol_widget_get_password_wrapper},
+ {"protocol_widget_get_domain", (PyCFunction)remmina_protocol_widget_get_domain_wrapper},
+ {"protocol_widget_get_savepassword", (PyCFunction)remmina_protocol_widget_get_savepassword_wrapper},
+ {"protocol_widget_panel_authx509", (PyCFunction)remmina_protocol_widget_panel_authx509_wrapper},
+ {"protocol_widget_get_cacert", (PyCFunction)remmina_protocol_widget_get_cacert_wrapper},
+ {"protocol_widget_get_cacrl", (PyCFunction)remmina_protocol_widget_get_cacrl_wrapper},
+ {"protocol_widget_get_clientcert", (PyCFunction)remmina_protocol_widget_get_clientcert_wrapper},
+ {"protocol_widget_get_clientkey", (PyCFunction)remmina_protocol_widget_get_clientkey_wrapper},
+ {"protocol_widget_save_cred", (PyCFunction)remmina_protocol_widget_save_cred_wrapper},
+ {"protocol_widget_panel_show_listen", (PyCFunction)remmina_protocol_widget_panel_show_listen_wrapper},
+ {"protocol_widget_panel_show_retry", (PyCFunction)remmina_protocol_widget_panel_show_retry_wrapper},
+ {"protocol_widget_panel_show", (PyCFunction)remmina_protocol_widget_panel_show_wrapper},
+ {"protocol_widget_panel_hide", (PyCFunction)remmina_protocol_widget_panel_hide_wrapper},
+ {"protocol_widget_ssh_exec", (PyCFunction)remmina_protocol_widget_ssh_exec_wrapper},
+ {"protocol_widget_chat_open", (PyCFunction)remmina_protocol_widget_chat_open_wrapper},
+ {"protocol_widget_chat_close", (PyCFunction)remmina_protocol_widget_chat_close_wrapper},
+ {"protocol_widget_chat_receive", (PyCFunction)remmina_protocol_widget_chat_receive_wrapper},
+ {"protocol_widget_send_keys_signals", (PyCFunction)remmina_protocol_widget_send_keys_signals_wrapper},
+
+ {"get_datadir", (PyCFunction)remmina_file_get_datadir_wrapper},
+
+ {"file_new", (PyCFunction)remmina_file_new_wrapper},
+ {"file_get_filename", (PyCFunction)remmina_file_get_filename_wrapper},
+ {"file_set_string", (PyCFunction)remmina_file_set_string_wrapper},
+ {"file_get_string", (PyCFunction)remmina_file_get_string_wrapper},
+ {"file_get_secret", (PyCFunction)remmina_file_get_secret_wrapper},
+ {"file_set_int", (PyCFunction)remmina_file_set_int_wrapper},
+ {"file_get_int", (PyCFunction)remmina_file_get_int_wrapper},
+ {"file_unsave_passwords", (PyCFunction)remmina_file_unsave_passwords_wrapper},
+
+ {"pref_set_value", (PyCFunction)remmina_pref_set_value_wrapper},
+ {"pref_get_value", (PyCFunction)remmina_pref_get_value_wrapper},
+ {"pref_get_scale_quality", (PyCFunction)remmina_pref_get_scale_quality_wrapper},
+ {"pref_get_sshtunnel_port", (PyCFunction)remmina_pref_get_sshtunnel_port_wrapper},
+ {"pref_get_ssh_loglevel", (PyCFunction)remmina_pref_get_ssh_loglevel_wrapper},
+ {"pref_get_ssh_parseconfig", (PyCFunction)remmina_pref_get_ssh_parseconfig_wrapper},
+ {"pref_keymap_get_keyval", (PyCFunction)remmina_pref_keymap_get_keyval_wrapper},
+
+ {"log_print", (PyCFunction)remmina_log_print_wrapper},
+ {"log_printf", (PyCFunction)remmina_log_printf_wrapper},
+
+ {"widget_pool_register", (PyCFunction)remmina_widget_pool_register_wrapper},
+
+ {"rcw_open_from_file_full", (PyCFunction)rcw_open_from_file_full_wrapper },
+ {"public_get_server_port", (PyCFunction)remmina_public_get_server_port_wrapper},
+ {"masterthread_exec_is_main_thread", (PyCFunction)remmina_masterthread_exec_is_main_thread_wrapper},
+ {"gtksocket_available", (PyCFunction)remmina_gtksocket_available_wrapper},
+ {"protocol_widget_get_profile_remote_width", (PyCFunction)remmina_protocol_widget_get_profile_remote_width_wrapper},
+ {"protocol_widget_get_profile_remote_heigh", (PyCFunction)remmina_protocol_widget_get_profile_remote_heigh_wrapper}t
{NULL} /* Sentinel */
};
@@ -437,4 +483,285 @@ static PyObject* remmina_plugin_python_register_plugin(PyObject* self, PyObject*
}
return Py_None;
+}
+
+static PyObject* remmina_plugin_manager_register_plugin_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_width_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_set_width_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_height_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_set_height_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_current_scale_mode_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_expand_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_set_expand_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_has_error_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_set_error_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_is_closed_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_file_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_emit_signal_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_register_hostkey_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_start_direct_tunnel_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_start_reverse_tunnel_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_start_xport_tunnel_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_set_display_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_signal_connection_closed_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_signal_connection_opened_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_update_align_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_unlock_dynres_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_desktop_resize_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_auth_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_new_certificate_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_changed_certificate_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_username_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_password_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_domain_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_savepassword_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_authx509_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_cacert_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_cacrl_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_clientcert_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_clientkey_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_save_cred_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_show_listen_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_show_retry_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_show_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_panel_hide_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_ssh_exec_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_chat_open_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_chat_close_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_chat_receive_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_send_keys_signals_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_get_datadir_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_new_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_get_filename_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_set_string_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_get_string_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_get_secret_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_set_int_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_get_int_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_file_unsave_passwords_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_set_value_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_get_value_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_get_scale_quality_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_get_sshtunnel_port_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_get_ssh_loglevel_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_get_ssh_parseconfig_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_pref_keymap_get_keyval_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_log_print_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_log_printf_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_widget_pool_register_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* rcw_open_from_file_full_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_public_get_server_port_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_masterthread_exec_is_main_thread_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_gtksocket_available_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_profile_remote_heigh_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
+}
+static PyObject* remmina_protocol_widget_get_profile_remote_width_wrapper(PyObject* self, PyObject* arg)
+{
+ return Py_None;
} \ No newline at end of file
diff --git a/src/remmina_plugin_python_remmina.c b/src/remmina_plugin_python_remmina.c
new file mode 100644
index 000000000..26f4d1c1c
--- /dev/null
+++ b/src/remmina_plugin_python_remmina.c
@@ -0,0 +1,953 @@
+#include "remmina_plugin_python_remmina.h"
+#include <Python.h>
+
+/**
+ * @brief Wraps the log_printf function of RemminaPluginService.
+ *
+ * @details This function is only called by the Python engine! There is only one argument
+ * since Python offers an inline string formatting which renders any formatting capabilities
+ * redundant.
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param msg The message to print.
+ */
+static PyObject* remmina_plugin_python_log_printf_wrapper(PyObject* self, PyObject* msg)
+{
+ return Py_None;
+}
+
+/**
+ * @brief Accepts an instance of a Python class representing a Remmina plugin.
+ *
+ * @details This function is only called by the Python engine!
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin An instance of a Python plugin class.
+ */
+static PyObject* remmina_plugin_python_register_plugin(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief Retrieves the viewport of the current connection window if available.
+ *
+ * @details This function is only called by the Python engine!
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_plugin_python_get_viewport(PyObject* self, PyObject* handle)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_plugin_manager_register_plugin_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_width_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_width_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_height_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_height_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_current_scale_mode_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_expand_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_expand_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_has_error_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_error_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_is_closed_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_file_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_emit_signal_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_register_hostkey_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_start_direct_tunnel_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_start_reverse_tunnel_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_start_xport_tunnel_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_display_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_signal_connection_closed_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_signal_connection_opened_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_update_align_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_unlock_dynres_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_desktop_resize_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_auth_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_new_certificate_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_changed_certificate_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_username_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_password_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_domain_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_savepassword_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_authx509_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_cacert_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_cacrl_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_clientcert_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_clientkey_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_save_cred_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_show_listen_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_show_retry_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_show_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_hide_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_ssh_exec_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_chat_open_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_chat_close_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_chat_receive_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_send_keys_signals_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_datadir_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_new_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_filename_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_set_string_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_string_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_secret_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_set_int_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_int_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_unsave_passwords_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_set_value_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_value_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_scale_quality_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_sshtunnel_port_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_ssh_loglevel_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_ssh_parseconfig_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_keymap_get_keyval_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_log_print_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_log_printf_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_widget_pool_register_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* rcw_open_from_file_full_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_public_get_server_port_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_masterthread_exec_is_main_thread_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_gtksocket_available_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_profile_remote_heigh_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_profile_remote_width_wrapper(PyObject* self, PyObject* plugin)
+{
+ return Py_None;
+}
diff --git a/src/remmina_plugin_python_remmina.h b/src/remmina_plugin_python_remmina.h
new file mode 100644
index 000000000..ed5e1010a
--- /dev/null
+++ b/src/remmina_plugin_python_remmina.h
@@ -0,0 +1,771 @@
+/*
+ * Remmina - The GTK+ Remote Desktop Client
+ * Copyright (C) 2010 Vic Lee
+ * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
+ * Copyright (C) 2016-2020 Antenore Gatta, Giovanni Panozzo
+ *
+ * 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 2 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link the code of portions of this program with the
+ * OpenSSL library under certain conditions as described in each
+ * individual source file, and distribute linked combinations
+ * including the two.
+ * You must obey the GNU General Public License in all respects
+ * for all of the code used other than OpenSSL. * If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. * If you
+ * do not wish to do so, delete this exception statement from your
+ * version. * If you delete this exception statement from all source
+ * files in the program, then also delete it here.
+ *
+ */
+
+#pragma once
+
+#include <Python.h>
+
+/**
+ * @brief Wraps the log_printf function of RemminaPluginService.
+ *
+ * @details This function is only called by the Python engine! There is only one argument
+ * since Python offers an inline string formatting which renders any formatting capabilities
+ * redundant.
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param msg The message to print.
+ */
+static PyObject* remmina_plugin_python_log_printf_wrapper(PyObject* self, PyObject* msg);
+
+/**
+ * @brief Accepts an instance of a Python class representing a Remmina plugin.
+ *
+ * @details This function is only called by the Python engine!
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin An instance of a Python plugin class.
+ */
+static PyObject* remmina_plugin_python_register_plugin(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief Retrieves the viewport of the current connection window if available.
+ *
+ * @details This function is only called by the Python engine!
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_plugin_python_get_viewport(PyObject* self, PyObject* handle);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_plugin_manager_register_plugin_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_width_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_width_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_height_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_height_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_current_scale_mode_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_expand_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_expand_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_has_error_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_error_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_is_closed_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_file_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_emit_signal_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_register_hostkey_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_start_direct_tunnel_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_start_reverse_tunnel_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_start_xport_tunnel_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_set_display_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_signal_connection_closed_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_signal_connection_opened_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_update_align_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_unlock_dynres_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_desktop_resize_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_auth_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_new_certificate_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_changed_certificate_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_username_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_password_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_domain_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_savepassword_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_authx509_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_cacert_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_cacrl_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_clientcert_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_clientkey_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_save_cred_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_show_listen_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_show_retry_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_show_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_panel_hide_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_ssh_exec_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_chat_open_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_chat_close_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_chat_receive_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_send_keys_signals_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_datadir_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_new_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_filename_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_set_string_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_string_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_secret_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_set_int_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_get_int_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_file_unsave_passwords_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_set_value_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_value_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_scale_quality_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_sshtunnel_port_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_ssh_loglevel_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_get_ssh_parseconfig_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_pref_keymap_get_keyval_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_log_print_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_log_printf_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_widget_pool_register_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* rcw_open_from_file_full_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_public_get_server_port_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_masterthread_exec_is_main_thread_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_gtksocket_available_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_profile_remote_heigh_wrapper(PyObject* self, PyObject* plugin);
+
+/**
+ * @brief
+ *
+ * @details
+ *
+ * @param self Is always NULL since it is a static function of the 'remmina' module
+ * @param plugin The handle to retrieve the RemminaConnectionWidget
+ */
+static PyObject* remmina_protocol_widget_get_profile_remote_width_wrapper(PyObject* self, PyObject* plugin);