From 1255bcb8a311c7f382f0bf66bbe791c6dfd77b30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= <blaz@mxxn.io>
Date: Sun, 9 May 2021 18:02:31 +0900
Subject: [PATCH] Simplify the compositor callback.

---
 helix-term/src/commands.rs   |  6 +++---
 helix-term/src/compositor.rs |  6 +++---
 helix-term/src/ui/menu.rs    | 10 ++++------
 helix-term/src/ui/picker.rs  | 10 ++++------
 helix-term/src/ui/popup.rs   | 10 ++++------
 helix-term/src/ui/prompt.rs  | 10 ++++------
 6 files changed, 22 insertions(+), 30 deletions(-)

diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index fe160ab8..e26dbbaa 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -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]
diff --git a/helix-term/src/compositor.rs b/helix-term/src/compositor.rs
index 7b828358..3a17904d 100644
--- a/helix-term/src/compositor.rs
+++ b/helix-term/src/compositor.rs
@@ -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,
diff --git a/helix-term/src/ui/menu.rs b/helix-term/src/ui/menu.rs
index d055d0d0..f9bfdd35 100644
--- a/helix-term/src/ui/menu.rs
+++ b/helix-term/src/ui/menu.rs
@@ -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
diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs
index 73cbf07f..6d77bf1d 100644
--- a/helix-term/src/ui/picker.rs
+++ b/helix-term/src/ui/picker.rs
@@ -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 {
diff --git a/helix-term/src/ui/popup.rs b/helix-term/src/ui/popup.rs
index 44e79c4f..7ce7166c 100644
--- a/helix-term/src/ui/popup.rs
+++ b/helix-term/src/ui/popup.rs
@@ -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
diff --git a/helix-term/src/ui/prompt.rs b/helix-term/src/ui/prompt.rs
index 0c2c1d8a..b09b8e14 100644
--- a/helix-term/src/ui/prompt.rs
+++ b/helix-term/src/ui/prompt.rs
@@ -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