use gtk::prelude::*; use gtk::{Window, WindowType}; use webkit2gtk::glib; use webkit2gtk::{WebView, WebViewExt}; fn main() { gtk::init().unwrap(); let window = Window::new(WindowType::Toplevel); window.connect_delete_event(|_, _| { gtk::main_quit(); glib::Propagation::Proceed }); let webview = WebView::new(); webview.connect_load_changed(|_, load_event| { eprintln!("Loaded: {load_event:?}"); }); webview.connect_load_failed(|_, load_event, failing_uri, error| { eprintln!( "Load failed: {load_event:?} while loading {failing_uri} - {}", error.message() ); false }); webview.connect_load_failed_with_tls_errors(|_, host, _, errors| { eprintln!("Load failed: {errors:?} while contacting {host}"); false }); window.add(&webview); window.show_all(); window.fullscreen(); let (sender, receiver) = async_channel::unbounded(); std::thread::spawn(move || { tokio::runtime::Builder::new_current_thread() .enable_all() .build() .unwrap() .block_on(async { sender .send("https://kitchen.pyrocufflink.blue/") .await .unwrap(); }) }); glib::spawn_future_local(async move { let url = receiver.recv().await.unwrap(); webview.load_uri(url); }); gtk::main(); }