Added side bar restoration
This commit is contained in:
parent
8a48567857
commit
b8d423555b
3 changed files with 28 additions and 7 deletions
|
@ -36,6 +36,7 @@ impl Domain for Workspace {
|
||||||
dock_visible INTEGER, // Boolean
|
dock_visible INTEGER, // Boolean
|
||||||
dock_anchor TEXT, // Enum: 'Bottom' / 'Right' / 'Expanded'
|
dock_anchor TEXT, // Enum: 'Bottom' / 'Right' / 'Expanded'
|
||||||
dock_pane INTEGER, // NULL indicates that we don't have a dock pane yet
|
dock_pane INTEGER, // NULL indicates that we don't have a dock pane yet
|
||||||
|
project_panel_open INTEGER, //Boolean
|
||||||
timestamp TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
timestamp TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||||
FOREIGN KEY(dock_pane) REFERENCES panes(pane_id)
|
FOREIGN KEY(dock_pane) REFERENCES panes(pane_id)
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
@ -100,19 +101,20 @@ impl WorkspaceDb {
|
||||||
|
|
||||||
// Note that we re-assign the workspace_id here in case it's empty
|
// Note that we re-assign the workspace_id here in case it's empty
|
||||||
// and we've grabbed the most recent workspace
|
// and we've grabbed the most recent workspace
|
||||||
let (workspace_id, workspace_location, dock_position): (
|
let (workspace_id, workspace_location, project_panel_open, dock_position): (
|
||||||
WorkspaceId,
|
WorkspaceId,
|
||||||
WorkspaceLocation,
|
WorkspaceLocation,
|
||||||
|
bool,
|
||||||
DockPosition,
|
DockPosition,
|
||||||
) = iife!({
|
) = iife!({
|
||||||
if worktree_roots.len() == 0 {
|
if worktree_roots.len() == 0 {
|
||||||
self.select_row(sql!(
|
self.select_row(sql!(
|
||||||
SELECT workspace_id, workspace_location, dock_visible, dock_anchor
|
SELECT workspace_id, workspace_location, project_panel_open, dock_visible, dock_anchor
|
||||||
FROM workspaces
|
FROM workspaces
|
||||||
ORDER BY timestamp DESC LIMIT 1))?()?
|
ORDER BY timestamp DESC LIMIT 1))?()?
|
||||||
} else {
|
} else {
|
||||||
self.select_row_bound(sql!(
|
self.select_row_bound(sql!(
|
||||||
SELECT workspace_id, workspace_location, dock_visible, dock_anchor
|
SELECT workspace_id, workspace_location, project_panel_open, dock_visible, dock_anchor
|
||||||
FROM workspaces
|
FROM workspaces
|
||||||
WHERE workspace_location = ?))?(&workspace_location)?
|
WHERE workspace_location = ?))?(&workspace_location)?
|
||||||
}
|
}
|
||||||
|
@ -133,6 +135,7 @@ impl WorkspaceDb {
|
||||||
.context("Getting center group")
|
.context("Getting center group")
|
||||||
.log_err()?,
|
.log_err()?,
|
||||||
dock_position,
|
dock_position,
|
||||||
|
project_panel_open
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,18 +161,20 @@ impl WorkspaceDb {
|
||||||
INSERT INTO workspaces(
|
INSERT INTO workspaces(
|
||||||
workspace_id,
|
workspace_id,
|
||||||
workspace_location,
|
workspace_location,
|
||||||
|
project_panel_open,
|
||||||
dock_visible,
|
dock_visible,
|
||||||
dock_anchor,
|
dock_anchor,
|
||||||
timestamp
|
timestamp
|
||||||
)
|
)
|
||||||
VALUES (?1, ?2, ?3, ?4, CURRENT_TIMESTAMP)
|
VALUES (?1, ?2, ?3, ?4, ?5, CURRENT_TIMESTAMP)
|
||||||
ON CONFLICT DO
|
ON CONFLICT DO
|
||||||
UPDATE SET
|
UPDATE SET
|
||||||
workspace_location = ?2,
|
workspace_location = ?2,
|
||||||
dock_visible = ?3,
|
project_panel_open = ?3,
|
||||||
dock_anchor = ?4,
|
dock_visible = ?4,
|
||||||
|
dock_anchor = ?5,
|
||||||
timestamp = CURRENT_TIMESTAMP
|
timestamp = CURRENT_TIMESTAMP
|
||||||
))?((workspace.id, &workspace.location, workspace.dock_position))
|
))?((workspace.id, &workspace.location, workspace.project_panel_open, workspace.dock_position))
|
||||||
.context("Updating workspace")?;
|
.context("Updating workspace")?;
|
||||||
|
|
||||||
// Save center pane group and dock pane
|
// Save center pane group and dock pane
|
||||||
|
@ -273,6 +278,7 @@ impl WorkspaceDb {
|
||||||
.collect::<Result<_>>()
|
.collect::<Result<_>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn save_pane_group(
|
fn save_pane_group(
|
||||||
conn: &Connection,
|
conn: &Connection,
|
||||||
workspace_id: WorkspaceId,
|
workspace_id: WorkspaceId,
|
||||||
|
@ -462,6 +468,7 @@ mod tests {
|
||||||
dock_position: crate::dock::DockPosition::Shown(DockAnchor::Bottom),
|
dock_position: crate::dock::DockPosition::Shown(DockAnchor::Bottom),
|
||||||
center_group: Default::default(),
|
center_group: Default::default(),
|
||||||
dock_pane: Default::default(),
|
dock_pane: Default::default(),
|
||||||
|
project_panel_open: true
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut workspace_2 = SerializedWorkspace {
|
let mut workspace_2 = SerializedWorkspace {
|
||||||
|
@ -470,6 +477,7 @@ mod tests {
|
||||||
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Expanded),
|
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Expanded),
|
||||||
center_group: Default::default(),
|
center_group: Default::default(),
|
||||||
dock_pane: Default::default(),
|
dock_pane: Default::default(),
|
||||||
|
project_panel_open: false
|
||||||
};
|
};
|
||||||
|
|
||||||
db.save_workspace(workspace_1.clone()).await;
|
db.save_workspace(workspace_1.clone()).await;
|
||||||
|
@ -575,6 +583,7 @@ mod tests {
|
||||||
dock_position: DockPosition::Shown(DockAnchor::Bottom),
|
dock_position: DockPosition::Shown(DockAnchor::Bottom),
|
||||||
center_group,
|
center_group,
|
||||||
dock_pane,
|
dock_pane,
|
||||||
|
project_panel_open: true
|
||||||
};
|
};
|
||||||
|
|
||||||
db.save_workspace(workspace.clone()).await;
|
db.save_workspace(workspace.clone()).await;
|
||||||
|
@ -602,6 +611,7 @@ mod tests {
|
||||||
dock_position: crate::dock::DockPosition::Shown(DockAnchor::Bottom),
|
dock_position: crate::dock::DockPosition::Shown(DockAnchor::Bottom),
|
||||||
center_group: Default::default(),
|
center_group: Default::default(),
|
||||||
dock_pane: Default::default(),
|
dock_pane: Default::default(),
|
||||||
|
project_panel_open: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut workspace_2 = SerializedWorkspace {
|
let mut workspace_2 = SerializedWorkspace {
|
||||||
|
@ -610,6 +620,7 @@ mod tests {
|
||||||
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Expanded),
|
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Expanded),
|
||||||
center_group: Default::default(),
|
center_group: Default::default(),
|
||||||
dock_pane: Default::default(),
|
dock_pane: Default::default(),
|
||||||
|
project_panel_open: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
db.save_workspace(workspace_1.clone()).await;
|
db.save_workspace(workspace_1.clone()).await;
|
||||||
|
@ -645,6 +656,7 @@ mod tests {
|
||||||
dock_position: DockPosition::Shown(DockAnchor::Right),
|
dock_position: DockPosition::Shown(DockAnchor::Right),
|
||||||
center_group: Default::default(),
|
center_group: Default::default(),
|
||||||
dock_pane: Default::default(),
|
dock_pane: Default::default(),
|
||||||
|
project_panel_open: false
|
||||||
};
|
};
|
||||||
|
|
||||||
db.save_workspace(workspace_3.clone()).await;
|
db.save_workspace(workspace_3.clone()).await;
|
||||||
|
@ -679,6 +691,7 @@ mod tests {
|
||||||
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Right),
|
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Right),
|
||||||
center_group: center_group.clone(),
|
center_group: center_group.clone(),
|
||||||
dock_pane,
|
dock_pane,
|
||||||
|
project_panel_open: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ pub struct SerializedWorkspace {
|
||||||
pub dock_position: DockPosition,
|
pub dock_position: DockPosition,
|
||||||
pub center_group: SerializedPaneGroup,
|
pub center_group: SerializedPaneGroup,
|
||||||
pub dock_pane: SerializedPane,
|
pub dock_pane: SerializedPane,
|
||||||
|
pub project_panel_open: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||||
|
|
|
@ -2340,6 +2340,7 @@ impl Workspace {
|
||||||
dock_position: self.dock.position(),
|
dock_position: self.dock.position(),
|
||||||
dock_pane,
|
dock_pane,
|
||||||
center_group,
|
center_group,
|
||||||
|
project_panel_open: self.left_sidebar.read(cx).is_open(),
|
||||||
};
|
};
|
||||||
|
|
||||||
cx.background()
|
cx.background()
|
||||||
|
@ -2383,6 +2384,12 @@ impl Workspace {
|
||||||
// Swap workspace center group
|
// Swap workspace center group
|
||||||
workspace.center = PaneGroup::with_root(root);
|
workspace.center = PaneGroup::with_root(root);
|
||||||
|
|
||||||
|
// Note, if this is moved after 'set_dock_position'
|
||||||
|
// it causes an infinite loop.
|
||||||
|
if serialized_workspace.project_panel_open {
|
||||||
|
workspace.toggle_sidebar_item_focus(SidebarSide::Left, 0, cx)
|
||||||
|
}
|
||||||
|
|
||||||
Dock::set_dock_position(workspace, serialized_workspace.dock_position, cx);
|
Dock::set_dock_position(workspace, serialized_workspace.dock_position, cx);
|
||||||
|
|
||||||
if let Some(active_pane) = active_pane {
|
if let Some(active_pane) = active_pane {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue