dock: Keep the panel state when meet invalid panel. (#423)

Close #422
This commit is contained in:
Jason Lee 2024-11-15 10:31:20 +08:00 committed by GitHub
parent 3db84c1247
commit cdee8c7ffd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 8 deletions

View file

@ -5,20 +5,20 @@ use gpui::{
use crate::theme::ActiveTheme as _;
use super::{DockItemInfo, DockItemState, Panel, PanelEvent};
use super::{DockItemState, Panel, PanelEvent};
pub(crate) struct InvalidPanel {
name: SharedString,
focus_handle: FocusHandle,
info: DockItemInfo,
old_state: DockItemState,
}
impl InvalidPanel {
pub(crate) fn new(name: &str, info: DockItemInfo, cx: &mut WindowContext) -> Self {
pub(crate) fn new(name: &str, state: DockItemState, cx: &mut WindowContext) -> Self {
Self {
focus_handle: cx.focus_handle(),
name: SharedString::from(name.to_owned()),
info,
old_state: state,
}
}
}
@ -28,9 +28,7 @@ impl Panel for InvalidPanel {
}
fn dump(&self, _cx: &AppContext) -> super::DockItemState {
let mut state = DockItemState::new(self);
state.info = self.info.clone();
state
self.old_state.clone()
}
}
impl EventEmitter<PanelEvent> for InvalidPanel {}

View file

@ -190,7 +190,7 @@ impl DockItemState {
} else {
// Show an invalid panel if the panel is not registered.
Box::new(
cx.new_view(|cx| InvalidPanel::new(&self.panel_name, info.clone(), cx)),
cx.new_view(|cx| InvalidPanel::new(&self.panel_name, self.clone(), cx)),
)
};