【问题标题】:GLib, is there a reliable way to test icons existence ? (Vala)GLib,是否有可靠的方法来测试图标的存在? (瓦拉)
【发布时间】:2015-11-27 14:54:39
【问题描述】:

通常,我会收集 Steam 游戏的信息,如果用户提出要求,它会创建游戏图标。因此,可能会有类似steam_icon_1524 这样的游戏图标,但不确定。

如何测试图标是否可用?

【问题讨论】:

  • 这有点简单,任何人都可以回答。你从哪里得到游戏列表? Steam 如何存储图标?是否有非 Vala 方式获取信息?听起来这更像是一个 Steam 问题,而不是 Vala 或 GLib……
  • 这个问题对任何图标都有效... Steam 游戏也存储在.steam/SteamApps/,在pseudo json 或pseudo yaml 文件 中,不确定。 Steam 可能会存储图标 - 在.steam/games/ 中,在zip 文件 中,并且管理图标代替steam 不是一个好主意,因为游戏可以被删除而且时间太长 - ,但如果您在桌面上制作图标(仅通过 Steam),他将在系统范围内提供游戏图标。同样,这对任何图标都有效,并且没有没有蒸汽解决方案,否则即使这是一个有效的问题,我也不会问。

标签: glib vala


【解决方案1】:

这个答案可能不适用于steam游戏,但你说它不是steam特有的,所以耸耸肩

基本上,您只需致电GLib.AppInfo.get_icon。如果没有图标,它将返回 null。

枚举您使用的已安装应用程序GLib.AppInfo.get_all ()

在幕后,发生的事情是 *.desktop 文件存储在 $XDG_DATA_DIRS 的 applications/ 子目录中(如果未设置,则回退:“/usr/local/share/:/usr/share/”)和$XDG_HOME_DATA_DIR (fallback if not set: "~/.local/share/") 被解析(文件格式详见Desktop Entry Specification),并使用 "Icon" 键确定图标名称。

从技术上讲,这并不能完全告诉您该图标是否与当前图标主题一起实际存在,只有当它应该存在时。这就是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.");
      }
    }
  }
}

【讨论】:

  • 虽然这不是我需要的答案,但它确实回答了实际问题,顺便说一句,没有像您指出的那样检查蒸汽图标的可靠方法。但是它确实回答了“GLib,是否有可靠的方法来测试图标的存在?”所以谢谢你:p
猜你喜欢
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多