如何解决Vala Gtk css 提供程序 load_from_path
我不知道为什么 load_from_path
在 sudo ninja install
期间不起作用。它返回:
warning: unhandled error `GLib.Error'
css_provider.load_from_path ("com.github.saidbakr.quick-shutdown.css");
我试图捕捉异常,但同样的警告:
Gtk.Cssprovider css_provider = new Gtk.Cssprovider ();
try {
css_provider.load_from_path ("com.github.saidbakr.quick-shutdown.css");
}
catch (IOError e){
GLib.error("",e.message);
}
我检查了 meson.build:
...
install_data(
join_paths('data',meson.project_name()+ '.css'),install_dir: join_paths(get_option('datadir'))
)
添加文件路径并安装到/usr/local/share
我不知道如何解决这个问题。
解决方法
The docs for Gtk.CssProvider.load_from_path() 没有提及在 /usr/local/share/<app-data-dir>
或任何其他标准目录中搜索。它期待一个绝对路径。
解决这个问题的标准方法是使用 GResource。如果您使用的是教程或模板,它可能在 GResource 上有一些您可以使用的内容。
如果不是:
- 使用以下内容创建文件
quick-shutdown.gresource.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/com/github/saidbakr/quick-shutdown">
<file>com.github.saidbakr.quick-shutdown.css</file>
</gresource>
</gresources>
- 将此添加到您的 meson.build:
gnome = import('gnome')
resources = gnome.compile_resources('com.github.saidbakr.quick-shutdown',files('quick-shutdown.gresource.xml'),)
- 在 meson.build 的
resources
调用中将executable()
添加到源列表 - 改用 Gtk.CssProvider.load_from_resource():
css_provider.load_from_resource ("/com/github/saidbakr/quick-shutdown/com.github.saidbakr.quick-shutdown.css")
- 删除安装 CSS 文件的介子代码。它现在直接内置到您的可执行文件中。
有关如何执行此操作的真实示例,请查看 GNOME Clocks source code。
这听起来可能有很多步骤,但它与添加 GtkBuilder UI 文件(或您的程序中需要的任何其他类型的静态文件)的步骤相同。如果您稍后需要这样做,您只需将 <file>
条目添加到 .gresource.xml
文件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。