mirror of
https://github.com/servo/servo.git
synced 2025-09-05 20:48:22 +01:00
Update Servo::get_events to return drain type (#31181)
* Update Servo::get_events to return drain type to prevent constant allocation * Remove type alias for tlwc * Fix libsimpleservo
This commit is contained in:
parent
21dbf0ad3a
commit
266a082206
4 changed files with 23 additions and 12 deletions
|
@ -40,7 +40,7 @@ pub use servo::webrender_api::units::DeviceIntRect;
|
|||
use servo::webrender_api::units::DevicePixel;
|
||||
use servo::webrender_api::ScrollLocation;
|
||||
use servo::webrender_surfman::WebrenderSurfman;
|
||||
use servo::{self, gl, BrowserId, Servo};
|
||||
use servo::{self, gl, Servo, TopLevelBrowsingContextId};
|
||||
use servo_media::player::context as MediaPlayerContext;
|
||||
use surfman::{Connection, SurfaceType};
|
||||
|
||||
|
@ -336,7 +336,7 @@ pub fn deinit() {
|
|||
}
|
||||
|
||||
impl ServoGlue {
|
||||
fn get_browser_id(&self) -> Result<BrowserId, &'static str> {
|
||||
fn get_browser_id(&self) -> Result<TopLevelBrowsingContextId, &'static str> {
|
||||
let webview_id = match self.focused_webview_id {
|
||||
Some(id) => id,
|
||||
None => return Err("No focused WebViewId yet."),
|
||||
|
@ -646,6 +646,8 @@ impl ServoGlue {
|
|||
}
|
||||
|
||||
fn handle_servo_events(&mut self) -> Result<(), &'static str> {
|
||||
let mut need_update = false;
|
||||
let mut need_present = false;
|
||||
for (browser_id, event) in self.servo.get_events() {
|
||||
match event {
|
||||
EmbedderMsg::ChangePageTitle(title) => {
|
||||
|
@ -660,7 +662,7 @@ impl ServoGlue {
|
|||
let window_event =
|
||||
EmbedderEvent::AllowNavigationResponse(pipeline_id, data);
|
||||
self.events.push(window_event);
|
||||
let _ = self.perform_updates();
|
||||
need_update = true;
|
||||
}
|
||||
},
|
||||
EmbedderMsg::HistoryChanged(entries, current) => {
|
||||
|
@ -824,7 +826,7 @@ impl ServoGlue {
|
|||
self.callbacks.host_callbacks.on_panic(reason, backtrace);
|
||||
},
|
||||
EmbedderMsg::ReadyToPresent => {
|
||||
self.servo.present();
|
||||
need_present = true;
|
||||
},
|
||||
EmbedderMsg::Status(..) |
|
||||
EmbedderMsg::SelectFiles(..) |
|
||||
|
@ -839,6 +841,13 @@ impl ServoGlue {
|
|||
EmbedderMsg::EventDelivered(..) => {},
|
||||
}
|
||||
}
|
||||
|
||||
if need_update {
|
||||
let _ = self.perform_updates();
|
||||
}
|
||||
if need_present {
|
||||
self.servo.present();
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -462,7 +462,7 @@ impl App {
|
|||
|
||||
// Take any new embedder messages from Servo itself.
|
||||
embedder_messages = self.servo.as_mut().unwrap().get_events();
|
||||
if embedder_messages.is_empty() {
|
||||
if embedder_messages.len() == 0 {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ use std::fs::File;
|
|||
use std::io::Write;
|
||||
use std::rc::Rc;
|
||||
use std::time::Duration;
|
||||
use std::vec::Drain;
|
||||
use std::{env, thread};
|
||||
|
||||
use arboard::Clipboard;
|
||||
|
@ -292,7 +293,7 @@ where
|
|||
/// Returns true if the caller needs to manually present a new frame.
|
||||
pub fn handle_servo_events(
|
||||
&mut self,
|
||||
events: Vec<(Option<WebViewId>, EmbedderMsg)>,
|
||||
events: Drain<'_, (Option<WebViewId>, EmbedderMsg)>,
|
||||
) -> ServoEventResponse {
|
||||
let mut need_present = false;
|
||||
let mut history_changed = false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue