fix: refresh cached diff colors for external theme updates

This commit is contained in:
2026-10-11 21:53:28 +02:00
parent 5bf1f1df59
commit b41db31831
4 changed files with 75 additions and 5 deletions
+17 -3
View File
@@ -269,6 +269,7 @@ struct BufferViewports {
parked: BTreeMap<usize, PaneViewport>,
rects: Vec<(usize, Rect)>,
theme: Option<ThemeColors>,
diff_visible: bool,
}
#[derive(Default)]
@@ -550,6 +551,16 @@ impl BufferViewports {
} else {
draw_overlays(frame, editor, area, self.panels.caret, &mut self.panels);
}
self.diff_visible = self
.panels
.diff
.iter()
.chain(
self.parked
.values()
.filter_map(|pane| pane.panels.diff.as_ref()),
)
.any(|geometry| geometry.viewport.is_some());
}
fn draw_session(&mut self, frame: &mut Frame, session: &mut EditorSession) {
@@ -785,9 +796,12 @@ pub fn run(session: &mut EditorSession) -> io::Result<()> {
redraw = false;
}
// Start the reply deadline after painting, not before expensive syntax initialization.
if query_theme {
colors.query(&mut output, Instant::now())?;
query_theme = false;
if query_theme || viewports.diff_visible {
let now = Instant::now();
if query_theme || colors.refresh_due(now) {
colors.query(&mut output, now)?;
query_theme = false;
}
}
let input = if let Some(input) = pending.take() {
input