Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-view/src/editor.rs')
-rw-r--r--helix-view/src/editor.rs30
1 files changed, 24 insertions, 6 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index aa9a1153..747b01e4 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -4,6 +4,7 @@ use crate::{
document::{
DocumentOpenError, DocumentSavedEventFuture, DocumentSavedEventResult, Mode, SavePoint,
},
+ events::DocumentFocusLost,
graphics::{CursorKind, Rect},
handlers::Handlers,
info::Info,
@@ -14,6 +15,7 @@ use crate::{
Document, DocumentId, View, ViewId,
};
use dap::StackFrame;
+use helix_event::dispatch;
use helix_vcs::DiffProviderRegistry;
use futures_util::stream::select_all::SelectAll;
@@ -1586,7 +1588,7 @@ impl Editor {
self.enter_normal_mode();
}
- match action {
+ let focust_lost = match action {
Action::Replace => {
let (view, doc) = current_ref!(self);
// If the current view is an empty scratch buffer and is not displayed in any other views, delete it.
@@ -1636,6 +1638,10 @@ impl Editor {
self.replace_document_in_view(view_id, id);
+ dispatch(DocumentFocusLost {
+ editor: self,
+ doc: id,
+ });
return;
}
Action::Load => {
@@ -1646,6 +1652,7 @@ impl Editor {
return;
}
Action::HorizontalSplit | Action::VerticalSplit => {
+ let focus_lost = self.tree.try_get(self.tree.focus).map(|view| view.doc);
// copy the current view, unless there is no view yet
let view = self
.tree
@@ -1665,10 +1672,17 @@ impl Editor {
let doc = doc_mut!(self, &id);
doc.ensure_view_init(view_id);
doc.mark_as_focused();
+ focus_lost
}
- }
+ };
self._refresh();
+ if let Some(focus_lost) = focust_lost {
+ dispatch(DocumentFocusLost {
+ editor: self,
+ doc: focus_lost,
+ });
+ }
}
/// Generate an id for a new document and register it.
@@ -1895,11 +1909,15 @@ impl Editor {
let doc = doc_mut!(self, &view.doc);
view.sync_changes(doc);
}
+ let view = view!(self, view_id);
+ let doc = doc_mut!(self, &view.doc);
+ doc.mark_as_focused();
+ let focus_lost = self.tree.get(prev_id).doc;
+ dispatch(DocumentFocusLost {
+ editor: self,
+ doc: focus_lost,
+ });
}
-
- let view = view!(self, view_id);
- let doc = doc_mut!(self, &view.doc);
- doc.mark_as_focused();
}
pub fn focus_next(&mut self) {