web-dev-qa-db-ja.com

グローバルメニューのサポートをpython non-gtk、non-qtアプリに追加するにはどうすればよいですか?

非GTK、非QTアプリケーションにグローバルメニューサポートを追加する方法に関する優れたドキュメント(例、チュートリアル、またはガイド)を探しています。 (gtkでは、メインメニューで「魔法のように」動作します...)。これで使用したいツールキットは kivy です。これはglib-mainloop(gstreamerなど)をサポートしているため、原則としてはすべてそこで動作するはずです。

Dbusmen および here のAPIリファレンスを見てきましたが、それはメカニズムを理解するのにあまり役に立ちません。

launcher-quicklist を作成する短い例があります。これにはdbus-menuが含まれますが、global-menu/appmenuには含まれません。

関連する情報を含まない wikiページ があり、「他のツールキットの他のアプリケーションメニューのサポート作業は歓迎されますが、DXチームの優先事項ではありません。ヘルプが必要です。」

このグラフィックには、インディケーターアプリメニューのソースコードから少しの情報がありますが、それだけでは不十分で、developer.ubuntu.comで見つけることができず、詳細な説明が必要です。

enter image description here

そう:

  • 表示される一連のメニュー項目(Dbusmenu.Menuitem)を取得する手順は何ですか?
  • クライアントとサーバーはどのような役割を果たしますか? (これらのどれが私のアプリケーションで実行されることになっていますか?またはその両方?)

同様の質問

24
xubuntix

一般に、ツールキットを使用してグローバルメニューバーにメニューを配置する方法を使用することをお勧めします...しかし、この時点で納得するには遅すぎると思われます:-)また、 12.04でDbusmenuと登録を使用しているのは、14.04までにGMenuModelに移動し、メニューでウィンドウをマークすることです。したがって、この情報は古くなっています。もちろん、ツールキットのプラグインは更新されます;-)(前回試してみると約束します)

関連する基本原則は、どのメニューがどのウィンドウに関連付けられているかを知る必要があるということです。 XIDを使用してウィンドウを追跡し、メニューはDBus上のDbusmenuサーバーへのパスです。登録するには、これらの情報の両方が必要です。登録インターフェースは、基本的にこれら両方の情報をレジストラに渡すという点で、 かなり単純 です。 DBusでのレジストラのよく知られた名前は、 com.canonical.AppMenu.Registrar です。

これがどのように機能するかの例については、 mock-json-appサンプルコードindicator-appmen にあります。これは、dbusmenu-dumper( libdbusmenu-tools にある)が出力するJSONファイルを取得し、そのメニューがあると主張するウィンドウを作成する小さなツールです。また、ほとんどのアプリケーションでは本当に必要とされないappmenuのクラッシュなども処理します(ただし、開発では本当に重要です:-))。

Dbusmenu Server を作成するには、基本的にオブジェクトを割り当て、DBusのどこに表示するかを指定するだけです(したがって、レジストラに場所を指定できます)。 appmenu-gtk のようなプラグインの場合、競合が発生しないように生成されたパスを使用しますが、アプリを制御している場合は、おそらく固定パスを使用できます。次に、 Dbusmenu Menuitem オブジェクトのツリー構造を作成します。ルートは表示されませんが、メニューを開始するには Dbusmenuサーバーに渡されます です。ルートの下の最初のレベルは、 buntuメニューバー の項目として表示されます。

幸運を祈ります。この質問に答えようと私を悩ませたすべての人々に感謝します。ツールキットのサポートを使用する必要があると私はまだ信じています(私はそれが最後であるとうそをつきました)、幸運を祈ります!

14
Ted Gould

Python-dbusバインディングを使用し、 http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html に記載されているAPIを使用して、DbusMenuと統合できます。グローバルメニューバー。

0
dobey

残念ながら、そのためのわかりやすい文書は見つかりません。グローバルメニューはGTKとQtを念頭に置いて開発されました。プロトコルはDBusベースであるため、理論的には他のWebkitのサポートを実装することは可能ですが、ドキュメントを作成する労力はほとんどありませんでした。

私があなたに提供できる最高のポインタは、 indicator-appmenplasma-widget-menubar のソースコードです。これらを読んで、dbusプロトコルの仕組みを理解してください。

0