Esse problema existe porque, embora os AppIndicators facilitem a criação de um menu de indicadores, eles atrapalham a criação de um. Vejamos as diferenças entre o código python de exemplo usando o AppIndicator e o outro usando o GLib Menus como o código Bluetooth faz.
Primeiramente, você é instruído a fazer um gtk.Menu
, esses são objetos de menu Gtk do estilo antigo que usam Gtk.Action
e agora estão obsoletos. O AppIndicator pega o objeto gtk.Menu
de você durante o processo set_menu(...)
e o analisa, pressionando cada um dos menus que encontra no serviço de indicador criado usando libdbusmenu
. Este processo de análise significa que qualquer coisa não suportada pelo AppIndicator é filtrada, não importa o que você faça.
Em seguida, vamos ver o menu Bluetooth. Isso é criado usando Gio.Menu
objetos, estes são novos menus estilo Gnome usando o sistema GAction
. Em seguida, registrou seu próprio serviço sem usar AppIndicator
ou libdbusmenu
e configurou o uso de uma propriedade x-canonical-type
personalizada para criar o widget de comutação que é passado para libido
para análise.
Todo este exercício é muito ruim, já que são todas as personalizações Unity da Canonical. Então, assim que a unidade for, não haverá appindicators de qualquer maneira.