web-dev-qa-db-fra.com

Afficher les icônes de la fenêtre (désactiver les icônes du lanceur) dans le nouveau gestionnaire de tâches de KDE Plasma (16.04)

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.

2
yatsa

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

1
yatsa