Simplify the compositor callback.

This commit is contained in:
Blaž Hrastnik 2021-05-09 18:02:31 +09:00
parent 35606a3daa
commit 1255bcb8a3
6 changed files with 22 additions and 30 deletions

View File

@ -63,9 +63,9 @@ impl<'a> Context<'a> {
/// Push a new component onto the compositor.
pub fn push_layer(&mut self, mut component: Box<dyn Component>) {
self.callback = Some(Box::new(
|compositor: &mut Compositor, editor: &mut Editor| compositor.push(component),
));
self.callback = Some(Box::new(|compositor: &mut Compositor| {
compositor.push(component)
}));
}
#[inline]

View File

@ -6,7 +6,7 @@ use crossterm::event::Event;
use helix_core::Position;
use tui::{buffer::Buffer as Surface, layout::Rect};
pub type Callback = Box<dyn FnOnce(&mut Compositor, &mut Editor)>;
pub type Callback = Box<dyn FnOnce(&mut Compositor)>;
// --> EventResult should have a callback that takes a context with methods like .popup(),
// .prompt() etc. That way we can abstract it from the renderer.
@ -22,7 +22,7 @@ pub enum EventResult {
Consumed(Option<Callback>),
}
use helix_view::{Editor, View};
use helix_view::Editor;
use crate::application::LspCallbacks;
@ -111,7 +111,7 @@ impl Compositor {
for layer in self.layers.iter_mut().rev() {
match layer.handle_event(event, cx) {
EventResult::Consumed(Some(callback)) => {
callback(self, cx.editor);
callback(self);
return true;
}
EventResult::Consumed(None) => return true,

View File

@ -142,12 +142,10 @@ impl<T: 'static> Component for Menu<T> {
_ => return EventResult::Ignored,
};
let close_fn = EventResult::Consumed(Some(Box::new(
|compositor: &mut Compositor, editor: &mut Editor| {
// remove the layer
compositor.pop();
},
)));
let close_fn = EventResult::Consumed(Some(Box::new(|compositor: &mut Compositor| {
// remove the layer
compositor.pop();
})));
match event {
// esc or ctrl-c aborts the completion and closes the menu

View File

@ -126,12 +126,10 @@ impl<T: 'static> Component for Picker<T> {
_ => return EventResult::Ignored,
};
let close_fn = EventResult::Consumed(Some(Box::new(
|compositor: &mut Compositor, editor: &mut Editor| {
// remove the layer
compositor.pop();
},
)));
let close_fn = EventResult::Consumed(Some(Box::new(|compositor: &mut Compositor| {
// remove the layer
compositor.pop();
})));
match key_event {
KeyEvent {

View File

@ -66,12 +66,10 @@ impl<T: Component> Component for Popup<T> {
_ => return EventResult::Ignored,
};
let close_fn = EventResult::Consumed(Some(Box::new(
|compositor: &mut Compositor, editor: &mut Editor| {
// remove the layer
compositor.pop();
},
)));
let close_fn = EventResult::Consumed(Some(Box::new(|compositor: &mut Compositor| {
// remove the layer
compositor.pop();
})));
match key {
// esc or ctrl-c aborts the completion and closes the menu

View File

@ -211,12 +211,10 @@ impl Component for Prompt {
_ => return EventResult::Ignored,
};
let close_fn = EventResult::Consumed(Some(Box::new(
|compositor: &mut Compositor, editor: &mut Editor| {
// remove the layer
compositor.pop();
},
)));
let close_fn = EventResult::Consumed(Some(Box::new(|compositor: &mut Compositor| {
// remove the layer
compositor.pop();
})));
match event {
// char or shift char