diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-03-31 02:03:45 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-03-31 02:03:45 +0300 |
| commit | ea57a65321edfc44277555de73449bce8b5d58fa (patch) | |
| tree | 30c403c00ecbc3e1cfcade5b24fa0094ebc14d01 /src/persist.rs | |
| parent | 41a0269de8594a66f010db48b569567f2aa9c3f2 (diff) | |
fix: make app rendering event-driven
Diffstat (limited to 'src/persist.rs')
| -rw-r--r-- | src/persist.rs | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/persist.rs b/src/persist.rs index 9cc6205e..49a36141 100644 --- a/src/persist.rs +++ b/src/persist.rs @@ -4,12 +4,14 @@ use std::collections::HashMap; use std::path::PathBuf; +use std::sync::atomic::AtomicBool; +use std::sync::Arc; use ratatui::layout::Direction; use serde::{Deserialize, Serialize}; use tracing::{error, info, warn}; -use tokio::sync::mpsc; +use tokio::sync::{mpsc, Notify}; use crate::events::AppEvent; use crate::layout::{Node, PaneId, TileLayout}; @@ -132,11 +134,22 @@ pub fn restore( rows: u16, cols: u16, events: mpsc::Sender<AppEvent>, + render_notify: Arc<Notify>, + render_dirty: Arc<AtomicBool>, ) -> Vec<Workspace> { snapshot .workspaces .iter() - .filter_map(|ws_snap| restore_workspace(ws_snap, rows, cols, events.clone())) + .filter_map(|ws_snap| { + restore_workspace( + ws_snap, + rows, + cols, + events.clone(), + render_notify.clone(), + render_dirty.clone(), + ) + }) .collect() } @@ -145,6 +158,8 @@ fn restore_workspace( rows: u16, cols: u16, events: mpsc::Sender<AppEvent>, + render_notify: Arc<Notify>, + render_dirty: Arc<AtomicBool>, ) -> Option<Workspace> { let (node, id_map) = restore_node_remapped(&snap.layout); let pane_ids = collect_pane_ids(&node); @@ -169,7 +184,15 @@ fn restore_workspace( .map(|p| p.cwd.clone()) .unwrap_or_else(|| std::env::current_dir().unwrap_or_else(|_| "/".into())); - match PaneRuntime::spawn(*id, rows, cols, cwd, events.clone()) { + match PaneRuntime::spawn( + *id, + rows, + cols, + cwd, + events.clone(), + render_notify.clone(), + render_dirty.clone(), + ) { Ok(runtime) => { panes.insert(*id, PaneState::new()); runtimes.insert(*id, runtime); @@ -205,6 +228,8 @@ fn restore_workspace( runtimes, zoomed: snap.zoomed, events, + render_notify, + render_dirty, }) } |
