diff --git a/src/ui/composable_view.rs b/src/ui/composable_view.rs index 16774e910a1651a03a32088e68aac41aef7a0264..a7f71a02ba1a3d0b617824761ed9a090e4093cd9 100644 --- a/src/ui/composable_view.rs +++ b/src/ui/composable_view.rs @@ -47,6 +47,7 @@ impl eframe::App for ComposableView { ((Modifiers::NONE, Key::H), PaneAction::SplitH), ((Modifiers::NONE, Key::C), PaneAction::Close), ((Modifiers::SHIFT, Key::Escape), PaneAction::Maximize), + ((Modifiers::NONE, Key::Escape), PaneAction::Exit), ]; pane_action = pane_action.or(shortcuts::map_to_action(ctx, &key_action_pairs[..]) .map(|action| (action, hovered_pane))); @@ -56,34 +57,38 @@ impl eframe::App for ComposableView { if let Some((action, hovered_tile)) = pane_action.take() { match action { PaneAction::SplitH => { - let hovered_tile_pane = panes_tree.tiles.remove(hovered_tile).unwrap(); - let left_pane = panes_tree.tiles.insert_new(hovered_tile_pane); - let right_pane = panes_tree.tiles.insert_pane(Pane::default()); - panes_tree.tiles.insert( - hovered_tile, - Tile::Container(Container::Linear(Linear::new_binary( - LinearDir::Horizontal, - [left_pane, right_pane], - 0.5, - ))), - ); + if self.maximized_pane.is_none() { + let hovered_tile_pane = panes_tree.tiles.remove(hovered_tile).unwrap(); + let left_pane = panes_tree.tiles.insert_new(hovered_tile_pane); + let right_pane = panes_tree.tiles.insert_pane(Pane::default()); + panes_tree.tiles.insert( + hovered_tile, + Tile::Container(Container::Linear(Linear::new_binary( + LinearDir::Horizontal, + [left_pane, right_pane], + 0.5, + ))), + ); + } } PaneAction::SplitV => { - let hovered_tile_pane = panes_tree.tiles.remove(hovered_tile).unwrap(); - let replaced = panes_tree.tiles.insert_new(hovered_tile_pane); - let lower_pane = panes_tree.tiles.insert_pane(Pane::default()); - panes_tree.tiles.insert( - hovered_tile, - Tile::Container(Container::Linear(Linear::new_binary( - LinearDir::Vertical, - [replaced, lower_pane], - 0.5, - ))), - ); + if self.maximized_pane.is_none() { + let hovered_tile_pane = panes_tree.tiles.remove(hovered_tile).unwrap(); + let replaced = panes_tree.tiles.insert_new(hovered_tile_pane); + let lower_pane = panes_tree.tiles.insert_pane(Pane::default()); + panes_tree.tiles.insert( + hovered_tile, + Tile::Container(Container::Linear(Linear::new_binary( + LinearDir::Vertical, + [replaced, lower_pane], + 0.5, + ))), + ); + } } PaneAction::Close => { // Ignore if the root pane is the only one - if panes_tree.tiles.len() != 1 { + if panes_tree.tiles.len() != 1 && self.maximized_pane.is_none() { panes_tree.remove_recursively(hovered_tile); } } @@ -111,6 +116,11 @@ impl eframe::App for ComposableView { } } } + PaneAction::Exit => { + if self.maximized_pane.is_some() { + self.maximized_pane = None; + } + } } } @@ -279,4 +289,5 @@ pub enum PaneAction { Close, Replace(Box<Pane>), Maximize, + Exit, }