web-dev-qa-db-ja.com

ランチャーの進行状況バーをアプリケーションで動作させるにはどうすればよいですか?

背景調査

Quicklyと呼ばれるtestを使用して作成された単純なpython/GtkアプリケーションのUnityランチャー内の進行状況バーを更新しようとしています。ただし、 このビデオの指示に従っても、Unityランチャーの進行状況バーを正常に更新できませんでした。 Unity Integrationビデオでは、Quicklyは使用されなかったため、アプリケーションの構成方法はわずかに異なり、ビデオで使用されたコードは、デフォルトのQuickly ubuntu-applicationテンプレートアプリケーションで変更しないと適切に機能しないようです。


スクリーンショット

Unityランチャーに現在表示されているアプリケーションアイコンのスクリーンショットを次に示します。

Blurry Application Icon Without a Visible Progress Bar

ここに、私が望むUnityランチャープログレスバーの機能のスクリーンショットを示します(メールアイコンにオーバーレイ: wiki.ubuntu.com )。

Unity Launcher Progress Bar Functionality


プロジェクトコード

プロジェクトファイルを含む.Zipファイルは、 here にあります。


予想される行動

上記のコードは、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の名前を変更し、get_for_desktop_id("test,desktop")が正しい/usr/share/applicationsファイルを参照するように.desktopに配置することは理にかなっていますか?


関連研究リンク

.desktopファイルと.desktop.inファイルの違いについてはまだ明確ではありませんが、.desktopファイルについていくつか調査を行ったところ、いくつかのリンクが見つかりました。


編集

python setup.py buildを実行してから/build/share/applicationsに移動し、ビルドされたtest.desktopファイルを~/.local/share/applicationsに移動し、最後にquickly runを実行した後、アイコンの疑問符が表示され、進行状況バーが表示されません。

Question mark for application icon displayed


編集2

ビルドされた.desktopファイルをさらに調査したところ、Icon=/usr/share/test/media/test.svgファイル内の.desktop行は、存在しないtest.svgというアイコンファイルを指していたことがわかりました。

この問題を解決するために、/usr/share/コマンドを使用してSudo mkdir testtestという新しいフォルダーを作成し、Sudo mkdir mediaコマンドを使用してmediaというテストフォルダー内に別のフォルダーを作成し、次に、test.svgのQuicklyプロジェクトディレクトリにあるtest/data/media/test.svgアイコンファイルを/usr/share/test/media/に移動しました。アプリケーションの.svgアイコンがUnityランチャーバーとalt-tabビューに適切に表示されるようになりましたが、スクリーンショットに示すように進行状況バーがまだ表示されていません未満。

Only application icon displayed


編集3

@dobeyが指摘したように、TestWindow.pyファイルのコードには次のタイプミスがありました。

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

ここで、test.destkoptest.desktopである必要があります。

このタイプミスを変更しましたが、quickly runを使用してアプリケーションを実行したときに目に見える変更は発生しませんでした。ただし、行print('Integrating with launcher')add_launcher_integration()に追加した後、アプリケーションの実行時にターミナルに対応する出力がなく、問題は、アプリケーションの起動時にadd_launcher_integration()が正しく呼び出されないように見えることを示しています。


編集4

さらに調査した結果、アプリケーションの起動時にadd_launcher_integration()が実際に呼び出されることがわかりました。行を追加すると:

os.system("clear")

行の前に

print("Integrating with launcher")

メッセージ「Integrating with launcher」がterminalに表示されるようになりました。

ただし、ユニティランチャーバーに表示される進行状況バーはまだありません。


編集5

python setup.py buildを実行してQuicklyプロジェクトを再構築し、.desktopにあるQuicklyプロジェクト内のビルドされた/build/share/applications/ファイルを~/.local/share/applicationsに移動すると、アプリケーションアイコンと進行状況バーが正しく表示されるようになりましたUnityランチャーバーで。ランチャー統合のスクリーンショットを以下に見ることができます。

Application icon and progress bar displayed

10
Kevin Gurney

.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」と「desktop」の違いに注意してください。再入力エラーでない場合は、おそらくこれです。コードが実際に実行されていると仮定すると、これは問題です。実行されない場合、それが問題です。 print('Integrating with launcher')をadd_launcher_integration関数に追加して確認できます。実行すると、ターミナルに表示されるはずです。

8
dobey