web-dev-qa-db-fra.com

Comment faire en sorte que la barre de progression du lanceur fonctionne avec mon application?

Recherche en arrière plan

Je tente de mettre à jour la barre de progression dans le lanceur Unity pour une application simple python/Gtk créée à l'aide de Quickly appelée test; Cependant, en suivant les instructions de cette vidéo , , je n’ai pas pu mettre à jour correctement la barre de progression dans le lanceur Unity. Quickly n'a pas été utilisé dans la vidéo Unity Integration. La structure de l'application était donc légèrement différente et le code utilisé dans la vidéo ne semble pas fonctionner correctement sans modification dans une application modèle par défaut Quickly ubuntu-application.


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.

Blurry Application Icon Without a Visible Progress Bar

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

Unity Launcher Progress Bar Functionality


Code de projet

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


Comportement prévisible

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


Enquête de problème

Je pense que le problème est que je ne reçois 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 pense également que la ligne: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop") peut être une autre source de complication, car Quickly crée des fichiers .desktop.in plutôt que des fichiers .desktop ordinaires. Je ne sais donc pas si cela pourrait également poser problème.

Une autre source du problème est peut-être que je ne comprends pas tout à fait la différence entre les fichiers .desktop et .desktop.in. Cela a-t-il du sens de faire une copie du fichier test.desktop.in et de le renommer test.desktop et de le placer dans /usr/share/applications afin que get_for_desktop_id("test,desktop") fasse référence au fichier .desktop correct?


Liens de recherche connexes

Bien que la différence entre les fichiers .desktop et .desktop.in ne soit toujours pas claire, j'ai effectué quelques recherches sur les fichiers .desktop et j'ai rencontré quelques liens:


Modifier

Après avoir exécuté python setup.py build, puis navigué vers /build/share/applications, puis déplacé le fichier test.desktop construit vers ~/.local/share/applications, et finalement exécuté quickly run, uniquement un point d'interrogation pour une icône est affiché, sans barre de progression visible .

Question mark for application icon displayed


Modifier 2

Après une analyse plus approfondie du fichier .desktop construit, il s’avère que la ligne: Icon=/usr/share/test/media/test.svg dans le fichier .desktop pointait vers un fichier d’icône appelé test.svg qui n’existait pas.

Afin de résoudre ce problème, j'ai créé un nouveau dossier appelé test dans /usr/share/ à l'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, et puis j'ai déplacé le fichier icône test.svg situé dans mon répertoire de projet Quickly dans test/data/media/test.svg vers /usr/share/test/media/. L’icône .svg de l’application s’affiche désormais correctement dans la barre de lancement de Unity et dans la vue alt-tab. Cependant , il n’existe toujours pas de barre de progression visible , comme indiqué dans capture d'écran ci-dessous.

Only application icon displayed


Modifier 3

Comme @dobey l'a fait remarquer, 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 avec quickly run. Cependant, après l'ajout de la ligne print('Integrating with launcher') à add_launcher_integration(), aucune sortie correspondante n'a été émise dans le terminal lors de l'exécution de l'application, ce qui indique que le problème semble être que add_launcher_integration() ne semble pas être appelé correctement au démarrage de l'application.


Modifier 4

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

os.system("clear")

avant la ligne

print("Integrating with launcher")

le message "Intégration avec le programme de lancement" s'affiche maintenant dans terminal.

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


Modifier 5

Après avoir reconstruit le projet Quickly en exécutant python setup.py build et en déplaçant le fichier construit .desktop dans le projet Quickly situé entre /build/share/applications/ et ~/.local/share/applications, l'icône de l'application et la barre de progression s'affichent correctement. dans la barre de lancement d'Unity. Une capture d'écran de l'intégration du lanceur est visible ci-dessous.

Application icon and progress bar displayed

10
Kevin Gurney

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

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

La différence entre .desktop et .desktop.in réside dans le fait que le fichier .desktop.in est configuré pour être traduit et est traité par intltool lors de la construction afin que les traductions soient insérées, créant ainsi le fichier .desktop à partir du fichier .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 "bureau" qu'il devrait être. C’est peut-être le cas, si ce n’est pas une erreur de saisie. En supposant que votre code soit réellement exécuté, il s'agit d'un problème. Si ce n'est pas exécuté, alors c'est le problème. Vous pouvez ajouter une print('Integrating with launcher') à la fonction add_launcher_integration à afficher. Il devrait apparaître sur le terminal lors de l'exécution.

8
dobey