Как создать значок панели задач с помощью wxPHP в Ubuntu/Unity?

После некоторой борьбы я скомпилировал PHP-модуль для wxPHP и написал несколько скриптов, чтобы увидеть, что он может сделать. Моя первая демонстрация создает окно и значок панели задач, и я не могу заставить последний работать.

Я запускаю это на Ubuntu 14.04 LTS.

Вот script Я использую:

<!--?php
// Create an icon (does not appear on Ubuntu 14.04 LTS)
$icon = new wxTaskBarIcon();
echo "Task bar available: " .
 (wxTaskBarIcon::IsAvailable() ? 'Yes' : 'No') . "\n";
echo "Create task bar icon: " . ($icon ? 'OK' : 'Failed') . "\n";
$wxIcon = new wxIcon('icon.ico');
$ok = $icon--->setIcon($wxIcon);
echo "Set image for icon: " . ($ok ? 'OK' : 'Failed') . "\n";
// Create a window (works fine)
$main = new wxFrame(null, wxID_TOP, "Title" );
$main->Show();
wxEntry();

Теперь я бы предположил, что "панель задач" в Unity - это верхняя панель с элементами управления часами, звуком и сетями, а не панель приложений с левой стороны. Я получаю пустой серый значок приложения в доке, когда работает PHP-задача, но это значок состояния вверху, который я за ним.

Выходы консоли из вышеприведенного script показывают, что все в порядке:

Task bar available: Yes
Create task bar icon: OK
Set image for icon: OK

Я попытался изменить icon.ico на несуществующий файл, и это вызывает диалог backtrace, который показывает, что значок, который я использую, успешно загружается (и предположительно из приемлемого формата).

Изменить: дальнейшие исследования показывают, что:

Таким образом, я предполагаю, что мой код будет работать, если бы не Unity, препятствующий операции, и что он будет немедленно в других дистрибутивах, таких как Mint.

Я нашел это руководство, в котором объясняется, как использовать белый список на Ubuntu 14, но это наиболее неудовлетворительно; чтобы сделать что-то такое тривиальное, не нужно изменять список доверенных репо. Если я хочу распространять приложение, написанное в wxPHP, пользователи будут (и должны) находить это неприемлемым.

Есть несколько возможностей для исследований, которые я сейчас прошу совета:

  • Сделайте что-то по-другому в wxPHP, если оно (или вверх по wxWidgets) поддерживает AppIndicators (думаю, это не так)
  • Обнаружение, если AppIndicators запущено, и если он отправляет сообщения DBus с помощью PHP для создания значка (хотя я искал спецификацию сообщения DBus для AppIndicators напрасно)

Изменить еще раз: поскольку это довольно нишевый вопрос, и поскольку Ask Ubuntu содержит ряд вопросов, связанных с программированием для платформы Ubuntu, я спросил вопрос, специфичный для DBus на этом сайте.

1 ответ

В целом, невозможно создать значок панели задач на Ubuntu, по крайней мере через wxPHP или wxWidgets. Это преднамеренное дизайнерское решение из команды юзабилити Ubuntu, чтобы представить согласованность и доступность в использовании значков состояния на уровне приложений.

Я поднял эту как ошибку и получил очень много полезной информации от сопровождающего wxPHP. Я согласен с ним в том, что эта функция будет лучше вверх по течению в wxWidgets, но из комментариев в Интернете не кажется, что есть много аппетита, чтобы добавить ее там.

Моим краткосрочным решением будет настроить процесс Python на использование своего собственного индикатора App (python-appindicator в репо Ubuntu) и установить связь между двумя процессами (от PHP до Python для изменения значка, от Python до PHP до отправлять события выбора меню). Я рассчитываю начать с того, что я буду использовать wxFileSystemWatcher как простую систему связи, поскольку она хорошо работает внутри цикла событий wxWidgets.

Лучшим решением было бы иметь привязки appindicator для PHP, но это звучит более активно, поэтому я оставлю это на данный момент.

licensed under cc by-sa 3.0 with attribution.