fix: refresh cached diff colors for external theme updates
This commit is contained in:
+17
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user