[譯文] 如何開始一個(gè)真正的 GTK 項(xiàng)目(第四部分:圖標(biāo)和桌面文件)

原文地址:Advanced GTK Techniques退客。


這篇教程中你將學(xué)會(huì):

  • 為你的程序添加一個(gè)圖標(biāo);
  • 將程序添加到應(yīng)用菜單中蚌父。

這篇文章是《如何開始一個(gè)真正的 GTK 項(xiàng)目》的一部分嗦篱,如果你不想回看之前的章節(jié)肠仪,可以直接下載教學(xué)示例程序 app-skeleton2。你也可以從頭開始奋刽。

相信大多數(shù)熟悉終端操作的用戶對(duì)于歷久彌新的 ./configure瓦侮、makemake install 指令也倍感親切。但是佣谐,Linux 桌面終究在發(fā)展肚吏,包管理器也蒸蒸日上,現(xiàn)在的普通用戶希望的是能用一個(gè)包安裝程序狭魂,然后就能在菜單里找到它罚攀。Makefile.am 可能會(huì)將我們的可執(zhí)行文件安裝到 /usr/local/bin,但我們不能要求用戶每次都打開終端去運(yùn)行它雌澄,我們需要制作一個(gè)桌面文件坞生,讓程序入駐到菜單中,變得觸手可及掷伙。


向程序添加一個(gè)圖標(biāo)

app-skeleton2 拷貝一份至 app-skeleton3是己,或者直接重命名(如果你喜歡的話,你也可以順便修改下 AC_INIT 宏中的版本號(hào))任柜。首先我們需要從 GNOME 圖標(biāo)中找一個(gè)合適的圖片卒废。這次我們依然偷個(gè)懶 —— 從 GNOME 的 git 庫中下載一個(gè)具備全套尺寸的現(xiàn)成圖標(biāo)。在 app-skeleton3 目錄中運(yùn)行指令:

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

這是我們剛剛下載好的圖標(biāo)宙地,有五種大兴と稀:
weather-showers-scattered
weather-showers-scattered

我們使用這樣一個(gè)特別的目錄結(jié)構(gòu)是有一定原因的,在 Free Desktop 的 Icon Theme SpecificationIcon Naming Specification 中有相關(guān)講解宅粥。

新的 pixmaps 目錄也需要一個(gè) Makefile.am 文件参袱。我們?cè)谶@個(gè) Makefile.am 文件中寫入以下內(nèi)容:

# 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 表示文件將保持現(xiàn)有目錄結(jié)構(gòu)被安裝在目標(biāo)目錄中秽梅。另一個(gè)前綴抹蚀,dist,表示這些文件將在你輸入 make dist 時(shí)被一同打包(默認(rèn)設(shè)置下數(shù)據(jù)文件不會(huì)被打包)企垦。

第三部分环壤,icons,其作用類似于 bin_PROGRAMS 中的 bin:它告訴了 Autotools 這些文件的安裝位置钞诡。不同之處在于 bin 是系統(tǒng)預(yù)定義變量郑现,而 icons 則不是湃崩。Automake 會(huì)將這些文件安裝到 icondir 變量指定的位置。至于變量中的目錄名為什么叫作 hicolor 可以參閱文章 Icon Theme Specification接箫。

最后攒读,DATA 告訴 Automake 這些是數(shù)據(jù)文件,它們不需要被編譯辛友。

文件接下來的部分調(diào)用了 gtk-update-icon-cache 的功能整陌,即使程序還未真正安裝。這一步很重要瞎领,它會(huì)將新的圖標(biāo)錄入圖標(biāo)主題中泌辫。test 中的內(nèi)容看起來可能有些奇怪:檢測 DESTDIR 是否為空意味著會(huì)確認(rèn)我們是否真的要將程序安裝到系統(tǒng)中,或者只是做一個(gè) stage install(非全局安裝)九默。如果是第二種情形震放,圖標(biāo)文件就不會(huì)被安裝到圖標(biāo)主題目錄中,所以更新圖標(biāo)緩存也就沒什么意義了驼修。這種情況下殿遂,Makefile 會(huì)提醒用戶在程序真正安裝后手動(dòng)更新圖標(biāo)緩存。

萬事俱備乙各,只欠東風(fēng)墨礁。我們已經(jīng)做好了一切準(zhǔn)備,現(xiàn)在只需要把圖標(biāo)嵌入到程序中即可(也就是放到程序窗口的左上角耳峦,或者在切換應(yīng)用時(shí)顯示)恩静。在此之前我們已經(jīng)將圖標(biāo)裝入圖標(biāo)主題中,所以將其導(dǎo)入程序的工作也就簡單許多蹲坷。將下面這句話添加到 hello-world.cmain() 函數(shù)中驶乾,例如可插入到第 47 行:

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

當(dāng)圖標(biāo)進(jìn)入圖標(biāo)主題后,它就可以直接通過名稱調(diào)用(記住循签,你必須執(zhí)行 make install 后才能看到最終的效果)级乐。

桌面文件

現(xiàn)在我們創(chuàng)建桌面文件。在 app-skeleton3 目錄下創(chuàng)建一個(gè)名為 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 是程序在菜單中使用的圖標(biāo)的名稱乞旦,Commet 是鼠標(biāo)懸停在程序上時(shí)顯示的提示贼穆。Terminal=false 表示桌面環(huán)境不需要從終端中啟動(dòng)該程序。Categories 表示程序在菜單中所屬的分類(一些桌面環(huán)境的應(yīng)用菜單沒有分類概念杆查,比如 GNOME)扮惦。

有關(guān)桌面環(huán)境中所有分類的類別名及其解釋的信息可以在 Free Desktop 的規(guī)范中找到,這些規(guī)范說明有 Desktop Entry SpecificationDesktop Menu Specification亲桦。

最后崖蜜,我們更新項(xiàng)目根目錄下的 Makefile.am

# app-skeleton3/Makefile.am
SUBDIRS = pixmaps src

desktopdir = $(datadir)/applications
dist_desktop_DATA = app-skeleton.desktop

我們將 pixmaps 添加到 SUBDIRS 中,然后告訴 Automake 把桌面文件安裝到可以被桌面環(huán)境找到的地方客峭。

最后豫领,我們將 pixmaps/Makefile 添加到 configure.acAC_CONFIG_FILES 宏內(nèi)。一切就緒舔琅,我們可以嘗試 makemake install等恐,不出意外的話,一個(gè)新的條目就會(huì)出現(xiàn)在你的應(yīng)用菜單中备蚓。

但是如果用戶使用其它語言又該怎么辦呢饮焦?他們可能理解不了程序名靠胜,也看不懂桌面文件的描述。如何解決這個(gè)問題將是我們下一章節(jié)的工作。


文章許可協(xié)議:Attribution-NonCommercial-ShareAlike 3.0 Unported

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末煞肾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冀偶,更是在濱河造成了極大的恐慌鬓梅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件况凉,死亡現(xiàn)場離奇詭異谚鄙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刁绒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門闷营,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人知市,你說我怎么就攤上這事粮坞。” “怎么了初狰?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵莫杈,是天一觀的道長。 經(jīng)常有香客問我奢入,道長筝闹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任腥光,我火速辦了婚禮关顷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘武福。我一直安慰自己议双,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布捉片。 她就那樣靜靜地躺著平痰,像睡著了一般汞舱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宗雇,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天昂芜,我揣著相機(jī)與錄音,去河邊找鬼赔蒲。 笑死泌神,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舞虱。 我是一名探鬼主播欢际,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矾兜!你這毒婦竟也來了损趋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤焕刮,失蹤者是張志新(化名)和其女友劉穎舶沿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體配并,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡括荡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溉旋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸冲。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖观腊,靈堂內(nèi)的尸體忽然破棺而出邑闲,到底是詐尸還是另有隱情,我是刑警寧澤梧油,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布苫耸,位于F島的核電站,受9級(jí)特大地震影響儡陨,放射性物質(zhì)發(fā)生泄漏褪子。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一骗村、第九天 我趴在偏房一處隱蔽的房頂上張望嫌褪。 院中可真熱鬧,春花似錦胚股、人聲如沸笼痛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缨伊。三九已至摘刑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倘核,已是汗流浹背泣侮。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工即彪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紧唱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓隶校,卻偏偏與公主長得像漏益,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子深胳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容