(Gnome, libappindicator) AppIndicator desaparece cuando se inicia el servicio de aplicación de indicador

(Gnome, libappindicator) AppIndicator desaparece cuando se inicia el servicio de aplicación de indicador

Estoy usando este ejemplo:https://gist.github.com/davidboy/1045233en Ubuntu 14.04 [Gnome Classic]. Se muestra el icono de la bandeja del sistema. Pero desaparece cuando se inicia el servicio de aplicación del indicador. Una vez que se detiene el servicio de aplicación del indicador, el icono vuelve a aparecer.

Si uso la señal "connection_changed", parece que la propiedad "connected" es verdadera cuando el servicio de aplicación del indicador se está ejecutando; de lo contrario, es falsa.

Configurar APP_INDICATOR_STATUS_PASSIVE mientras "conectado" es verdadero no ayudó (según:https://developer.ubuntu.com/api/devel/ubuntu-12.04/c/appindicator/libappindicator-app-indicator.html#AppIndicator--connected)

Requisitos:

  1. libappindicator-dev
  2. aplicación-indicador

Pasos para reproducir:

  1. si el servicio de aplicación indicador se está ejecutando, deténgalo
  2. Ejecutar ejemplo -> el icono está visible
  3. Iniciar indicador-servicio-aplicación ->icono desaparecido ("Estado de conexión: Conectado")
  4. Detener el servicio-aplicación-indicador -> el icono vuelve a ser visible ("Estado de conexión: Desconectado")

Código (ejemplo + controlador de señal de conexión_cambiado):

// 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;
}

Quizás esto pueda ayudar:

Si el servicio de aplicación del indicador no se está ejecutando, no hay información sobre esta aplicación (ejemplo-cliente-simple) en el registro de d-bus (dbus-monitor).

Cuando el servicio de aplicación del indicador se está ejecutando, el registro de d-bus contiene lo siguiente:

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"

información relacionada