J'ai un problème qui m'agace au-delà de toute reconnaissance
J'ai un flux de travail dans lequel plusieurs fenêtres du même programme sont contrôlées par script et, en fonction de l'état du programme, l'icône de la fenêtre X est mise à jour pour refléter l'action requise (set-icon $WINID state.png
). Pendant quelque temps, cela fonctionnait assez bien, mais récemment, j'ai mis à jour ma boîte à Kubuntu 16.04 - et c'était la pire idée de tous les temps.
Il semble que l'indicateur "Utiliser les icônes du lanceur" du gestionnaire de tâches ait été supprimé et ce n'est plus une option pour le désactiver - Plasma force utilisant les icônes du lanceur (toujours).
De plus, cette option semble être complètement supprimée des fichiers de configuration.
Ma question est la suivante: est-il possible de restaurer cette fonctionnalité? Pour restaurer l'ancienne version du gestionnaire de tâches?
Ou existe-t-il un autre moyen de changer (par script) les icônes des boutons de la barre des tâches?
J'ai essayé de désactiver complètement Plasmashell et d'utiliser un autre panneau (fbpanel, lxpanel, etc.), mais ceux-ci introduisent plus de dégâts dans KDE que de résoudre le problème.
Yupi! Il y a une solution
Creuser dans un comportement étrange observé dans un commentaire (l'icône de la fenêtre est affichée pour le Gestionnaire de tâches Chrome) J'ai testé les propriétés de la fenêtre Chrome normale et de la fenêtre Tm. Il semble que TM ne possède pas la propriété WM_CLASS. Donc, juste pour voir l'icône de la fenêtre sur la barre des tâches faisant soit
xprop -id $WIN_HEX_ID -remove WM_CLASS
ou:
xprop -id $WIN_HEX_ID -format WM_CLASS 8s -set WM_CLASS "my-own-class"
serait suffisant. Mais...
Cela crée un autre problème - très souvent WM_CLASS
est utilisé par les gestionnaires de fenêtres ou d’autres programmes pour bien gérer les fenêtres et leur comportement relatif. Donc, jeter cette information précieuse est très contre-productive. Malheureusement comme on le voit dans:
Stocker et réenregistrer la propriété complète WM_CLASS
n'est pas possible avec xprop
En vérifiant certaines options possibles, j'ai pu le faire avec le module python-xlib:
from Xlib.display import X, Display
from Xlib.Xatom import STRING
display = Display()
root = display.screen().root
win_hex_id = 0x6a00001 #in my case
win = display.create_resource_object('window', win_hex_id)
saved_prop = win.get_full_property(display.intern_atom('WM_CLASS'),
X.AnyPropertyType , 128).value
#to change:
win.change_property(display.intern_atom('WM_CLASS'),
STRING, 8, 'my-own-class')
#to go back:
win.change_property(display.intern_atom('WM_CLASS'),
STRING, 8, str(saved_prop) )
Comme commentaire - le comportement étrange de KDE ou pyhon-xlib est que le changement d'icône se produit sur une autre action de propriété (lecture/écriture) - et donc d'ajouter:
win.get_full_property(display.intern_atom('WM_CLASS'), X.AnyPropertyType , 128).value
ne fera pas mal