¿Es posible alterar y actualizar el ícono de estado de un applet indicador en ejecución?

8

Estoy tratando de crear un indicador de aplicación simple que imite el applet de carga de CPU para el panel gnome.

Actualmente hago esto actualizando (sobrescribiendo) el ícono de estado del indicador con la nueva información de carga de la CPU y restablezco el ícono de estado al mismo ícono en cada actualización (sé que esto es estúpido, pero no sé si es actualmente posible resolver de otra manera).

Lamentablemente, esto no funciona y siempre veo el "primer" estado del icono, por ejemplo.

El ícono indicador no se actualiza, mientras que el contenido del ícono sí.

También intenté configurar temporalmente el icono de estado en otra cosa primero, por ejemplo.

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

pero eso tampoco funcionó.

¿Algunas ideas?


ACTUALIZAR:

De hecho, es posible hacer lo que quería usando un truco para hacer que el indicador repinte su ícono (gracias a Jorge Castro y Ted Gould):

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

El ícono de estado de atención debe ser el mismo que el ícono de estado activo, de lo contrario, habrá algún parpadeo.

htorque
fuente

Respuestas:

4

De hecho, este no es el comportamiento previsto de los Indicadores de aplicación: están destinados a tener uno o dos íconos y no algo que casi se podría poner en un widget.

Sin embargo, parece haber algo mal en el almacenamiento en caché del icono, ya que debería actualizar un icono cambiado.

De todos modos, probablemente quieras usar algo como ' libindicator ' para crear tu propio indicador personalizado. La colección de indicadores de aplicación en su panel está dibujada por un indicador. Tienes muchas más funciones a tu disposición cuando escribes un indicador personalizado, que cuando usas la API limitada de Indicadores de aplicación, que se limitó deliberadamente para asegurarte de que no nos equivoquemos.

También asegúrese de mirar el paquete 'libindicator-tools', que contiene algunas prácticas utilidades para probar indicadores.

Sentido Hofstede
fuente
Si bien es posible hacer lo que quiero (ver actualización en la pregunta), estoy de acuerdo en que escribir un indicador personalizado probablemente sea una mejor idea.
htorque
Aún así, no veo por qué se desaconseja usar un procedimiento establecido y que funcione bien, como GTkStatusIcon. Para aclarar esto de nuevo: en la actualidad hay soporte completo para GtkStatusIcon en todos los principales administradores de escritorio. Por lo tanto, GtkStatusIcon debe continuar en futuras versiones de Ubuntu, y lo hará, al menos como reserva. Quien haya votado a favor de GtKStatusIcon podría explicar por qué piensa diferente. ¿Hay alguna razón de la que no tenga conocimiento para no escribir programas que dependen de GtkStatusIcon?
Takkat
La próxima versión de Ubuntu, que utilizará Unity como shell predeterminado, no admitirá GtkStatusIcons, aparte de los casos especiales de Java y Wine. Esto se hace para que el escritorio pueda avanzar, utilizando nueva tecnología y reducir el desorden en el área de notificación.
Sentido Hofstede
gracias por señalar esto ¿Esto realmente significa que todas las aplicaciones que necesitan un icono personalizable o que dependen de un NA heredado no se ejecutarán en futuras versiones de Ubuntu si sus desarrolladores no lo portan?
Takkat
Se ejecutarán en Ubuntu, pero su GtkStatusIcon no se mostrará.
Sentido Hofstede
1

No creo que esto sea posible y parece que es por diseño, desde el informe de error .

Lo que en cambio nos gustaría alentar es que las personas comiencen a pensar como temas de íconos. La razón de esto es que permite múltiples tamaños y temas del panel separados de las aplicaciones. Entonces, por ejemplo, una aplicación podría tener un tema con un fondo claro (por lo que necesita íconos oscuros) y el panel podría tener un fondo oscuro (que necesita íconos claros). La aplicación no debería tener que saber sobre esto. Y mediante el uso de nombres de iconos, este problema se puede resolver en el lado del panel de las cosas.

Para el ciclo de Natty también queremos proporcionar una API conveniente para crear un tema de ícono personalizado para las personas que desean generar íconos. Esto no resuelve todos los problemas de temas, pero sí permite resolver los tamaños múltiples.

Actualización: para responder a su comentario, Ted cree que es un error y recomienda que presente un error en la aplicación del indicador , algo así como "los indicadores no se dan cuenta de las actualizaciones del tema".

Jorge Castro
fuente
Estoy bastante seguro de que lo que hago va en contra del diseño, pero me temo que el comentario no responde por qué no puedo editar / alterar un ícono (dentro del tema) y forzar al indicador a actualizar su contenido. Puedo hacer algo como indicator.set_icon ("a") indicator.set_icon ("b") indicator.set_icon ("c") ... pero no tengo espacio infinito para infinitos iconos nuevos. : P
htorque