mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
libservo: Add WebView
immediately to the Compositor (#35662)
When creating a `WebView`, let the Compositor know synchronously that it exists. This allows the embedder to immediately call methods like `WebView::focus()`. In addition remove messages associated with the `WebViewDelegate::notify_ready_to_show()` method (and the method itself), as now `WebView`s can be shown immediately. Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
de66f72197
commit
9d5171f3c5
12 changed files with 46 additions and 89 deletions
|
@ -2,6 +2,7 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::collections::HashMap;
|
||||
|
||||
use base::id::{PipelineId, WebViewId};
|
||||
|
@ -23,24 +24,10 @@ pub struct WebViewManager<WebView> {
|
|||
pub(crate) painting_order: Vec<WebViewId>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub struct WebViewAlreadyExists(pub WebViewId);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub struct UnknownWebView(pub WebViewId);
|
||||
|
||||
impl<WebView> WebViewManager<WebView> {
|
||||
pub fn add(
|
||||
&mut self,
|
||||
webview_id: WebViewId,
|
||||
webview: WebView,
|
||||
) -> Result<&mut WebView, WebViewAlreadyExists> {
|
||||
if self.webviews.contains_key(&webview_id) {
|
||||
return Err(WebViewAlreadyExists(webview_id));
|
||||
}
|
||||
Ok(self.webviews.entry(webview_id).or_insert(webview))
|
||||
}
|
||||
|
||||
pub fn remove(&mut self, webview_id: WebViewId) -> Result<WebView, UnknownWebView> {
|
||||
self.painting_order.retain(|b| *b != webview_id);
|
||||
self.webviews
|
||||
|
@ -107,6 +94,10 @@ impl<WebView> WebViewManager<WebView> {
|
|||
.iter()
|
||||
.flat_map(move |webview_id| self.get(*webview_id).map(|b| (webview_id, b)))
|
||||
}
|
||||
|
||||
pub fn entry(&mut self, webview_id: WebViewId) -> Entry<'_, WebViewId, WebView> {
|
||||
self.webviews.entry(webview_id)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue