通常情况下,我正在收集蒸汽游戏的信息,如果用户提出要求,它会创建游戏图标。因此可能会有像steam_icon_1524
这样的游戏图标,但不是肯定的。
我如何测试图标是否可用?
答案 0 :(得分:1)
这个答案可能不适用于蒸汽游戏,但你说它不是特定于蒸汽,所以耸肩。
基本上,您只需拨打GLib.AppInfo.get_icon即可。如果没有图标,它将返回null。
要枚举已安装的应用程序,请使用GLib.AppInfo.get_all ()
。
在幕后,发生的事情是存储在$XDG_DATA_DIRS
的applications /子目录中的* .desktop文件(如果没有设置则回退:" / usr / local / share /:/ usr /分享/")和$XDG_HOME_DATA_DIR
(如果未设置则回退:"〜/ .local / share /")将被解析(有关文件格式的详细信息,请参阅Desktop Entry Specification )," Icon" key用于确定图标名称。
从技术上讲,这并不能完全告诉您图标是否与当前图标主题实际存在,只有当假设存在时才会存在。这就是Icon Theme Specification所在的位置。有几种实现方式,但由于您使用的是Vala,我会假设您正在使用GTK + ...
您可以使用Gtk.IconTheme.get_default获取主题,然后使用Gtk.IconTheme.lookup_by_gicon获取Gtk.IconInfo(如果找不到,则为null)。
总而言之,这是一个快速程序,列出所有已安装的应用程序及其图标:
private static void main (string[] args) {
Gtk.init (ref args);
unowned Gtk.IconTheme theme = Gtk.IconTheme.get_default ();
foreach (unowned GLib.AppInfo appinfo in GLib.AppInfo.get_all ()) {
GLib.Icon? icon = appinfo.get_icon ();
if (icon != null && icon is GLib.ThemedIcon) {
GLib.message ("%s: %s", appinfo.get_display_name (), icon.to_string ());
Gtk.IconInfo? iconinfo = theme.lookup_by_gicon (icon, 48, 0);
if (iconinfo != null) {
GLib.message (iconinfo.get_filename ());
} else {
GLib.message ("No icon.");
}
}
}
}