(Gnome, libappindicator) AppIndicator исчезает при запуске индикатора-приложения-службы

Я использую этот пример: https://gist.github.com/davidboy/1045233 в Ubuntu 14.04 [Gnome Classic]. Значок в системном трее отображается. Но исчезает, когда запускается индикатор-приложение-сервис. После того, как индикатор-приложение-служба остановлен, значок снова появляется.

Если я использую сигнал «connection_changed», кажется, что свойство «connected» имеет значение true, когда работает индикатор-приложение-служба, в противном случае - false.

Установка APP_INDICATOR_STATUS_PASSIVE в то время, как «подключено» истинно, не помогла (согласно: https://developer.ubuntu.com/api/devel/ubuntu-12.04/c/appindicator/libappindicator-app-indicator.html # AppIndicator - connected )

Требования:

  1. libappindicator-dev
  2. индикатор-приложение

Шаги для воспроизведения :

  1. , если индикатор-приложение-служба работает, остановите его
  2. Выполнить пример -> значок виден
  3. Запустить индикатор-приложение-служба -> значок исчез («Состояние соединения: подключено»)
  4. Индикатор остановки-приложение-служба -> значок снова виден («Состояние подключения: отключено»)

Код (пример + обработчик сигнала подключения_ изменен ):

// gcc -Wall app_indicator.c `pkg-config --libs --cflags gtk+-2.0 appindicator-0.1`
#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>

void connection_changed(AppIndicator* indicator, gboolean connected, gpointer user_data) {
    g_print ("Connection status: %s\n", connected ? "Connected" : "Disconnected");
}

int main (int argc, char **argv) {
  gtk_init(&argc, &argv);

  GtkWidget *menu;
  GtkWidget *menu_item;
  AppIndicator *indicator;

  menu = gtk_menu_new();

  menu_item = gtk_menu_item_new_with_label("Hello world!");
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);

  indicator = app_indicator_new ("example-simple-client",
                                 "indicator-messages",
                                 APP_INDICATOR_CATEGORY_APPLICATION_STATUS);

  g_signal_connect(G_OBJECT(indicator), "connection_changed", G_CALLBACK(connection_changed), 0);

  app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
  app_indicator_set_attention_icon (indicator, "indicator-messages-new");

  app_indicator_set_menu (indicator, GTK_MENU (menu));

  gtk_widget_show_all(menu);

  gtk_main();
  return 0;
}

Может быть, это может помочь:

Если служба-индикатор-приложение не работает, в d-файле нет информации об этом приложении (пример-простого-клиента). журнал шины (dbus-monitor).

Когда работает служба индикатора-приложения, журнал d-bus содержит следующее:

signal sender=:1.84 -> dest=(null destination) serial=6 path=/org/ayatana/NotificationItem/example_simple_client/Menu; interface=com.canonical.dbusmenu; member=LayoutUpdated
   uint32 2
   int32 0
method call sender=:1.84 -> dest=org.freedesktop.DBus serial=7 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
   string "org.kde.StatusNotifierWatcher"
method call sender=:1.84 -> dest=:1.39 serial=8 path=/StatusNotifierWatcher; interface=org.kde.StatusNotifierWatcher; member=RegisterStatusNotifierItem
   string "/org/ayatana/NotificationItem/example_simple_client"
method return sender=:1.39 -> dest=:1.84 reply_serial=8
method call sender=:1.37 -> dest=org.freedesktop.DBus serial=33 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "type='signal',sender=':1.84',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',path='/org/ayatana/NotificationItem/example_simple_client',arg0='org.kde.StatusNotifierItem'"
method call sender=:1.37 -> dest=org.freedesktop.DBus serial=34 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "type='signal',sender=':1.84',interface='org.kde.StatusNotifierItem',path='/org/ayatana/NotificationItem/example_simple_client'"
method call sender=:1.37 -> dest=:1.84 serial=35 path=/org/ayatana/NotificationItem/example_simple_client; interface=org.freedesktop.DBus.Properties; member=GetAll
   string "org.kde.StatusNotifierItem"
method return sender=:1.84 -> dest=:1.37 reply_serial=35
   array [
      dict entry(
         string "Id"
         variant             string "example-simple-client"
      )
      dict entry(
         string "Category"
         variant             string "ApplicationStatus"
      )
      dict entry(
         string "Status"
         variant             string "Active"
      )
      dict entry(
         string "IconName"
         variant             string "indicator-messages"
      )
      dict entry(
         string "IconAccessibleDesc"
         variant             string ""
      )
      dict entry(
         string "AttentionIconName"
         variant             string "indicator-messages-new"
      )
      dict entry(
         string "AttentionAccessibleDesc"
         variant             string ""
      )
      dict entry(
         string "Title"
         variant             string "a.out"
      )
      dict entry(
         string "IconThemePath"
         variant             string ""
      )
      dict entry(
         string "Menu"
         variant             object path "/org/ayatana/NotificationItem/example_simple_client/Menu"
      )
      dict entry(
         string "XAyatanaLabel"
         variant             string ""
      )
      dict entry(
         string "XAyatanaLabelGuide"
         variant             string ""
      )
      dict entry(
         string "XAyatanaOrderingIndex"
         variant             uint32 0
      )
   ]
method call sender=:1.37 -> dest=org.freedesktop.DBus serial=36 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',path='/org/freedesktop/DBus',arg0=':1.84'"
method call sender=:1.37 -> dest=org.freedesktop.DBus serial=37 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "type='signal',sender=':1.84',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',path='/org/ayatana/NotificationItem/example_simple_client',arg0='org.freedesktop.DBus.Properties'"
method call sender=:1.37 -> dest=org.freedesktop.DBus serial=38 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "type='signal',sender=':1.84',interface='org.freedesktop.DBus.Properties',path='/org/ayatana/NotificationItem/example_simple_client'"
method call sender=:1.37 -> dest=:1.84 serial=39 path=/org/ayatana/NotificationItem/example_simple_client; interface=org.freedesktop.DBus.Properties; member=GetAll
   string "org.freedesktop.DBus.Properties"
error sender=:1.84 -> dest=:1.37 error_name=org.freedesktop.DBus.Error.InvalidArgs reply_serial=39
   string "Интерфейс отсутствует"
method call sender=:1.37 -> dest=:1.84 serial=40 path=/org/ayatana/NotificationItem/example_simple_client; interface=org.freedesktop.DBus.Properties; member=GetAll
   string "org.kde.StatusNotifierItem"
method return sender=:1.84 -> dest=:1.37 reply_serial=40
   array [
      dict entry(
         string "Id"
         variant             string "example-simple-client"
      )
      dict entry(
         string "Category"
         variant             string "ApplicationStatus"
      )
      dict entry(
         string "Status"
         variant             string "Active"
      )
      dict entry(
         string "IconName"
         variant             string "indicator-messages"
      )
      dict entry(
         string "IconAccessibleDesc"
         variant             string ""
      )
      dict entry(
         string "AttentionIconName"
         variant             string "indicator-messages-new"
      )
      dict entry(
         string "AttentionAccessibleDesc"
         variant             string ""
      )
      dict entry(
         string "Title"
         variant             string "a.out"
      )
      dict entry(
         string "IconThemePath"
         variant             string ""
      )
      dict entry(
         string "Menu"
         variant             object path "/org/ayatana/NotificationItem/example_simple_client/Menu"
      )
      dict entry(
         string "XAyatanaLabel"
         variant             string ""
      )
      dict entry(
         string "XAyatanaLabelGuide"
         variant             string ""
      )
      dict entry(
         string "XAyatanaOrderingIndex"
         variant             uint32 0
      )
   ]
signal sender=:1.37 -> dest=(null destination) serial=41 path=/com/canonical/indicator/application/service; interface=com.canonical.indicator.application.service; member=ApplicationAdded
   string "indicator-messages"
   int32 0
   string ":1.84"
   object path "/org/ayatana/NotificationItem/example_simple_client/Menu"
   string ""
   string ""
   string ""
   string ""
   string "example-simple-client"
   string "a.out"
2
задан 16 May 2016 в 19:06

0 ответов

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

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