我想制作一个 webkit 窗口并将其显示为我的壁纸。
我找到了创建 webkit2gtk 窗口的解决方法,如下所示。
// [dependencies]
// gtk = "0.16.0"
// gtk-layer-shell = "0.5"
// webkit2gtk = "1.1.0"
use gtk::gdk;
use gtk::prelude::*;
use gtk::Application;
use gtk::ApplicationWindow;
use webkit2gtk::WebViewExt;
fn main() {
let app = Application::new(None, Default::default());
app.connect_activate(move |app| {
let display = gdk::Display::default().unwrap();
for i in 0..display.n_monitors() {
let monitor = display.monitor(i).unwrap();
let gtk_window = ApplicationWindow::new(app);
gtk_window.set_default_size(1920, 1080);
let webview = webkit2gtk::WebView::new();
gtk_window.add(&webview);
webview.load_uri("http://localhost:8081");
// gtk_layer_shell::init_for_window(>k_window);
// gtk_layer_shell::set_layer(>k_window, gtk_layer_shell::Layer::Background);
// gtk_layer_shell::set_monitor(>k_window, &monitor);
gtk_window.show_all();
}
});
app.run();
}
上面的代码工作正常并创建 2 个 webview 窗口(因为我有 2 个显示器)。但是,如果我在代码中添加一些 gtk_layer_shell 操作(如上所述),则任何地方都不会出现窗口。
我想知道这是否是一些 webkit2gtk 错误或我的代码有问题。
您使用图层外壳创建的窗口需要设置大小,而
set_default_size
似乎没有完成其工作。
将
gtk_window.set_default_size(1920, 1080);
替换为 gtk_window.set_size_request(1920, 1080);
,窗口就会显示。
如果您想创建带有图层外壳的全屏窗口,您可以跳过尺寸请求并使用锚点:
window.set_anchor(Edge::Left, true);
window.set_anchor(Edge::Right, true);
window.set_anchor(Edge::Top, true);
window.set_anchor(Edge::Bottom, true);