use crate::platform::types::NativeWebEngine;
use webkit2gtk::WebViewExt;
pub struct WebKitEngine {
webview: webkit2gtk::WebView,
}
unsafe impl Send for WebKitEngine {}
impl WebKitEngine {
pub fn new() -> Option<Self> {
let result =
std::panic::catch_unwind(std::panic::AssertUnwindSafe(webkit2gtk::WebView::new));
match result {
Ok(webview) => Some(Self { webview }),
Err(_) => {
log::warn!("[linux] WebKitEngine unavailable: GTK not initialised or no display");
None
}
}
}
}
impl NativeWebEngine for WebKitEngine {
fn load_url(&mut self, url: &str) -> Result<(), String> {
self.webview.load_uri(url);
Ok(())
}
fn load_html(&mut self, html: &str, base_url: Option<&str>) -> Result<(), String> {
self.webview.load_html(html, base_url);
Ok(())
}
fn go_back(&mut self) {
self.webview.go_back();
}
fn go_forward(&mut self) {
self.webview.go_forward();
}
fn reload(&mut self) {
self.webview.reload();
}
fn stop_loading(&mut self) {
self.webview.stop_loading();
}
}