Check loaded state
This commit is contained in:
parent
86e18562b5
commit
a3eba12b24
@ -1,17 +1,44 @@
|
|||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::cell::RefCell;
|
use std::cell::{RefCell, RefMut};
|
||||||
|
|
||||||
|
use neovim_lib::{Neovim, NeovimApi, Value};
|
||||||
|
|
||||||
use nvim::NeovimClient;
|
use nvim::NeovimClient;
|
||||||
|
|
||||||
pub struct Manager {
|
pub struct Manager {
|
||||||
|
nvim: Option<Rc<RefCell<NeovimClient>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Manager {
|
impl Manager {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Manager { }
|
Manager {
|
||||||
|
nvim: None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn initialize(&mut self, nvim: Rc<RefCell<NeovimClient>>) {
|
pub fn initialize(&mut self, nvim: Rc<RefCell<NeovimClient>>) {
|
||||||
|
self.nvim = Some(nvim);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn nvim(&self) -> Option<RefMut<Neovim>> {
|
||||||
|
let nvim_client = self.nvim.as_ref().unwrap();
|
||||||
|
if nvim_client.borrow().is_initialized() {
|
||||||
|
Some(RefMut::map(nvim_client.borrow_mut(), |n| n.nvim_mut()))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_state(&self) -> State {
|
||||||
|
if let Some(mut nvim) = self.nvim() {
|
||||||
|
nvim.command("exists('g:loaded_plug')");
|
||||||
|
}
|
||||||
|
|
||||||
|
State::Unknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum State {
|
||||||
|
Unknown,
|
||||||
|
AlreadyLoaded,
|
||||||
|
}
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
use gtk;
|
use gtk;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
||||||
pub struct Ui {}
|
use super::manager;
|
||||||
|
|
||||||
impl Ui {
|
pub struct Ui <'a> {
|
||||||
pub fn new() -> Self {
|
manager: &'a manager::Manager,
|
||||||
Ui {}
|
}
|
||||||
|
|
||||||
|
impl <'a> Ui <'a> {
|
||||||
|
pub fn new(manager: &'a manager::Manager) -> Ui<'a> {
|
||||||
|
Ui {
|
||||||
|
manager,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn show<T: IsA<gtk::Window>>(&self, parent: &T) {
|
pub fn show<T: IsA<gtk::Window>>(&self, parent: &T) {
|
||||||
|
@ -130,8 +130,10 @@ impl Ui {
|
|||||||
let plug_btn = ToolButton::new(Some(&plug_image), "Plug");
|
let plug_btn = ToolButton::new(Some(&plug_image), "Plug");
|
||||||
|
|
||||||
let comps_ref = self.comps.clone();
|
let comps_ref = self.comps.clone();
|
||||||
|
let plug_manager_ref = self.plug_manager.clone();
|
||||||
plug_btn.connect_clicked(move |_| {
|
plug_btn.connect_clicked(move |_| {
|
||||||
plug_manager::Ui::new().show(comps_ref.borrow().window.as_ref().unwrap())
|
plug_manager::Ui::new(&mut *plug_manager_ref.borrow_mut())
|
||||||
|
.show(comps_ref.borrow().window.as_ref().unwrap())
|
||||||
});
|
});
|
||||||
header_bar.pack_start(&plug_btn);
|
header_bar.pack_start(&plug_btn);
|
||||||
|
|
||||||
@ -166,7 +168,9 @@ impl Ui {
|
|||||||
let state_ref = self.shell.borrow().state.clone();
|
let state_ref = self.shell.borrow().state.clone();
|
||||||
let plug_manager_ref = self.plug_manager.clone();
|
let plug_manager_ref = self.plug_manager.clone();
|
||||||
shell.set_nvim_started_cb(Some(move || {
|
shell.set_nvim_started_cb(Some(move || {
|
||||||
plug_manager_ref.borrow_mut().initialize(state_ref.borrow().nvim_clone());
|
plug_manager_ref.borrow_mut().initialize(
|
||||||
|
state_ref.borrow().nvim_clone(),
|
||||||
|
);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user