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. 4
      tests/stubs/plugins.cc

9
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);
}

6
src/juci.hpp

@ -2,9 +2,6 @@
#include "window.hpp"
#include <boost/filesystem.hpp>
#include <gtkmm.h>
#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<Gio::ApplicationCommandLine> &cmd) override;
void on_activate() override;
void on_startup() override;
@ -43,5 +40,4 @@ private:
std::vector<std::pair<boost::filesystem::path, size_t>> files;
std::vector<std::string> errors;
Window window;
Plugins plugins;
};

4
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);

3
src/plugins.h

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

2
tests/python_bindings/test_suite.cc

@ -2,7 +2,7 @@
#include "python_module.h"
#include <iostream>
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");

4
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

Loading…
Cancel
Save