如何使启动器进度条与我的应用程序一起使用?
背景研究
我正在尝试更新Unity启动器中的进度条,以便使用Quickly
调用test
创建一个简单的python/Gtk
应用程序; 但是,按照此video中的说明, 我无法成功更新Unity
启动器中的进度条 。 在Unity Integrationvideo中,没有使用Quickly
,因此应用程序的结构方式略有不同,如果没有在默认的Quickly ubuntu-application
模板应用程序中进行修改,video中使用的代码似乎无法正常运行。
截图
以下是Unity Launcher中当前显示的应用程序图标的屏幕截图。
以下是我想要的Unity启动器进度条function的屏幕截图(覆盖在邮件图标: wiki.ubuntu.com上 )。
项目代码
可以在此处找到包含项目文件的.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')
以查看。 它应该在运行时出现在终端上。