如何使启动器进度条与我的应用程序一起使用?

背景研究

我正在尝试更新Unity启动器中的进度条,以便使用Quickly调用test创建一个简单的python/Gtk应用程序; 但是,按照此video中的说明, 我无法成功更新Unity启动器中的进度条 。 在Unity Integrationvideo中,没有使用Quickly ,因此应用程序的结构方式略有不同,如果没有在默认的Quickly ubuntu-application模板应用程序中进行修改,video中使用的代码似乎无法正常运行。


截图

以下是Unity Launcher中当前显示的应用程序图标的屏幕截图。

没有可见进度条的模糊应用程序图标

以下是我想要的Unity启动器进度条function的屏幕截图(覆盖在邮件图标: wiki.ubuntu.com上 )。

Unity Launcher进度条功能


项目代码

可以在此处找到包含项目文件的.zip文件。


预期的行为

我希望上面的代码能够在Unity Launcher中显示一个75%完全覆盖在测试应用程序图标上的进度条 ,但是当执行命令quickly run时,应用程序只运行并且不显示任何进度条。


问题调查

我认为问题是我没有正确获取对应用程序主窗口的引用,但是,我不确定如何正确解决此问题。 我也相信行: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")可能是另一个复杂的来源因为Quickly创建.desktop.in文件而不是普通的.desktop文件,所以我不确定这也可能导致问题。

也许,问题的另一个来源是我并不完全理解.desktop.desktop.in文件之间的区别。 制作test.desktop.in文件的副本并将其重命名为test.desktop ,并将其放在/usr/share/applications中以便get_for_desktop_id("test,desktop")引用正确的文件是否get_for_desktop_id("test,desktop") .desktop文件?


相关研究链接

虽然,我仍然不清楚.desktop和.desktop.in文件之间的区别,我已经对.desktop文件做了一些研究,我遇到了几个链接:

  • 桌面条目文件(library.gnome.org)
  • 桌面文件安装目录(askubuntu.com)
  • Unity Launcher API(wiki.ubuntu.com)
  • 桌面文件:将您的应用程序放在桌面菜单中(developer.gnome.org)
  • 桌面菜单规范(standards.freedesktop.org)

编辑

运行python setup.py build然后导航到/build/share/applications并将构建的test.desktop文件移动到~/.local/share/applications ,最后执行quickly run只有一个图标的问号正在进行显示,没有可见的进度条

显示应用程序图标的问号


编辑2

在对内置的.desktop文件进行进一步调查之后,发现.desktop文件中的行Icon=/usr/share/test/media/test.svg指向一个名为test.svg的图标文件,该文件不存在。

为了解决这个问题,我使用命令sudo mkdir test test/usr/share/创建了一个名为test的新文件夹,然后使用命令sudo mkdir media在test文件夹中创建了另一个名为media文件夹,然后我移动了test.svg图标文件位于test/data/media/test.svg Quickly项目目录中,位于/usr/share/test/media/ 。 应用程序的.svg图标现在可以在Unity启动栏和alt-tab视图中正确显示,但是仍然没有可见的进度条 ,如下面的屏幕截图所示。

仅显示应用程序图标


编辑3

正如@dobey指出的那样,该行的TestWindow.py文件的代码中有一个拼写错误:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")

test.destkop应该是test.desktop

我改变了这个错误,并且在使用quickly run执行应用程序时没有发生任何可见的更改。 但是,在将行print('Integrating with launcher')add_launcher_integration()之后,在运行应用程序时终端中没有相应的输出,这表明问题似乎是add_launcher_integration()似乎没有被正确调用当应用程序启动时。


编辑4

经过进一步调查,事实certificateadd_launcher_integration()实际上是在应用程序启动时调用的。 随着线的增加:

 os.system("clear") 

在线之前

 print("Integrating with launcher") 

现在, terminal显示消息“与发射器集成”。

但是, Unity启动栏中仍然没有可见的进度条


编辑5

通过执行python setup.py build重建Quickly项目并将位于/build/share/applications/Quickly项目中的内置.desktop文件移动到~/.local/share/applications ,现在应用程序图标和进度条在Unity启动栏中正确显示。 启动器集成的屏幕截图如下所示。

显示应用程序图标和进度条

.desktop文件必须安装在bamf库知道它的位置。

您应该能够通过将构建的.desktop文件(应该从.desktop.in创建)复制到~/.local/share/applications文件夹中,并运行update-desktop-database ~/.local/share/applications ,但如果您的应用程序不处理任何MIME类型,则可能不需要运行此命令。

.desktop和.desktop.in之间的区别在于.desktop.in设置为进行翻译,并在构建期间由intltool处理,以插入翻译,从.desktop.in创建.desktop文件。文件。

我还注意到你的代码中有一个拼写错误:

 self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop") 

请注意它应该是“destkop”与“桌面”。 也许这就是它,如果它不是一个重新输入错误。 假设您的代码实际上正在运行,这是一个问题。 如果它没有运行,那就是问题所在。 您可以在add_launcher_integration函数中添加print('Integrating with launcher')以查看。 它应该在运行时出现在终端上。