Simplify the compositor callback.

pull/11/head
Blaž Hrastnik 4 years ago
parent 35606a3daa
commit 1255bcb8a3

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

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

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

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

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

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

Loading…
Cancel
Save