Webkit2gtk 未与 gtk-layer-shell 一起显示

问题描述 投票:0回答:1

我想制作一个 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(&gtk_window);
            // gtk_layer_shell::set_layer(&gtk_window, gtk_layer_shell::Layer::Background);
            // gtk_layer_shell::set_monitor(&gtk_window, &monitor);

            gtk_window.show_all();
        }
    });

    app.run();
}

上面的代码工作正常并创建 2 个 webview 窗口(因为我有 2 个显示器)。但是,如果我在代码中添加一些 gtk_layer_shell 操作(如上所述),则任何地方都不会出现窗口。

我想知道这是否是一些 webkit2gtk 错误或我的代码有问题。

rust gtk gtk3
1个回答
0
投票

您使用图层外壳创建的窗口需要设置大小,而

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);
© www.soinside.com 2019 - 2024. All rights reserved.