背景故事:
我想要:
- 將應用程式作為簡單的 TAR 交付,供用戶提取並運行
- 讓該應用程式擁有正確的應用程式圖標。
沒有套件管理器,沒有 sudo,沒有安裝程式腳本。
我從標準和各種文章該應用程式圖示需要一個.desktop
文件,該文件需要可執行文件(呃)和應用程式圖示的絕對路徑。我還看到 Ubuntu Unity(也許其他)支援.desktop
以下文件~/.local/share/applications
Windows 透過將圖示嵌入到執行檔中來支援這一點。 Mac OS X 具有包含圖示的應用程式的相對目錄結構。
「駭客」解決方案:
我的「hackish」解決方案是,在應用程式啟動時,檢測myApp.desktop
檔案是否存在於~/.local/share/applications/
,如果不存在,則寫入它(包括可執行檔和圖示的完整絕對路徑),啟動新的 myApp 進程並退出。
希望新的 myApp 進程能夠拾取應用程式圖示。和有時確實如此。
問題:
這個問題是,我必須sleep 2
在啟動新進程之前幾秒鐘。如果我這樣做,該圖示就會被選中。如果不這樣做,我的應用程式就沒有圖標。
我嘗試過重新加載 GTK 圖示快取而不是休眠(使用gtk-update-icon-cache /usr/share/icons/hicolor
),但這並不能解決問題。
有人知道如何避免這種延遲並確保新寫入的.desktop
檔案被拾取嗎? (我正在刷新並關閉文件。)或者有比我的黑客解決方案更好的主意?
更新:有趣的是,測試一個寫入檔案的簡單腳本.desktop
(手動或使用xdg 桌面選單)並啟動應用程序,還需要 2 秒的延遲,否則圖標不會顯示。迷人。
答案1
使用gtk_window_set_icon或類似的(有 _from_file 變體和 Glade 整合)。
如果沒有root權限,我認為您無法訪問圖標緩存,並且及時加載桌面文件似乎不是您發現的可靠方法。