Fix inlay hints display reverting to settings value on theme change (#22605)
Closes #4276 Release Notes: - Fixed inlay hints that have been manually enabled disappearing when theme selector is used.
This commit is contained in:
parent
9613084f59
commit
5f1eee3c66
1 changed files with 14 additions and 3 deletions
|
@ -36,6 +36,7 @@ pub struct InlayHintCache {
|
||||||
allowed_hint_kinds: HashSet<Option<InlayHintKind>>,
|
allowed_hint_kinds: HashSet<Option<InlayHintKind>>,
|
||||||
version: usize,
|
version: usize,
|
||||||
pub(super) enabled: bool,
|
pub(super) enabled: bool,
|
||||||
|
enabled_in_settings: bool,
|
||||||
update_tasks: HashMap<ExcerptId, TasksForRanges>,
|
update_tasks: HashMap<ExcerptId, TasksForRanges>,
|
||||||
refresh_task: Option<Task<()>>,
|
refresh_task: Option<Task<()>>,
|
||||||
invalidate_debounce: Option<Duration>,
|
invalidate_debounce: Option<Duration>,
|
||||||
|
@ -268,6 +269,7 @@ impl InlayHintCache {
|
||||||
Self {
|
Self {
|
||||||
allowed_hint_kinds: inlay_hint_settings.enabled_inlay_hint_kinds(),
|
allowed_hint_kinds: inlay_hint_settings.enabled_inlay_hint_kinds(),
|
||||||
enabled: inlay_hint_settings.enabled,
|
enabled: inlay_hint_settings.enabled,
|
||||||
|
enabled_in_settings: inlay_hint_settings.enabled,
|
||||||
hints: HashMap::default(),
|
hints: HashMap::default(),
|
||||||
update_tasks: HashMap::default(),
|
update_tasks: HashMap::default(),
|
||||||
refresh_task: None,
|
refresh_task: None,
|
||||||
|
@ -288,10 +290,21 @@ impl InlayHintCache {
|
||||||
visible_hints: Vec<Inlay>,
|
visible_hints: Vec<Inlay>,
|
||||||
cx: &mut ViewContext<Editor>,
|
cx: &mut ViewContext<Editor>,
|
||||||
) -> ControlFlow<Option<InlaySplice>> {
|
) -> ControlFlow<Option<InlaySplice>> {
|
||||||
|
let old_enabled = self.enabled;
|
||||||
|
// If the setting for inlay hints has changed, update `enabled`. This condition avoids inlay
|
||||||
|
// hint visibility changes when other settings change (such as theme).
|
||||||
|
//
|
||||||
|
// Another option might be to store whether the user has manually toggled inlay hint
|
||||||
|
// visibility, and prefer this. This could lead to confusion as it means inlay hint
|
||||||
|
// visibility would not change when updating the setting if they were ever toggled.
|
||||||
|
if new_hint_settings.enabled != self.enabled_in_settings {
|
||||||
|
self.enabled = new_hint_settings.enabled;
|
||||||
|
};
|
||||||
|
self.enabled_in_settings = new_hint_settings.enabled;
|
||||||
self.invalidate_debounce = debounce_value(new_hint_settings.edit_debounce_ms);
|
self.invalidate_debounce = debounce_value(new_hint_settings.edit_debounce_ms);
|
||||||
self.append_debounce = debounce_value(new_hint_settings.scroll_debounce_ms);
|
self.append_debounce = debounce_value(new_hint_settings.scroll_debounce_ms);
|
||||||
let new_allowed_hint_kinds = new_hint_settings.enabled_inlay_hint_kinds();
|
let new_allowed_hint_kinds = new_hint_settings.enabled_inlay_hint_kinds();
|
||||||
match (self.enabled, new_hint_settings.enabled) {
|
match (old_enabled, self.enabled) {
|
||||||
(false, false) => {
|
(false, false) => {
|
||||||
self.allowed_hint_kinds = new_allowed_hint_kinds;
|
self.allowed_hint_kinds = new_allowed_hint_kinds;
|
||||||
ControlFlow::Break(None)
|
ControlFlow::Break(None)
|
||||||
|
@ -314,7 +327,6 @@ impl InlayHintCache {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(true, false) => {
|
(true, false) => {
|
||||||
self.enabled = new_hint_settings.enabled;
|
|
||||||
self.allowed_hint_kinds = new_allowed_hint_kinds;
|
self.allowed_hint_kinds = new_allowed_hint_kinds;
|
||||||
if self.hints.is_empty() {
|
if self.hints.is_empty() {
|
||||||
ControlFlow::Break(None)
|
ControlFlow::Break(None)
|
||||||
|
@ -327,7 +339,6 @@ impl InlayHintCache {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(false, true) => {
|
(false, true) => {
|
||||||
self.enabled = new_hint_settings.enabled;
|
|
||||||
self.allowed_hint_kinds = new_allowed_hint_kinds;
|
self.allowed_hint_kinds = new_allowed_hint_kinds;
|
||||||
ControlFlow::Continue(())
|
ControlFlow::Continue(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue