mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
rudimentary handling of tabs
This commit is contained in:
parent
fee5428316
commit
96f75465cf
1 changed files with 16 additions and 5 deletions
|
@ -26,6 +26,12 @@ pub struct Browser {
|
||||||
/// are not supported yet. None until created.
|
/// are not supported yet. None until created.
|
||||||
browser_id: Option<BrowserId>,
|
browser_id: Option<BrowserId>,
|
||||||
|
|
||||||
|
// A rudimentary stack of "tabs".
|
||||||
|
// EmbedderMsg::BrowserCreated will push onto it.
|
||||||
|
// EmbedderMsg::CloseBrowser will pop from it,
|
||||||
|
// and exit if it is empty afterwards.
|
||||||
|
browsers: Vec<BrowserId>,
|
||||||
|
|
||||||
title: Option<String>,
|
title: Option<String>,
|
||||||
status: Option<String>,
|
status: Option<String>,
|
||||||
favicon: Option<ServoUrl>,
|
favicon: Option<ServoUrl>,
|
||||||
|
@ -47,6 +53,7 @@ impl Browser {
|
||||||
title: None,
|
title: None,
|
||||||
current_url: None,
|
current_url: None,
|
||||||
browser_id: None,
|
browser_id: None,
|
||||||
|
browsers: Vec::new(),
|
||||||
status: None,
|
status: None,
|
||||||
favicon: None,
|
favicon: None,
|
||||||
loading_state: None,
|
loading_state: None,
|
||||||
|
@ -62,6 +69,7 @@ impl Browser {
|
||||||
|
|
||||||
pub fn set_browser_id(&mut self, browser_id: BrowserId) {
|
pub fn set_browser_id(&mut self, browser_id: BrowserId) {
|
||||||
self.browser_id = Some(browser_id);
|
self.browser_id = Some(browser_id);
|
||||||
|
self.browsers.push(browser_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_window_events(&mut self, events: Vec<WindowEvent>) {
|
pub fn handle_window_events(&mut self, events: Vec<WindowEvent>) {
|
||||||
|
@ -293,7 +301,7 @@ impl Browser {
|
||||||
}
|
}
|
||||||
EmbedderMsg::BrowserCreated(new_browser_id) => {
|
EmbedderMsg::BrowserCreated(new_browser_id) => {
|
||||||
// TODO: properly handle a new "tab"
|
// TODO: properly handle a new "tab"
|
||||||
self.browser_id = Some(new_browser_id);
|
self.browsers.push(new_browser_id);
|
||||||
self.event_queue.push(WindowEvent::SelectBrowser(new_browser_id));
|
self.event_queue.push(WindowEvent::SelectBrowser(new_browser_id));
|
||||||
}
|
}
|
||||||
EmbedderMsg::KeyEvent(ch, key, state, modified) => {
|
EmbedderMsg::KeyEvent(ch, key, state, modified) => {
|
||||||
|
@ -321,10 +329,13 @@ impl Browser {
|
||||||
self.loading_state = Some(LoadingState::Loaded);
|
self.loading_state = Some(LoadingState::Loaded);
|
||||||
}
|
}
|
||||||
EmbedderMsg::CloseBrowser => {
|
EmbedderMsg::CloseBrowser => {
|
||||||
self.browser_id = None;
|
// TODO: close the appropriate "tab".
|
||||||
// Nothing left to do for now,
|
let _ = self.browsers.pop();
|
||||||
// but could hide a tab, and show another one, instead of quitting.
|
if let Some(prev_browser_id) = self.browsers.last() {
|
||||||
self.event_queue.push(WindowEvent::Quit);
|
self.event_queue.push(WindowEvent::SelectBrowser(*prev_browser_id));
|
||||||
|
} else {
|
||||||
|
self.event_queue.push(WindowEvent::Quit);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
EmbedderMsg::Shutdown => {
|
EmbedderMsg::Shutdown => {
|
||||||
self.shutdown_requested = true;
|
self.shutdown_requested = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue