gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:59 29 4
gpt4 key购买 nike

经过一番努力,我已经为 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();

现在,我想 Unity 中的“任务栏”是顶部的时钟、声音和网络控件栏,而不是左侧的应用停靠栏。当 PHP 任务运行时,我确实在停靠栏中看到一个空白的灰色应用程序图标,但它是我所追求的顶部的状态图标。

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

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

我尝试将 icon.ico 更改为一个不存在的文件,这会弹出一个回溯对话框,表明我正在使用的图标正在成功加载(并且可能是可接受的格式).

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

因此,我目前的猜测是,如果不是 Unity 阻止该操作,我的代码将可以运行 - 并且它会立即在其他发行版(例如 Mint)中运行。

我确实找到了 this guide这解释了如何在 Ubuntu 14 上加入白名单,但这是最令人不满意的;做一些如此微不足道的事情不需要改变受信任的 repo 列表。如果我希望发布一个用 wxPHP 编写的应用程序,用户会(并且应该)认为这是 Not Acceptable 。

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

  • 在 wxPHP 中做一些不同的事情,以防它(或上游 wxWidgets)有 AppIndicators 支持(我猜它没有)
  • 检测 AppIndicators 是否正在运行,如果它正在使用 PHP 发送 DBus 消息来构建图标(尽管我一直在寻找 AppIndicators 的 DBus 消息规范但没有成功)

再次编辑:由于这是一个相当小众的问题,并且由于Ask Ubuntu 包含许多与 Ubuntu 平台编程相关的问题,所以我问了 a DBus-specific question在那个网站上。

最佳答案

一般来说,不可能在 Ubuntu 上创建任务栏图标,至少通过 wxPHP 或 wxWidgets 是不可能的。这是 deliberate design decision来自 Ubuntu 可用性团队,将一致性和可访问性引入到应用程序级状态图标的使用中。

我提出了这个as a bug并从wxPHP的维护者那里获得了很多非常有用的信息。我同意他的观点,这个特性在 wxWidgets 的上游会更好,但是从网上的评论来看,似乎没有太多的兴趣将它添加到那里。

我的短期解决方案是设置一个 Python 进程以使用其自己的 App Indicator(Ubuntu 存储库中的 python-appindicator)并在两个进程之间进行通信(PHP 到 Python 以更改图标,Python 到 PHP 发送菜单选择事件)。我希望首先使用 wxFileSystemWatcher 作为一个简单的通信系统,因为它在 wxWidgets 事件循环中运行良好。

更好的解决方案是为 PHP 使用 appindicator 绑定(bind),但这听起来更复杂,所以我暂时保留它。

关于php - 如何在 Ubuntu/Unity 中使用 PHP 创建任务栏图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848681/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com