mirror of
https://github.com/servo/servo.git
synced 2025-07-17 04:13:42 +01:00
implement cef_browser_host_t::get_window_handle()
This commit is contained in:
parent
c1d6d6fe1c
commit
4513d45c04
3 changed files with 21 additions and 2 deletions
|
@ -9,7 +9,7 @@ use interfaces::{CefBrowser, CefBrowserHost, CefClient, CefFrame, CefRequestCont
|
||||||
use interfaces::{cef_browser_t, cef_browser_host_t, cef_client_t, cef_frame_t};
|
use interfaces::{cef_browser_t, cef_browser_host_t, cef_client_t, cef_frame_t};
|
||||||
use interfaces::{cef_request_context_t};
|
use interfaces::{cef_request_context_t};
|
||||||
use servo::Browser;
|
use servo::Browser;
|
||||||
use types::{cef_browser_settings_t, cef_string_t, cef_window_info_t};
|
use types::{cef_browser_settings_t, cef_string_t, cef_window_info_t, cef_window_handle_t};
|
||||||
use window;
|
use window;
|
||||||
use wrappers::CefWrap;
|
use wrappers::CefWrap;
|
||||||
|
|
||||||
|
@ -90,6 +90,8 @@ pub struct ServoCefBrowser {
|
||||||
pub client: CefClient,
|
pub client: CefClient,
|
||||||
/// Whether the on-created callback has fired yet.
|
/// Whether the on-created callback has fired yet.
|
||||||
pub callback_executed: Cell<bool>,
|
pub callback_executed: Cell<bool>,
|
||||||
|
/// the display system window handle: only to be used with host.get_window_handle()
|
||||||
|
window_handle: cef_window_handle_t,
|
||||||
|
|
||||||
id: isize,
|
id: isize,
|
||||||
servo_browser: RefCell<ServoBrowser>,
|
servo_browser: RefCell<ServoBrowser>,
|
||||||
|
@ -100,10 +102,12 @@ impl ServoCefBrowser {
|
||||||
pub fn new(window_info: &cef_window_info_t, client: CefClient) -> ServoCefBrowser {
|
pub fn new(window_info: &cef_window_info_t, client: CefClient) -> ServoCefBrowser {
|
||||||
let frame = ServoCefFrame::new().as_cef_interface();
|
let frame = ServoCefFrame::new().as_cef_interface();
|
||||||
let host = ServoCefBrowserHost::new(client.clone()).as_cef_interface();
|
let host = ServoCefBrowserHost::new(client.clone()).as_cef_interface();
|
||||||
|
let mut window_handle: cef_window_handle_t = 0;
|
||||||
|
|
||||||
let servo_browser = if window_info.windowless_rendering_enabled == 0 {
|
let servo_browser = if window_info.windowless_rendering_enabled == 0 {
|
||||||
let glutin_window = glutin_app::create_window();
|
let glutin_window = glutin_app::create_window();
|
||||||
let servo_browser = Browser::new(Some(glutin_window.clone()));
|
let servo_browser = Browser::new(Some(glutin_window.clone()));
|
||||||
|
window_handle = glutin_window.platform_window() as cef_window_handle_t;
|
||||||
ServoBrowser::OnScreen(servo_browser)
|
ServoBrowser::OnScreen(servo_browser)
|
||||||
} else {
|
} else {
|
||||||
ServoBrowser::Invalid
|
ServoBrowser::Invalid
|
||||||
|
@ -121,6 +125,7 @@ impl ServoCefBrowser {
|
||||||
servo_browser: RefCell::new(servo_browser),
|
servo_browser: RefCell::new(servo_browser),
|
||||||
message_queue: RefCell::new(vec!()),
|
message_queue: RefCell::new(vec!()),
|
||||||
id: id,
|
id: id,
|
||||||
|
window_handle: window_handle,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -199,6 +204,10 @@ pub fn close(browser: CefBrowser) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_window(browser: &CefBrowser) -> cef_window_handle_t {
|
||||||
|
browser.downcast().window_handle
|
||||||
|
}
|
||||||
|
|
||||||
pub fn browser_callback_after_created(browser: CefBrowser) {
|
pub fn browser_callback_after_created(browser: CefBrowser) {
|
||||||
if browser.downcast().client.is_null_cef_object() {
|
if browser.downcast().client.is_null_cef_object() {
|
||||||
return
|
return
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
use eutil::Downcast;
|
use eutil::Downcast;
|
||||||
use interfaces::{CefBrowser, CefBrowserHost, CefClient, cef_browser_t, cef_browser_host_t, cef_client_t};
|
use interfaces::{CefBrowser, CefBrowserHost, CefClient, cef_browser_t, cef_browser_host_t, cef_client_t};
|
||||||
use types::{cef_mouse_button_type_t, cef_mouse_event, cef_rect_t, cef_key_event};
|
use types::{cef_mouse_button_type_t, cef_mouse_event, cef_rect_t, cef_key_event, cef_window_handle_t};
|
||||||
use types::cef_key_event_type_t::{KEYEVENT_CHAR, KEYEVENT_KEYDOWN, KEYEVENT_KEYUP, KEYEVENT_RAWKEYDOWN};
|
use types::cef_key_event_type_t::{KEYEVENT_CHAR, KEYEVENT_KEYDOWN, KEYEVENT_KEYUP, KEYEVENT_RAWKEYDOWN};
|
||||||
use browser::{self, ServoCefBrowserExtensions};
|
use browser::{self, ServoCefBrowserExtensions};
|
||||||
|
|
||||||
|
@ -164,6 +164,12 @@ full_cef_class_impl! {
|
||||||
fn initialize_compositing(&this,) -> () {{
|
fn initialize_compositing(&this,) -> () {{
|
||||||
this.downcast().send_window_event(WindowEvent::InitializeCompositing);
|
this.downcast().send_window_event(WindowEvent::InitializeCompositing);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
fn get_window_handle(&this,) -> cef_window_handle_t {{
|
||||||
|
let t = this.downcast();
|
||||||
|
let browser = t.browser.borrow();
|
||||||
|
browser::get_window(&browser.as_ref().unwrap()) as cef_window_handle_t
|
||||||
|
}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,10 @@ impl Window {
|
||||||
Rc::new(window)
|
Rc::new(window)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn platform_window(&self) -> glutin::WindowID {
|
||||||
|
unsafe { self.window.platform_window() }
|
||||||
|
}
|
||||||
|
|
||||||
fn nested_window_resize(width: u32, height: u32) {
|
fn nested_window_resize(width: u32, height: u32) {
|
||||||
unsafe {
|
unsafe {
|
||||||
match g_nested_event_loop_listener {
|
match g_nested_event_loop_listener {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue