Browse Source

load plugins before application, we might want to do changes before the application starts

python
Jørgen Lien Sellæg 5 years ago
parent
commit
ad60559d97
  1. 9
      src/juci.cpp
  2. 6
      src/juci.hpp
  3. 4
      src/plugins.cc
  4. 3
      src/plugins.h
  5. 2
      tests/python_bindings/test_suite.cc
  6. 2
      tests/stubs/plugins.cc

9
src/juci.cpp

@ -4,6 +4,7 @@
#include "filesystem.hpp" #include "filesystem.hpp"
#include "menu.hpp" #include "menu.hpp"
#include "notebook.hpp" #include "notebook.hpp"
#include "plugins.h"
#include "terminal.hpp" #include "terminal.hpp"
#include "utility.hpp" #include "utility.hpp"
#include "window.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++"); Glib::set_application_name("juCi++");
//Gtk::MessageDialog without buttons caused text to be selected, this prevents that //Gtk::MessageDialog without buttons caused text to be selected, this prevents that
@ -142,5 +143,9 @@ int main(int argc, char *argv[]) {
#ifndef _WIN32 #ifndef _WIN32
signal(SIGPIPE, SIG_IGN); // Do not terminate application when writing to a process fails signal(SIGPIPE, SIG_IGN); // Do not terminate application when writing to a process fails
#endif #endif
return Application().run(argc, argv); auto &config = Config::get();
Plugins plugins(config);
plugins.load();
return Application(plugins).run(argc, argv);
} }

6
src/juci.hpp

@ -2,9 +2,6 @@
#include "window.hpp" #include "window.hpp"
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <gtkmm.h> #include <gtkmm.h>
#ifdef JUCI_ENABLE_PLUGINS
#include "plugins.h"
#endif
/** /**
\mainpage \mainpage
juCi++ is a lightweight C++ IDE written in C++ juCi++ is a lightweight C++ IDE written in C++
@ -33,7 +30,7 @@
*/ */
class Application : public Gtk::Application { class Application : public Gtk::Application {
public: public:
Application(); Application(Plugins &p);
int on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine> &cmd) override; int on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine> &cmd) override;
void on_activate() override; void on_activate() override;
void on_startup() override; void on_startup() override;
@ -43,5 +40,4 @@ private:
std::vector<std::pair<boost::filesystem::path, size_t>> files; std::vector<std::pair<boost::filesystem::path, size_t>> files;
std::vector<std::string> errors; std::vector<std::string> errors;
Window window; Window window;
Plugins plugins;
}; };

4
src/plugins.cc

@ -3,9 +3,7 @@
#include "python_module.h" #include "python_module.h"
#include "terminal.hpp" #include "terminal.hpp"
Plugins::Plugins() : jucipp_module("Jucipp", Module::init_jucipp_module) { Plugins::Plugins(Config &config) : jucipp_module("Jucipp", Module::init_jucipp_module) {
auto &config = Config::get();
config.load();
#ifdef PYTHON_HOME_DIR #ifdef PYTHON_HOME_DIR
#ifdef _WIN32 #ifdef _WIN32
const std::wstring python_home(PYTHON_HOME_DIR); const std::wstring python_home(PYTHON_HOME_DIR);

3
src/plugins.h

@ -1,11 +1,12 @@
#pragma once #pragma once
#include "config.hpp"
#include "python_bind.h" #include "python_bind.h"
#include <pybind11/embed.h> #include <pybind11/embed.h>
class __attribute__((visibility("default"))) class __attribute__((visibility("default")))
Plugins { Plugins {
public: public:
Plugins(); Plugins(Config &config);
~Plugins(); ~Plugins();
void load(); void load();

2
tests/python_bindings/test_suite.cc

@ -2,7 +2,7 @@
#include "python_module.h" #include "python_module.h"
#include <iostream> #include <iostream>
suite::suite(const boost::filesystem::path &path) { suite::suite(const boost::filesystem::path &path) : plugins(config) {
py::initialize_interpreter(); py::initialize_interpreter();
if(!Py_IsInitialized()) { if(!Py_IsInitialized()) {
throw std::runtime_error("Unable to initialize interpreter"); throw std::runtime_error("Unable to initialize interpreter");

2
tests/stubs/plugins.cc

@ -1,7 +1,7 @@
#include "plugins.h" #include "plugins.h"
#include "python_module.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 PYTHON_HOME_DIR
#ifdef _WIN32 #ifdef _WIN32
const std::wstring python_home(PYTHON_HOME_DIR); const std::wstring python_home(PYTHON_HOME_DIR);

Loading…
Cancel
Save