¿Cómo hago que la barra de progreso del iniciador funcione con mi aplicación?

10

Investigación de fondo

Estoy intentando actualizar la barra de progreso dentro del iniciador de Unity para una python/Gtkaplicación simple creada usando Quicklyllamado test; sin embargo, siguiendo las instrucciones en este video , no he podido actualizar con éxito la barra de progreso en el Unityiniciador . En el video de Unity Integration, Quicklyno se usó, por lo que la forma en que se estructuraba la aplicación era ligeramente diferente, y el código utilizado en el video no parece funcionar correctamente sin modificaciones en una Quickly ubuntu-applicationaplicación de plantilla predeterminada .


Capturas de pantalla

Aquí hay una captura de pantalla del icono de la aplicación tal como se muestra actualmente en el Iniciador de Unity.

Icono de aplicación borrosa sin una barra de progreso visible

Aquí hay una captura de pantalla del tipo de funcionalidad de barra de progreso del iniciador de Unity que me gustaría (superpuesta en el icono de correo: wiki.ubuntu.com ).

Funcionalidad de la barra de progreso de Unity Launcher


Código de proyecto

Un .ziparchivo que contiene los archivos del proyecto se puede encontrar aquí .


Comportamiento esperado

Esperaría que el código anterior muestre una barra de progreso que está superpuesta al 75% en el ícono de la aplicación de prueba en Unity Launcher , pero la aplicación solo se ejecuta y no muestra ninguna barra de progreso cuando quickly runse ejecuta el comando .


Investigación de problemas

Creo que el problema es que no obtengo una referencia adecuada a la ventana principal de la aplicación, sin embargo, no estoy seguro de cómo solucionar este problema correctamente. También creo que la línea: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")puede ser otra fuente de complicaciones porque Quicklycrea .desktop.inarchivos en lugar de .desktoparchivos comunes , por lo que no estoy seguro de si eso podría estar causando problemas también.

Quizás, otra fuente del problema es que no entiendo completamente la diferencia entre .desktopy los .desktop.inarchivos. ¿Tiene sentido hacer una copia del test.desktop.inarchivo y cambiarle el nombre test.desktop, y colocarlo /usr/share/applicationspara get_for_desktop_id("test,desktop")que haga referencia al .desktoparchivo correcto ?


Enlaces de investigación relacionados

Aunque todavía no tengo clara la diferencia entre los archivos .desktop y .desktop.in, he investigado un poco sobre los archivos .desktop y he encontrado algunos enlaces:


Editar

Después de ejecutar python setup.py buildy luego navegar /build/share/applicationsy mover el test.desktoparchivo creado a ~/.local/share/applications, y finalmente ejecutarlo quickly run, solo se muestra un signo de interrogación para un icono, sin una barra de progreso visible .

Se muestra el signo de interrogación para el icono de la aplicación


Editar 2

Después de una investigación más a fondo del .desktoparchivo creado , resulta que la línea: Icon=/usr/share/test/media/test.svgdentro del .desktoparchivo apuntaba a un archivo de icono llamado test.svgque no existía.

Con el fin de resolver este problema, he creado una nueva carpeta llamada testen el /usr/share/uso del comando sudo mkdir testy luego creó otro en el interior de la carpeta de prueba llamada mediausando el comando sudo mkdir media, y luego moví el test.svgarchivo de icono que se encuentra en mi directorio del proyecto rápidamente en test/data/media/test.svga /usr/share/test/media/. El .svgicono de la aplicación ahora se muestra correctamente en la barra de inicio de Unity y en la vista de pestaña alternativa, sin embargo, todavía no hay una barra de progreso visible como se muestra en la siguiente captura de pantalla.

Solo se muestra el icono de la aplicación


Editar 3

Como señaló @dobey, había un error tipográfico en el código del archivo TestWindow.py en la línea:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop"),

donde test.destkopdebería estar test.desktop.

Cambié este error tipográfico y no se produjeron cambios visibles cuando la aplicación se ejecutó usando quickly run. Sin embargo, después de agregar la línea print('Integrating with launcher')a add_launcher_integration()no había salida correspondiente en el terminal cuando se ejecutó la aplicación, lo que indica que el problema parece ser que add_launcher_integration()no se llama correctamente cuando se inicia la aplicación.


Editar 4

Después de una investigación más profunda, resulta que add_launcher_integration()de hecho se llama cuando se inicia la aplicación. Con la adición de la línea:

os.system("clear")

antes de la línea

print("Integrating with launcher")

el mensaje "Integrando con el lanzador" ahora aparece en el terminal.

Sin embargo, todavía no hay una barra de progreso visible en la barra de inicio de Unity .


Editar 5

Después de la reconstrucción del Quicklyproyecto mediante la ejecución python setup.py buildy moviendo la construcción .desktopde archivos dentro del Quicklyproyecto ubicado en /build/share/applications/a ~/.local/share/applications, el icono de la aplicación y la barra de progreso muestra ahora correctamente en la Unidad lanzador bar. Una captura de pantalla de la integración del lanzador se puede ver a continuación.

Se muestra el icono de la aplicación y la barra de progreso

Kevin Gurney
fuente

Respuestas:

8

El archivo .desktop debe instalarse en la ubicación donde la bamfbiblioteca lo sabe.

Debería poder probar copiando el archivo .desktop integrado (que debe crearse a partir de .desktop.in), en su ~/.local/share/applicationscarpeta y ejecutándolo update-desktop-database ~/.local/share/applications, aunque ejecutar este comando puede no ser necesario si su aplicación no maneja ningún tipo MIME .

La diferencia entre .desktop y .desktop.in es que .desktop.in está configurado para ser traducido, y es procesado por intltool durante la compilación, para insertar las traducciones, creando el archivo .desktop desde el .desktop.in archivo.

También acabo de notar un error tipográfico en su código:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")

Observe el "destkop" frente al "escritorio" que debería ser. Quizás sea este, si no es un error de reescritura. Suponiendo que su código se esté ejecutando, esto es un problema. Si no se ejecuta, entonces ese es el problema. Puede agregar print('Integrating with launcher')a la función add_launcher_integration para ver. Debería aparecer en la terminal cuando se ejecute.

dobey
fuente
¿Cuándo se crea el archivo .desktop construido? ¿Se construye cuando se ejecuta la ejecución rápida y dónde se encuentra?
Kevin Gurney
No lo uso rápidamente, y no sé exactamente cuándo lo construiría, pero normalmente con una biblioteca / aplicación Python estándar, usando setup.py con DistUtilsExtra, sucedería al ejecutar "./setup.py build" o El comando setup.py que también ejecuta build.
dobey
Logré ejecutar sucesivamente python setup.py build. Entonces, ¿ahora simplemente muevo el archivo test.desktop a ~ / .local / share / aplicaciones y la barra de progreso simplemente debería mostrarse cuando ejecuto la ejecución rápida?
Kevin Gurney
Construí el proyecto de Python y luego moví el archivo .desktop a ~ / usr / share / aplicaciones y luego ejecuté update-desktop-database ~ / .local / share / aplicaciones como sugirió, pero ahora solo recibo un signo de interrogación para el icono de una aplicación como se muestra aquí: i.stack.imgur.com/RWYud.png .
Kevin Gurney
¿Qué dice la línea Icon = en el archivo test.desktop?
dobey