Можно ли обновить индикатор приложения из кода?

Я использую привязки ruby-libappindicator для управления индикаторами приложений Ubuntu .

Я хочу указать, используется ли порт 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 код «зависает», поэтому я не могу вызвать любой другой метод.

Как я могу обновить значок приложения после его создания?

6
задан 28 October 2013 в 23:28

3 ответа

Используйте g_timeout_add_seconds () из GLib , чтобы определить функцию, которая вызывается через регулярные промежутки времени, и в этой функции проверьте, нужен ли порт и вызов indicator.set_status(...).

0
ответ дан 28 October 2013 в 23:28

Чтобы сэкономить на написании собственного индикатора ...

... вы можете установить индикатор-системный монитор , затем создать сценарий оболочки для мониторинга порта и добавить свой сценарий к индикатору.

Вместо того, чтобы красную / зеленую иконку, вам придется согласиться на текстовую метку, указывающую состояние.

0
ответ дан 28 October 2013 в 23:28

Вам нужно создать таймер, используя 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
ответ дан 28 October 2013 в 23:28

Другие вопросы по тегам:

Похожие вопросы: