Comment faire fonctionner la barre de progression du lanceur avec mon application?

10

Recherche en arrière plan

J'essaie de mettre à jour la barre de progression dans le lanceur Unity pour une python/Gtkapplication simple créée en utilisant Quicklyappelé test; cependant, en suivant les instructions de cette vidéo , je n'ai pas réussi à mettre à jour la barre de progression dans le Unitylanceur . Dans la vidéo Unity Integration, Quicklyn'a pas été utilisé, donc la façon dont l'application a été structurée était légèrement différente, et le code utilisé dans la vidéo ne semble pas fonctionner correctement sans modification dans une Quickly ubuntu-applicationapplication de modèle par défaut .


Captures d'écran

Voici une capture d'écran de l'icône de l'application telle qu'elle est actuellement affichée dans le lanceur Unity.

Icône d'application floue sans barre de progression visible

Voici une capture d'écran du type de fonctionnalité de barre de progression du lanceur Unity que je souhaiterais (superposé sur l'icône de messagerie: wiki.ubuntu.com ).

Fonctionnalité de la barre de progression de Unity Launcher


Code de projet

Un .zipfichier contenant les fichiers du projet peut être trouvé ici .


Comportement attendu

Je m'attendrais à ce que le code ci-dessus affiche une barre de progression qui est à 75% entièrement superposée sur l'icône de l'application de test dans Unity Launcher , mais l'application ne s'exécute et n'affiche aucune barre de progression lorsque la commande quickly runest exécutée.


Enquête sur les problèmes

Je crois que le problème est que je n'obtiens pas correctement une référence à la fenêtre principale de l'application, cependant, je ne sais pas comment résoudre correctement ce problème. Je crois également que la ligne: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")peut être une autre source de complication car Quicklycrée des .desktop.infichiers plutôt que des .desktopfichiers ordinaires , donc je ne sais pas si cela pourrait également causer des problèmes.

Peut-être, une autre source du problème est que je ne comprends pas entièrement la différence entre les fichiers .desktopet .desktop.in. Est-il possible de faire une copie du test.desktop.infichier, de le renommer test.desktopet de le placer /usr/share/applicationsafin get_for_desktop_id("test,desktop")de référencer le .desktopfichier correct ?


Liens de recherche connexes

Bien que je ne sois toujours pas clair sur la différence entre les fichiers .desktop et .desktop.in, j'ai fait quelques recherches sur les fichiers .desktop et j'ai rencontré quelques liens:


Éditer

Après l'exécution python setup.py build, puis la navigation /build/share/applicationset le déplacement du test.desktopfichier créé vers ~/.local/share/applications, et enfin l'exécution quickly run, seul un point d'interrogation pour une icône est affiché, sans barre de progression visible .

Point d'interrogation pour l'icône d'application affiché


Modifier 2

Après une enquête plus approfondie du .desktopfichier construit , il s'avère que la ligne: Icon=/usr/share/test/media/test.svgdans le .desktopfichier pointait vers un fichier icône appelé test.svgqui n'existait pas.

Afin de résoudre ce problème, j'ai créé un nouveau dossier appelé testà l' /usr/share/aide de la commande sudo mkdir test, puis créé un autre dossier à l'intérieur du dossier de test appelé mediaà l'aide de la commande sudo mkdir media, puis j'ai déplacé le test.svgfichier d'icônes situé dans mon répertoire de projet Quickly à test/data/media/test.svgà /usr/share/test/media/. L' .svgicône de l'application s'affiche désormais correctement dans la barre de lancement Unity et dans la vue Alt-Tab, mais il n'y a toujours pas de barre de progression visible, comme indiqué dans la capture d'écran ci-dessous.

Seule l'icône d'application affichée


Modifier 3

Comme @dobey l'a souligné, il y avait une faute de frappe dans le code du fichier TestWindow.py à la ligne:

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

test.destkop, devrait être test.desktop.

J'ai changé cette faute de frappe et aucun changement visible ne s'est produit lors de l'exécution de l'application à l'aide de quickly run. Cependant, après avoir ajouté la ligne print('Integrating with launcher')à add_launcher_integration()il n'y avait pas de sortie correspondante dans le terminal lorsque l'application a été exécuté, ce qui indique que le problème semble être que add_launcher_integration()ne semble pas être appelé correctement lorsque l'application démarre.


Modifier 4

Après une enquête plus approfondie, il s'avère que add_launcher_integration()c'est en fait appelé lorsque l'application démarre. Avec l'ajout de la ligne:

os.system("clear")

avant la ligne

print("Integrating with launcher")

le message "Intégration avec le lanceur" s'affiche maintenant dans le terminal.

Cependant, il n'y a toujours pas de barre de progression visible dans la barre de lancement Unity .


Modifier 5

Après la reconstruction du Quicklyprojet en exécutant python setup.py buildet en déplaçant le construit .desktopfichier dans le Quicklyprojet situé à /build/share/applications/à ~/.local/share/applications, l'icône de l' application et la barre de progression affiche maintenant correctement dans le lanceur Unity bar. Une capture d'écran de l'intégration du lanceur peut être vue ci-dessous.

Icône d'application et barre de progression affichées

Kevin Gurney
la source

Réponses:

8

Le fichier .desktop doit être installé à l'emplacement où la bamfbibliothèque en a connaissance.

Vous devriez pouvoir tester en copiant le fichier .desktop construit (qui doit être créé à partir du .desktop.in), dans votre ~/.local/share/applicationsdossier et en l'exécutant update-desktop-database ~/.local/share/applications, bien que l'exécution de cette commande puisse ne pas être nécessaire si votre application ne gère aucun type MIME .

La différence entre le .desktop et le .desktop.in est que le .desktop.in est configuré pour être traduit et est traité par intltool pendant la construction, pour que les traductions soient insérées, créant le fichier .desktop à partir du .desktop.in fichier.

De plus, je viens de remarquer une faute de frappe dans votre code:

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

Notez le "destkop" vs "desktop" qu'il devrait être. C'est peut-être ça, si ce n'est pas une erreur de re-saisie. En supposant que votre code est en cours d'exécution, c'est un problème. S'il n'est pas exécuté, c'est bien le problème. Vous pouvez ajouter un print('Integrating with launcher')à la fonction add_launcher_integration pour voir. Il devrait apparaître sur le terminal lors de l'exécution.

dobey
la source
Quand le fichier .desktop construit est-il créé? Est-il construit lors d'une exécution rapide et où est-il situé?
Kevin Gurney
Je ne l'utilise pas rapidement et je ne sais pas exactement quand il le construira, mais normalement avec une bibliothèque / application python standard, en utilisant setup.py avec DistUtilsExtra, cela se produirait lors de l'exécution de "./setup.py build" ou Commande setup.py qui exécute également build.
dobey
J'ai réussi à exécuter successivement le build setup.py de python. Donc, maintenant je déplace simplement le fichier test.desktop dans ~ / .local / share / applications et la barre de progression devrait simplement être affichée lorsque j'exécute rapidement exécuté?
Kevin Gurney
J'ai construit le projet python, puis déplacé le fichier .desktop construit vers ~ / usr / share / applications, puis j'ai exécuté update-desktop-database ~ / .local / share / applications comme vous l'avez suggéré, mais maintenant je ne reçois qu'un point d'interrogation pour une icône d'application comme illustré ici: i.stack.imgur.com/RWYud.png .
Kevin Gurney
Que dit la ligne Icon = dans le fichier test.desktop?
dobey