2010年、Stefano Palazzoは関連する質問 任意のgtk.Widgetをappindicator.Indicatorに入れる を求め、同様の質問が StackOverflow で求められました。どちらの場合でも、Ubuntuのアプリインジケーターは限られているというコンセンサスです。マイケル・エクスストランドが言ったように:
アプリケーションインジケータメニューのサポートは、サポートする内容が制限されているD-Busメニューに基づいています-基本的なメニュー機能のみをサポートし、任意のウィジェットなどのよりエキゾチックなものはサポートしません。
ただし、2016年の今日のBluetoothインジケーターの表示とは矛盾しています。トグルスイッチを使用しています。
13.04のUbuntu Oneインジケーターでも同じことが観察できます。
したがって、明らかに方法があります。私はインディケータのBluetoothソースコードを勉強しましたが、それはValaで書かれています。ただし、私は主にpythonで作業します。既存のすべてのインジケーターを書き換えるだけでValaを学習するのは少し大変です。
質問の核心:Gtk.Widgetsをどのように使用できますか、または少なくともPythonを使用して、Bluetoothインジケーターのようなトグルスイッチを使用できますか?
NOTE:実例を提供する回答に報いるために、この質問に報奨金を払いたいと思っています pythonで。他の言語は受け入れられません。
この問題は、AppIndicatorsがインジケーターメニューを簡単に作成できる一方で、それらを作成する邪魔になるために存在します。 AppIndicatorを使用したサンプルpythonコードと、BluetoothコードのようにGLibメニューを使用したコードの違いを見てみましょう。
最初に、gtk.Menu
を作成するように指示されます。これらは、現在廃止されているGtk.Action
を使用する古いスタイルのGtkメニューオブジェクトです。 AppIndicatorは、set_menu(...)
プロセス中にgtk.Menu
オブジェクトを取得して解析し、検出した各メニューをlibdbusmenu
を使用して作成されたインジケーターサービスにプッシュします。この解析プロセスにより、AppIndicatorでサポートされていないものは何を行っても除外されます。
次に、Bluetoothメニューを見てみましょう。これはGio.Menu
オブジェクトを使用して作成され、これらはGAction
システムを使用する新しいスタイルのGnomeメニューです。次に、AppIndicator
またはlibdbusmenu
を使用せずに独自のサービスを登録し、カスタムx-canonical-type
プロパティを使用してセットアップし、解析のためにlibido
に渡されるスイッチウィジェットを作成します。
すべてのCanonical独自のUnityカスタマイズであるため、この演習全体はかなり悪いです。したがって、団結が始まるとすぐに、指示者はいません。