Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 31 additions & 16 deletions zellij-server/src/tab/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2849,6 +2849,9 @@ impl Tab {
// bool => is_scrollback_editor
self.suppressed_panes.iter()
}
fn get_non_selectable_tiled_panes(&self) -> impl Iterator<Item = (&PaneId, &Box<dyn Pane>)> {
self.get_tiled_panes().filter(|(_, p)| !p.selectable())
}
fn get_selectable_tiled_panes(&self) -> impl Iterator<Item = (&PaneId, &Box<dyn Pane>)> {
self.get_tiled_panes().filter(|(_, p)| p.selectable())
}
Expand Down Expand Up @@ -3909,22 +3912,6 @@ impl Tab {
) -> Result<Option<PaneId>> {
let err_context = || format!("failed to get id of pane at position {point:?}");

if self.tiled_panes.fullscreen_is_active()
&& self
.is_position_inside_viewport(point)
.with_context(err_context)?
{
// TODO: instead of doing this, record the pane that is in fullscreen
let first_client_id = self
.connected_clients
.borrow()
.iter()
.copied()
.next()
.with_context(err_context)?;
return Ok(self.tiled_panes.get_active_pane_id(first_client_id));
}

let (stacked_pane_ids_under_flexible_pane, _stacked_pane_ids_over_flexible_pane) = {
self.tiled_panes
.stacked_pane_ids_under_and_over_flexible_panes()
Expand Down Expand Up @@ -3959,6 +3946,34 @@ impl Tab {
geom_to_compare_against.contains(point)
};

if self.tiled_panes.fullscreen_is_active()
&& self
.is_position_inside_viewport(point)
.with_context(err_context)?
{
// non-selectable panes are visible in fullscreen
if !search_selectable {
if let Some(id) = self
.get_non_selectable_tiled_panes()
.find(|(_, p)| {
pane_contains_point(p, point, &stacked_pane_ids_under_flexible_pane)
})
.map(|(&id, _)| id)
{
return Ok(Some(id));
}
}
// TODO: instead of doing this, record the pane that is in fullscreen
let first_client_id = self
.connected_clients
.borrow()
.iter()
.copied()
.next()
.with_context(err_context)?;
return Ok(self.tiled_panes.get_active_pane_id(first_client_id));
}

if search_selectable {
Ok(self
.get_selectable_tiled_panes()
Expand Down