Poll only visible web surfaces
This commit is contained in:
@@ -36,6 +36,7 @@ mod tab_lifecycle;
|
||||
mod tab_order;
|
||||
mod tab_selection;
|
||||
mod tabs;
|
||||
mod visible_content;
|
||||
|
||||
pub use bookmarks::{
|
||||
BookmarkImportSummary, ELYBOOKMARKS_FILE_EXTENSION, ELYBOOKMARKS_SCHEMA_VERSION,
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
use ely_domain::TabId;
|
||||
|
||||
use super::BrowserCore;
|
||||
use crate::CoreError;
|
||||
|
||||
impl BrowserCore {
|
||||
pub fn visible_content_tab_ids(&self) -> Result<Vec<TabId>, CoreError> {
|
||||
let active_tab = self.active_tab()?;
|
||||
let Some(split_id) = active_tab.split_id() else {
|
||||
return Ok(vec![active_tab.id().clone()]);
|
||||
};
|
||||
let layout = self
|
||||
.split_layouts
|
||||
.iter()
|
||||
.find(|layout| layout.id() == split_id)
|
||||
.ok_or_else(|| CoreError::SplitNotFound { id: split_id.clone() })?;
|
||||
if layout.pane_count() < 2 {
|
||||
return Ok(vec![active_tab.id().clone()]);
|
||||
}
|
||||
Ok(layout.panes().iter().map(|pane| pane.tab_id().clone()).collect())
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,31 @@ fn split_right_creates_two_pane_layout() -> Result<(), Box<dyn Error>> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn visible_content_tab_ids_returns_active_tab_without_split() -> Result<(), Box<dyn Error>> {
|
||||
let core = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||
let active_tab_id = core.active_tab()?.id().clone();
|
||||
|
||||
assert_eq!(core.visible_content_tab_ids()?, vec![active_tab_id]);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn visible_content_tab_ids_returns_split_panes() -> Result<(), Box<dyn Error>> {
|
||||
let mut core = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||
let split_id = core.split_active_tab_right()?;
|
||||
let snapshot = core.snapshot()?;
|
||||
let layout = snapshot
|
||||
.split_layouts
|
||||
.iter()
|
||||
.find(|layout| layout.id() == &split_id)
|
||||
.ok_or("missing split layout")?;
|
||||
let pane_ids = layout.panes().iter().map(|pane| pane.tab_id().clone()).collect::<Vec<_>>();
|
||||
|
||||
assert_eq!(core.visible_content_tab_ids()?, pane_ids);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn split_right_command_focuses_new_pane() -> Result<(), Box<dyn Error>> {
|
||||
let mut core = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||
|
||||
Reference in New Issue
Block a user