From ad60559d979b2c2d3809ad59891f49baae0d47c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Sverre=20Lien=20Sell=C3=A6g?= Date: Mon, 7 Sep 2020 23:09:43 +0200 Subject: [PATCH] load plugins before application, we might want to do changes before the application starts --- src/juci.cpp | 9 +++++++-- src/juci.hpp | 6 +----- src/plugins.cc | 4 +--- src/plugins.h | 3 ++- tests/python_bindings/test_suite.cc | 2 +- tests/stubs/plugins.cc | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/juci.cpp b/src/juci.cpp index ad0da2b..a9e5ab8 100644 --- a/src/juci.cpp +++ b/src/juci.cpp @@ -4,6 +4,7 @@ #include "filesystem.hpp" #include "menu.hpp" #include "notebook.hpp" +#include "plugins.h" #include "terminal.hpp" #include "utility.hpp" #include "window.hpp" @@ -131,7 +132,7 @@ void Application::on_startup() { } } -Application::Application() : Gtk::Application("no.sout.juci", Gio::APPLICATION_NON_UNIQUE | Gio::APPLICATION_HANDLES_COMMAND_LINE), window(plugins) { +Application::Application(Plugins &p) : Gtk::Application("no.sout.juci", Gio::APPLICATION_NON_UNIQUE | Gio::APPLICATION_HANDLES_COMMAND_LINE), window(p) { Glib::set_application_name("juCi++"); //Gtk::MessageDialog without buttons caused text to be selected, this prevents that @@ -142,5 +143,9 @@ int main(int argc, char *argv[]) { #ifndef _WIN32 signal(SIGPIPE, SIG_IGN); // Do not terminate application when writing to a process fails #endif - return Application().run(argc, argv); + auto &config = Config::get(); + Plugins plugins(config); + plugins.load(); + + return Application(plugins).run(argc, argv); } diff --git a/src/juci.hpp b/src/juci.hpp index 2920b27..73a1950 100644 --- a/src/juci.hpp +++ b/src/juci.hpp @@ -2,9 +2,6 @@ #include "window.hpp" #include #include -#ifdef JUCI_ENABLE_PLUGINS -#include "plugins.h" -#endif /** \mainpage juCi++ is a lightweight C++ IDE written in C++ @@ -33,7 +30,7 @@ */ class Application : public Gtk::Application { public: - Application(); + Application(Plugins &p); int on_command_line(const Glib::RefPtr &cmd) override; void on_activate() override; void on_startup() override; @@ -43,5 +40,4 @@ private: std::vector> files; std::vector errors; Window window; - Plugins plugins; }; diff --git a/src/plugins.cc b/src/plugins.cc index d14de2c..ceaf995 100644 --- a/src/plugins.cc +++ b/src/plugins.cc @@ -3,9 +3,7 @@ #include "python_module.h" #include "terminal.hpp" -Plugins::Plugins() : jucipp_module("Jucipp", Module::init_jucipp_module) { - auto &config = Config::get(); - config.load(); +Plugins::Plugins(Config &config) : jucipp_module("Jucipp", Module::init_jucipp_module) { #ifdef PYTHON_HOME_DIR #ifdef _WIN32 const std::wstring python_home(PYTHON_HOME_DIR); diff --git a/src/plugins.h b/src/plugins.h index 84d98ac..ff2655b 100644 --- a/src/plugins.h +++ b/src/plugins.h @@ -1,11 +1,12 @@ #pragma once +#include "config.hpp" #include "python_bind.h" #include class __attribute__((visibility("default"))) Plugins { public: - Plugins(); + Plugins(Config &config); ~Plugins(); void load(); diff --git a/tests/python_bindings/test_suite.cc b/tests/python_bindings/test_suite.cc index f391509..e0c3ac9 100644 --- a/tests/python_bindings/test_suite.cc +++ b/tests/python_bindings/test_suite.cc @@ -2,7 +2,7 @@ #include "python_module.h" #include -suite::suite(const boost::filesystem::path &path) { +suite::suite(const boost::filesystem::path &path) : plugins(config) { py::initialize_interpreter(); if(!Py_IsInitialized()) { throw std::runtime_error("Unable to initialize interpreter"); diff --git a/tests/stubs/plugins.cc b/tests/stubs/plugins.cc index 10b5b94..68af68e 100644 --- a/tests/stubs/plugins.cc +++ b/tests/stubs/plugins.cc @@ -1,11 +1,11 @@ #include "plugins.h" #include "python_module.h" -Plugins::Plugins() : jucipp_module("Jucipp", Module::init_jucipp_module) { +Plugins::Plugins(Config &config) : jucipp_module("Jucipp", Module::init_jucipp_module) { #ifdef PYTHON_HOME_DIR #ifdef _WIN32 const std::wstring python_home(PYTHON_HOME_DIR); - const std::wstring python_path(python_home + L";" + python_home + L"\\lib-dynload;" + python_home + L"\\site-packages" ); + const std::wstring python_path(python_home + L";" + python_home + L"\\lib-dynload;" + python_home + L"\\site-packages"); Py_SetPythonHome(python_home.c_str()); Py_SetPath(python_path.c_str()); #endif