rust Webkit 2gtk未与gtk-layer-shell一起显示

ou6hu8tu  于 4个月前  发布在  Shell
关注(0)|答案(1)|浏览(37)

我想做一个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的bug或者我的代码有问题。

dfty9e19

dfty9e191#

你用层shell创建的窗口需要设置大小,而set_default_size似乎没有完成它的工作。
gtk_window.set_default_size(1920, 1080);替换为gtk_window.set_size_request(1920, 1080);,窗口应显示。
如果你想创建一个带有shell层的全屏窗口,你可以跳过大小要求,使用锚点代替:

window.set_anchor(Edge::Left, true); 
window.set_anchor(Edge::Right, true);
window.set_anchor(Edge::Top, true);
window.set_anchor(Edge::Bottom, true);

字符串

相关问题