J'ai un problème avec quelques programmes qui ont des lanceurs dans l'unité mais créent ensuite une icône distincte après avoir été lancés. Le lanceur peut-il suivre les fenêtres qu'il organise pour mieux s'organiser? Ou est-ce un bug dans Unity même?
Cela n'a peut-être pas d'importance, mais ce programme spécifique est un programme mono et l'icône créée apparaît sous la forme du panneau.
Des problèmes de ce type ont trait au cadre de correspondance des applications de Unity. Pour simplifier les détails techniques, les fenêtres de programme et les applications sont deux choses distinctes pour Ubuntu. Ubuntu doit "deviner" quelle application possède une fenêtre particulière. Et parfois, cette hypothèse échoue et un point d'interrogation apparaît dans le lanceur.
L'échec peut être dû à:
L'application présentée dans la question (KeePass2) souffre d'un problème de type 1 qui a été signalé au gestionnaire de bogues approprié .
Les exemples ci-dessous sont techniques et s’adressent aux programmeurs qui souhaitent que leur propre application s’affiche correctement dans le lanceur Ubuntu.
Pour qu'une application s'intègre à Unity, c'est-à-dire qu'elle puisse être recherchée dans le tableau de bord et placée dans le programme de lancement, elle doit avoir une entrée de bureau. Ces entrées sont placées dans les codes /usr/share/applications/
, /usr/local/share/applications/
et $HOME/.local/share/applications/
(les deux derniers étant respectivement destinés aux logiciels tiers, à l'échelle du système et à l'utilisateur uniquement). Ils se terminent par une extension .desktop
et suivent le format de base suivant:
[Desktop Entry]
Type=Application
Name=My Application's Name
Icon=/file/path/of/my/icon
Exec=/file/path/of/my/executable
Cette entrée démarre un programme en appelant l'exécutable Exec
. Chaque fois que ce programme affiche une fenêtre ou une boîte de dialogue, Unity remarquera que son exécutable "appartient" à cette description d'application et utilisera les noms Name
et Icon
dans le lanceur.
Ceci est un exemple à nu. Le spécification formelle couvre de nombreuses fonctionnalités avancées.
Supposons que my_app.desktop
existe dans un répertoire d'application valide, mais:
/file/path/of/my/icon
n'existe pas dans le système de fichiers./file/path/of/my/icon
n'est pas une image.Dans tous les cas ci-dessus, Ubuntu ne pourra pas répertorier correctement la fenêtre de l'application dans le lanceur.
Depuis Ubuntu 11.10, BAMF a un certain nombre de bugs qui empêchent une correspondance correcte des applications. Les pièges courants (temporaires) incluent:
Exec
étant un lien symbolique plutôt qu'un fichier normalDans ces cas, les programmeurs n'ont d'autre choix que d'utiliser une solution de contournement, telle que la suppression de l'abstraction du lien symbolique ou la liaison directe à l'exécutable. Aucune de celles-ci n'est requise par la spécification d'entrée de bureau elle-même.
La fenêtre ne peut être associée à l'application que si la propriété WM_CLASS a été définie. Pour ce faire dans X11, vous utilisez:
XSetClassHint( display, window, &class_hints );
Vous devez passer un pointeur sur une structure XClassHint avec les champs 'res_name' et 'res_class'.