2015-11-21 40 views
5

Po pewnym wysiłku skompilowałem moduł PHP dla wxPHP i piszę kilka skryptów, aby zobaczyć, co można zrobić. Moje pierwsze demo tworzy okno i ikonę paska zadań, i nie mogę zmusić tego drugiego do działania.Jak utworzyć ikonę paska zadań z wxPHP w Ubuntu/Unity?

Używam tego na Ubuntu 14.04 LTS.

Oto skrypt używam:

<?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(); 

Teraz chciałbym sobie wyobrazić „pasek zadań” w jedności jest górny pasek wyposażony w elementy sterujące zegar, dźwięku i sieci, a nie aplikacja zadokować na po lewej stronie. Dostaję pustą ikonę szarej aplikacji w stacji dokującej, gdy zadanie PHP jest uruchomione, ale jest to ikona stanu na górze, którą szukam.

Wyjścia konsoli z powyższym skrypcie pokazać wszystko jest OK:

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

Próbowałem zmieniając icon.ico do nieistniejącego pliku, a ten wyskakuje dialog śledzenia wstecznego, który pokazuje, że ikona jestem używanie ładuje się pomyślnie (i prawdopodobnie ma dopuszczalny format).

Edit: dalsze badania wskazują, że:

Stąd moje przypuszczenie, że w chwili obecnej jest mój kod będzie działać, jeśli nie było dla Unity uniemożliwić działanie - i że natychmiast w drugiej di stros takie jak Mint.

Znalazłem this guide, który wyjaśnia, jak dodać białą listę do Ubuntu 14, ale jest to najbardziej niesatysfakcjonujące; aby zrobić coś tak trywialnego, nie trzeba zmieniać zaufanej listy repo. Jeśli chcę rozpowszechniać aplikację napisaną w wxPHP, użytkownicy będą (i powinni) uznać to za niedopuszczalne.

Istnieje kilka możliwości dla badań, które mam teraz szukają porady na:

  • Zrób coś inaczej w wxPHP, w przypadku (lub przed wxWidgets) posiada wsparcie AppIndicators (domyślam się, że to nie)
  • wykryć, czy AppIndicators jest uruchomiony, a jeśli jest wysyłanie wiadomości dBus PHP skonstruować ikonę (choć szukałem na dBus wiadomości spec AppIndicators na marne)

Edycja ponownie: ponieważ jest to pytanie raczej niszowe, i s Zapytaj, czy Ubuntu niesie ze sobą wiele pytań związanych z programowaniem dla platformy Ubuntu, poprosiłem o nią na tej stronie a DBus-specific question.

Odpowiedz

1

Ogólnie rzecz biorąc, nie można utworzyć ikony paska zadań na Ubuntu, przynajmniej za pomocą wxPHP lub wxWidgets. Jest to deliberate design decision z zespołu użyteczności Ubuntu, aby wprowadzić spójność i dostępność w korzystaniu z ikon statusu na poziomie aplikacji.

Podniosłem to as a bug i otrzymałem wiele bardzo przydatnych informacji od opiekuna wxPHP. Zgadzam się z nim, że ta funkcja będzie lepiej dostępna w wxWidget, ale z komentarzy w Internecie nie wydaje się, że jest duży apetyt, aby ją tam dodać.

Moim krótkoterminowym rozwiązaniem będzie skonfigurowanie procesu Pythona do używania własnego wskaźnika aplikacji (python-appindicator w repozytorium Ubuntu) i komunikacja między tymi dwoma procesami (od PHP do Pythona, aby zmienić ikonę, Python do PHP, aby wysłać zdarzenia związane z wyborem menu). Zacznę od tego, że będę używał wxFileSystemWatcher jako prostego systemu komunikacyjnego, ponieważ działa on dobrze w pętli zdarzeń wxWidgets.

Lepszym rozwiązaniem byłoby posiadanie appindicator wiązań dla PHP, ale to brzmi bardziej zaangażowane, więc na razie opuścimy to.