如何在Ubuntu/Unity中使用wxPHP创建任务栏图标?

hal*_*fer 5 php wxwidgets ubuntu-unity wxphp

经过一番努力,我为wxPHP编译了PHP模块,并编写了一些脚本来查看它可以做什么.我的第一个演示创建了一个窗口和一个任务栏图标,我无法让后者工作.

我在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();
Run Code Online (Sandbox Code Playgroud)

现在,我认为Unity中的"任务栏"是顶级栏,其中包括时钟,声音和网络控件,而不是左侧的应用程序底座.我得到在码头一个空白灰色的应用程序图标,在PHP任务运行时,但它是在我的后顶部的状态图标.

上面脚本的控制台输出显示一切正常:

Task bar available: Yes
Create task bar icon: OK
Set image for icon: OK
Run Code Online (Sandbox Code Playgroud)

我已经尝试将其更改icon.ico为不存在的文件,然后弹出一个回溯对话框,显示我正在使用的图标正在加载成功(可能是可接受的格式).

编辑:进一步的研究表明:

因此,我目前的猜测是,如果不是Unity阻止操作,我的代码就可以工作 - 并且它会立即出现在Mint等其他发行版中.

我确实找到了这个解释如何在Ubuntu 14上列入白名单的指南,但这是最令人不满意的; 做一些琐碎的事情不应该改变可信的回购清单.如果我希望分发用wxPHP编写的应用程序,用户将(并且应该)发现这是不可接受的.

有几种研究途径,我现在正在寻求建议:

  • 在wxPHP中执行不同的操作,以防它(或上游wxWidgets)具有AppIndicators支持(我的猜测是它没有)
  • 检测AppIndicators是否正在运行,以及它是否使用PHP发送DBus消息来构建一个图标(虽然我已经找不到AppIndicators的DBus消息规范)

再次编辑:因为这是一个相当小的问题,因为Ask Ubuntu为Ubuntu平台提供了许多与编程相关的问题,所以我在该网站上询问了一个特定DBus的问题.