GNOME Goal #2.1: 安装可主题化的图标
许多的应用程序大都是将自己的图标装在 $datadir/pixmaps 下,并在程序中使用这个固定的路径来装入图标,由此带来的问题是即使主题中提供了对应的图标,程序中的图标不能随主题变化。解决这个问题的办法是遵循图标主题规范,这里我们总结一下在你的 GNOME 程序中应该如何修改,以便主题设计者们能高兴的为你的程序设计新的图标。
首先你需要准备你自己的图标。如果你的程序图标太旧并且不太好看的话,请到 Planet 或 IRC 或 论坛上找个人帮你设计一个新的。最好能参照 Tango 指南 来设计你的图标。然后你需要准备一个 48x48 的 PNG 格式的图标,最好同时准备一个 SVG 的版本。你也可以准备好其它尺寸,如 24x24 或 192x192,但也不要浪费太多时间和精力,大多数用户只会看到默认的程序图标。
编译系统
在你的 Makefile.am 中, 添加如下的内容来安装你的图标 (假设你的程序名就叫 gurilla):
icondir = $(datadir)/icons/hicolor/48x48/apps icon_DATA = gurilla.png svgicondir = $(datadir)/icons/hicolor/scalable/apps svgicon_DATA = gurilla.svg gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi EXTRA_DIST = \ $(icon_DATA) \ $(svgicon_DATA)
程序代码
正确的引用标图的方法是使用它们的名字(不含扩展名)。你可以在创建任何新窗口前设置程序的默认图标,如在设置程序名之后设置:
g_set_application_name (_("Gurilla")); gtk_window_set_default_icon_name ("gurilla");
大多数程序这样做就足够了。你创建的任何新窗口都会默认使用这个图标(如果没有单独设置的话)。
如果你的程序提供了一个库,并且包含有其它程序可使用的窗口控件,你又想在这些窗口上设置自己的图标,那么你需要在这些窗口的构造函数里进行设置。但这样做之前最好想想是否真的需要这样。比如你不希望在字体对话框窗口中显示 GTK+ 的图标。无论如何,下面是设置的实例:
static void gurilla_window_init (GurillaWindow *guw) { ... gtk_window_set_title (GTK_WINDOW (guw), _("Gurilla Dialog")); gtk_window_set_icon_name (GTK_WINDOW (guw), "gurilla"); }
最后你需要在你的关于对话框中设置正确的图标名:
gtk_show_about_dialog (GTK_WINDOW (guw), ... "logo-icon-name", "gurilla", ... NULL);
Desktop 文件
很明显,.desktop 文件中的图标名字*不应该*包含扩展名。
这个 goal 的状态
开始修改某一模块前,请把你的名字写到状态栏中,以免别人和你做重复的工作。
State |
Markup |
todo |
<: #ff8080> todo |
patch |
<: #ffc849> [wiki:gnomebug/xxxxx patch] |
done |
<: #80ff80> [wiki:gnomebug/xxxxx done] |
not needed |
<: #80ff80> not needed |
以上是用于更新下面的状态表的相应标记。
模块 |
状态 |
桌面 |
|
星际译王(stardict) |
to do |
to do |