1

Предыстория:

Я бы хотел:

  1. Доставить приложение в виде простого TAR, который пользователи извлекают и запускают
  2. Чтобы у этого приложения был правильный значок приложения.

Нет менеджера пакетов, нет sudo, нет установочного скрипта.

Из стандартных и различных статей я вижу, что для значков приложений требуется файл .desktop которому требуются абсолютные пути к исполняемому файлу (ugh) и значку приложения. Я также вижу, что Ubuntu Unity (возможно, другие) поддерживает файлы .desktop в ~/.local/share/applications

Windows поддерживает это, встраивая иконки в исполняемые файлы. Mac OS X имеет относительную структуру каталогов для приложений, включающую значок.

«Взломанное» решение:

Мое «хакерское» решение заключается в том, чтобы при запуске приложения определить, существует ли файл myApp.desktop в ~/.local/share/applications/ , и, если нет, написать его (включая полный абсолютный путь к исполняемому файлу и значку), запустить новое приложение myApp. обработать и выйти.

Надеюсь, что новый процесс myApp поднимет значок приложения. и иногда это так.

Эта проблема:

Эта проблема, я должен sleep 2 секунды, прежде чем запускать новый процесс. Если я это сделаю, значок поднят. Если я этого не сделаю, для моего приложения нет значка.

Я попытался перезагрузить кеш иконок GTK вместо сна (с помощью gtk-update-icon-cache /usr/share/icons/hicolor), но это не сработало.

Кто-нибудь знает, как я могу избежать этой задержки и обеспечить сбор только что записанного файла .desktop ? (Я сбрасываю и закрываю файл.) Или есть идея получше моего хакерского решения?

Обновление: Интересно, что при тестировании простого скрипта, который записывает файл .desktop (вручную или с помощью xdg-desktop-menu) и запускает приложение, ему также требуется 2-секундная задержка, иначе значок не появится. Захватывающий.

1 ответ1

1

Используйте gtk_window_set_icon или аналогичный (есть вариант _from_file и интеграция с Glade).

Без рута я не думаю, что у вас есть доступ к кешу значков, и своевременная загрузка файла рабочего стола, похоже, не является надежным методом, как вы обнаружили.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .