web-dev-qa-db-ja.com

コードからアプリインジケーターを更新することはできますか?

私は Ruby-libappindicator バインディングを使用して buntuアプリケーションインジケーター を管理しています。

ポート3000がアプリケーションで使用されているかどうかを示します。ポートチェックは問題ではありませんが、ポートがビジー/フリーになったときにインジケーター(緑または赤の円を表示したい)も更新する必要があります。

次のような新しいインジケーターを作成できます。

require "Ruby-libappindicator"
indicator = AppIndicator::AppIndicator.new("test", "indicator-messages", AppIndicator::Category::APPLICATION_STATUS)
indicator.set_menu(Gtk::Menu.new)
indicator.set_status(AppIndicator::Status::ACTIVE)
Gtk.main

しかし、Gtk.mainを呼び出した後、コードが「ハング」するため、他のメソッドを呼び出すことができません。

作成後にappindicatorアイコンを更新するにはどうすればよいですか?

6
freemanoid

g_timeout_add_seconds()from GLib を使用して定期的に呼び出される関数を定義し、この関数でポートを確認してindicator.set_status(...)を呼び出す必要があります。

1
Florian Diesch

GLib::Timeout.add_secondsを使用してタイマーを作成する必要があります(ミリ秒を使用する場合はaddのみ)。

# ...

GLib::Timeout.add_seconds(2) do # every two seconds....
    app_indicator.set_icon '/path/to/icon.svg'
    true # returning false cancels the timer
end

Gtk.main
0
aidan

あなた自身のインディケーターを書くことを保存するには...

... indicator-sysmonitor をインストールしてから、ポートを監視するシェルスクリプトを作成し、スクリプトをインジケーターに追加します。

赤/緑のアイコンではなく、状態を示すテキストラベルを用意する必要があります。

0
Bernmeister