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

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

Я использую это на Ubuntu 14.04 LTS.

Вот скрипт, который я использую:

<?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, но это значок статуса вверху, за которым я следую.

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

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

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

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

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

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

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

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

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

5

Решение

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

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]