美文网首页
[译文] 如何开始一个真正的 GTK 项目(第四部分:图标和桌面

[译文] 如何开始一个真正的 GTK 项目(第四部分:图标和桌面

作者: Leavers | 来源:发表于2016-09-10 14:57 被阅读0次

    原文地址:Advanced GTK Techniques


    这篇教程中你将学会:

    • 为你的程序添加一个图标;
    • 将程序添加到应用菜单中。

    这篇文章是《如何开始一个真正的 GTK 项目》的一部分,如果你不想回看之前的章节,可以直接下载教学示例程序 app-skeleton2。你也可以从头开始

    相信大多数熟悉终端操作的用户对于历久弥新的 ./configuremakemake install 指令也倍感亲切。但是,Linux 桌面终究在发展,包管理器也蒸蒸日上,现在的普通用户希望的是能用一个包安装程序,然后就能在菜单里找到它。Makefile.am 可能会将我们的可执行文件安装到 /usr/local/bin,但我们不能要求用户每次都打开终端去运行它,我们需要制作一个桌面文件,让程序入驻到菜单中,变得触手可及。


    向程序添加一个图标

    app-skeleton2 拷贝一份至 app-skeleton3,或者直接重命名(如果你喜欢的话,你也可以顺便修改下 AC_INIT 宏中的版本号)。首先我们需要从 GNOME 图标中找一个合适的图片。这次我们依然偷个懒 —— 从 GNOME 的 git 库中下载一个具备全套尺寸的现成图标。在 app-skeleton3 目录中运行指令:

    for size in 16 22 24 32 48; do
        mkdir -p pixmaps/${size}x${size}/apps
        wget -O pixmaps/${size}x${size}/apps/app-skeleton.png \
          http://git.gnome.org/browse/gnome-icon-theme/plain/gnome/${size}x${size}/status/weather-showers-scattered.png
    done
    
    这是我们刚刚下载好的图标,有五种大小: weather-showers-scatteredweather-showers-scattered

    我们使用这样一个特别的目录结构是有一定原因的,在 Free Desktop 的 Icon Theme SpecificationIcon Naming Specification 中有相关讲解。

    新的 pixmaps 目录也需要一个 Makefile.am 文件。我们在这个 Makefile.am 文件中写入以下内容:

    # app-skeleton3/pixmaps/Makefile.am
    iconsdir = $(datadir)/icons/hicolor
    
    nobase_dist_icons_DATA = \
        16x16/apps/app-skeleton.png \
        22x22/apps/app-skeleton.png \
        24x24/apps/app-skeleton.png \
        32x32/apps/app-skeleton.png \
        48x48/apps/app-skeleton.png
    
    gtk_update_icon_cache = gtk-update-icon-cache -f -t $(iconsdir)
    
    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
    

    Automake 变量 nobase_dist_icons_DATA 包含四部分,前缀 nobase 表示文件将保持现有目录结构被安装在目标目录中。另一个前缀,dist,表示这些文件将在你输入 make dist 时被一同打包(默认设置下数据文件不会被打包)。

    第三部分,icons,其作用类似于 bin_PROGRAMS 中的 bin:它告诉了 Autotools 这些文件的安装位置。不同之处在于 bin 是系统预定义变量,而 icons 则不是。Automake 会将这些文件安装到 icondir 变量指定的位置。至于变量中的目录名为什么叫作 hicolor 可以参阅文章 Icon Theme Specification

    最后,DATA 告诉 Automake 这些是数据文件,它们不需要被编译。

    文件接下来的部分调用了 gtk-update-icon-cache 的功能,即使程序还未真正安装。这一步很重要,它会将新的图标录入图标主题中。test 中的内容看起来可能有些奇怪:检测 DESTDIR 是否为空意味着会确认我们是否真的要将程序安装到系统中,或者只是做一个 stage install(非全局安装)。如果是第二种情形,图标文件就不会被安装到图标主题目录中,所以更新图标缓存也就没什么意义了。这种情况下,Makefile 会提醒用户在程序真正安装后手动更新图标缓存。

    万事俱备,只欠东风。我们已经做好了一切准备,现在只需要把图标嵌入到程序中即可(也就是放到程序窗口的左上角,或者在切换应用时显示)。在此之前我们已经将图标装入图标主题中,所以将其导入程序的工作也就简单许多。将下面这句话添加到 hello-world.cmain() 函数中,例如可插入到第 47 行:

    // app-skeleton3/src/hello-world.c
    gtk_window_set_icon_name (GTK_WINDOW (window), "app-skeleton");
    

    当图标进入图标主题后,它就可以直接通过名称调用(记住,你必须执行 make install 后才能看到最终的效果)。

    桌面文件

    现在我们创建桌面文件。在 app-skeleton3 目录下创建一个名为 app-skeleton.desktop 的文件,并输入:

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=App Skeleton
    Exec=app-skeleton
    Comment=A sample application from the Advanced GTK+ Techniques tutorial
    Icon=app-skeleton
    Terminal=false
    Categories=Utility;Viewer;GTK;
    

    简单地说,Name 是程序显示在菜单中的名称。Icon 是程序在菜单中使用的图标的名称,Commet 是鼠标悬停在程序上时显示的提示。Terminal=false 表示桌面环境不需要从终端中启动该程序。Categories 表示程序在菜单中所属的分类(一些桌面环境的应用菜单没有分类概念,比如 GNOME)。

    有关桌面环境中所有分类的类别名及其解释的信息可以在 Free Desktop 的规范中找到,这些规范说明有 Desktop Entry SpecificationDesktop Menu Specification

    最后,我们更新项目根目录下的 Makefile.am

    # app-skeleton3/Makefile.am
    SUBDIRS = pixmaps src
    
    desktopdir = $(datadir)/applications
    dist_desktop_DATA = app-skeleton.desktop
    

    我们将 pixmaps 添加到 SUBDIRS 中,然后告诉 Automake 把桌面文件安装到可以被桌面环境找到的地方。

    最后,我们将 pixmaps/Makefile 添加到 configure.acAC_CONFIG_FILES 宏内。一切就绪,我们可以尝试 makemake install,不出意外的话,一个新的条目就会出现在你的应用菜单中。

    但是如果用户使用其它语言又该怎么办呢?他们可能理解不了程序名,也看不懂桌面文件的描述。如何解决这个问题将是我们下一章节的工作。


    文章许可协议:Attribution-NonCommercial-ShareAlike 3.0 Unported

    相关文章

      网友评论

          本文标题:[译文] 如何开始一个真正的 GTK 项目(第四部分:图标和桌面

          本文链接:https://www.haomeiwen.com/subject/rzvyettx.html