É possível alterar e atualizar o ícone de status de um applet de indicador em execução?

8

Estou tentando criar um indicador de aplicativo simples que imita o applet de carga da CPU para o painel do gnome.

Atualmente, faço isso atualizando (substituindo) o ícone de status do indicador com as novas informações de carga da CPU e redefini-lo para o mesmo ícone em todas as atualizações (eu sei que isso é estúpido, mas não sei se é atualmente possível resolver o contrário).

Infelizmente isso não funciona e sempre vejo o "primeiro" estado do ícone, por exemplo.

O ícone do indicador não é atualizado, enquanto o conteúdo do ícone é atualizado.

Também tentei definir temporariamente o ícone de status para outra coisa primeiro, por exemplo.

...
update_icon()
indicator.set_icon("indicator-messages")
indicator.set_icon("indicator-cpu-load")
...

mas isso também não funcionou.

Alguma ideia?


ATUALIZAR:

É realmente possível fazer o que eu queria usando um hack para fazer com que o indicador repintasse seu ícone (graças a Jorge Castro e Ted Gould):

...
update_icon()
indicator.set_status(appindicator.STATUS_ATTENTION)
indicator.set_status(appindicator.STATUS_ACTIVE)
...

O ícone do estado de atenção deve ser o mesmo que o ícone do estado ativo; caso contrário, haverá alguma cintilação.

htorque
fonte

Respostas:

4

Na verdade, esse não é o comportamento pretendido dos Indicadores de Aplicativo: eles devem ter um ou dois ícones e não algo que você quase poderia colocar em um widget.

Parece haver algo errado no cache do ícone, pois ele deve atualizar um ícone alterado.

De qualquer forma, você provavelmente deseja usar algo como ' libindicator ' para criar seu próprio indicador personalizado. A coleção de indicadores de aplicativos em seu painel é desenhada por um indicador. Você tem muito mais funções à disposição ao escrever um indicador personalizado do que ao usar a API limitada de indicadores de aplicativos, que foi deliberadamente limitada para garantir que não tenhamos uma bagunça.

Verifique também o pacote 'libindicator-tools', que contém alguns utilitários úteis para testar indicadores.

Sense Hofstede
fonte
Embora seja possível fazer o que eu quero (consulte a atualização na pergunta), concordo que escrever um indicador personalizado provavelmente é uma idéia melhor.
htorque
Ainda assim, não vejo por que usar um procedimento estabelecido e que funcione bem, como o GTkStatusIcon, é obviamente desencorajado aqui. Para deixar isso claro novamente: atualmente, há suporte total ao GtkStatusIcon em todos os principais gerenciadores de desktop. Portanto, o GtkStatusIcon precisa ser continuado em versões futuras do Ubuntu, e será - pelo menos como substituto. Quem votou negativamente no GtKStatusIcon, poderia explicar por que pensa diferente. Existem motivos pelos quais talvez eu não esteja ciente de não gravar programas que dependam do GtkStatusIcon?
Takkat 11/11/2010
A próxima versão do Ubuntu, que usará o Unity como shell padrão, não suportará GtkStatusIcons, exceto em casos especiais de Java e Wine. Isso é feito para que a área de trabalho possa avançar, usando a nova tecnologia e reduzir a confusão na área de notificação.
Sense Hofstede
obrigado por apontar para isso. Isso realmente significa que todos os aplicativos que precisam de um ícone personalizável ou dependem de um NA legado não serão executados nas versões futuras do Ubuntu se os desenvolvedores não o portarem?
Takkat 13/11/2010
Eles serão executados no Ubuntu, mas o GtkStatusIcon não será mostrado.
Sense Hofstede
1

Eu não acho que isso é possível e parece que é por design, a partir do relatório de erros .

O que gostaríamos de incentivar é que as pessoas comecem a pensar como temas de ícones. A razão para isso é que ele permite vários tamanhos e temas do painel separados dos aplicativos. Assim, por exemplo, um aplicativo pode ter um fundo claro (necessitando de ícones escuros) e o painel pode ter um fundo escuro (necessitando de ícones claros). O aplicativo não precisa saber sobre isso. E, usando o nome do ícone, esse problema pode ser solucionado no lado do painel.

Para o ciclo Natty, também queremos fornecer uma API de conveniência para criar um tema de ícone personalizado para pessoas que desejam gerar ícones. Isso não resolve todos os problemas temáticos, mas possibilita resolver os vários tamanhos.

Atualização: para responder seu comentário, Ted acha que é um erro e recomenda que você apresente um erro no aplicativo indicador , algo como "atualizações de temas não são realizadas pelos indicadores"

Jorge Castro
fonte
Tenho certeza de que o que faço é contra o design, mas receio que o comentário não responda por que não consigo editar / alterar um ícone (dentro do tema) e forçar o indicador a atualizar seu conteúdo. Eu posso fazer algo como indicator.set_icon ("a") indicator.set_icon ("b") indicator.set_icon ("c") ... mas não tenho espaço infinito para novos ícones infinitos. : P
htorque 11/11