Est-il possible de modifier et de mettre à jour l'icône d'état d'une applet d'indicateur en cours d'exécution?

8

J'essaie de créer un indicateur d'application simple qui imite l'applet de charge CPU pour le panneau gnome.

Je fais actuellement cela en mettant à jour (écrasant) l'icône d'état de l'indicateur avec les nouvelles informations de charge du processeur et en redéfinissant l'icône d'état sur la même icône à chaque mise à jour (je sais que c'est stupide, mais je ne sais pas si c'est actuellement possible de résoudre autrement).

Malheureusement, cela ne fonctionne pas et je vois toujours le "premier" état de l'icône, par exemple.

L'icône de l'indicateur ne se met pas à jour, contrairement au contenu de l'icône.

J'ai également essayé de définir temporairement l'icône d'état sur autre chose, par exemple.

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

mais cela n'a pas fonctionné non plus.

Des idées?


MISE À JOUR:

Il est en effet possible de faire ce que je voulais en utilisant un hack pour faire repeindre l'indicateur de son icône (merci à Jorge Castro et Ted Gould):

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

L'icône d'état d'attention doit être la même que l'icône d'état actif, sinon il y aurait un scintillement.

htorque
la source

Réponses:

4

Ce n'est en effet pas le comportement prévu des indicateurs d'application: ils sont censés avoir une ou deux icônes et pas quelque chose que vous pourriez presque mettre dans un widget.

Il semble y avoir quelque chose de mal dans la mise en cache de l'icône, car cela devrait mettre à jour une icône modifiée.

Quoi qu'il en soit, vous voudrez probablement utiliser quelque chose comme « libindicator » pour créer votre propre indicateur personnalisé. La collection d'indicateurs d'application sur votre panneau est dessinée par un indicateur. Vous avez beaucoup plus de fonctions à votre disposition lors de l'écriture d'un indicateur personnalisé que lors de l'utilisation de l'API limitée des indicateurs d'application, qui a été délibérément limitée pour nous assurer de ne pas avoir de gâchis.

Assurez-vous également de regarder le paquet «libindicator-tools», qui contient des utilitaires pratiques pour tester les indicateurs.

Sense Hofstede
la source
Bien qu'il soit possible de faire ce que je veux (voir la mise à jour dans la question), je conviens que l'écriture d'un indicateur personnalisé est probablement une meilleure idée.
htorque
Pourtant, je ne vois pas pourquoi l'utilisation d'une procédure établie et fonctionnant bien comme GTkStatusIcon est évidemment découragée ici. Pour le dire encore une fois: à l'heure actuelle, il existe un support complet pour GtkStatusIcon dans tous les principaux gestionnaires de bureau. Par conséquent, GtkStatusIcon doit être poursuivi dans les futures versions d'Ubuntu, et ce sera - au moins comme solution de rechange. Quiconque a voté pour GtKStatusIcon pourrait vous expliquer pourquoi vous pensez différent. Y a-t-il des raisons pour lesquelles je ne suis pas au courant de ne pas écrire de programmes qui dépendent de GtkStatusIcon?
Takkat
La prochaine version d'Ubuntu, qui utilisera Unity comme shell par défaut, ne prendra pas en charge GtkStatusIcons, sauf pour les cas spéciaux Java et Wine. Ceci est fait pour que le bureau puisse avancer, en utilisant une nouvelle technologie et réduire l'encombrement dans la zone de notification.
Sense Hofstede
merci de le signaler. Cela signifie-t-il vraiment que toutes les applications qui ont besoin d'une icône personnalisable ou qui reposent sur une NA héritée ne fonctionneront pas dans les futures versions d'Ubuntu si leurs développeurs ne la portent pas?
Takkat
Ils fonctionneront sur Ubuntu, mais leur GtkStatusIcon ne sera pas affiché.
Sense Hofstede
1

Je ne pense pas que ce soit possible et il semble que ce soit par conception, d'après le rapport de bogue .

Ce que nous aimerions plutôt encourager, c'est que les gens commencent à penser comme des thèmes d'icônes. La raison en est qu'il permet plusieurs tailles et thèmes du panneau séparés des applications. Ainsi, par exemple, une application pourrait avoir pour thème un fond clair (nécessitant ainsi des icônes sombres) et le panneau pourrait avoir un fond sombre (nécessitant des icônes claires). L'application ne devrait pas avoir à le savoir. Et en utilisant l'icône nommer ce problème est résolu du côté du panneau des choses.

Pour le cycle Natty, nous voulons également fournir une API pratique pour fournir un thème d'icônes personnalisé pour les personnes qui souhaitent générer des icônes. Cela ne résout pas tous les problèmes de thème, mais cela permet de résoudre le problème de plusieurs tailles.

Mise à jour: Pour répondre à votre commentaire, Ted pense que c'est un bug et vous recommande de déposer un bug sur l' indicateur-application , quelque chose comme "les mises à jour du thème ne sont pas réalisées par les indicateurs"

Jorge Castro
la source
Je suis sûr que ce que je fais est contre le design, mais je crains que le commentaire ne réponde pas pourquoi je ne peux pas modifier / altérer une icône (dans le thème), et forcer l'indicateur à mettre à jour son contenu. Je peux faire quelque chose comme indicateur.set_icon ("a") indicateur.set_icon ("b") indicateur.set_icon ("c") ... mais je n'ai pas d'espace infini pour de nouvelles icônes infinies. : P
htorque