Je veux faire un Gtk.Window qui est épinglé au bureau et agit comme un widget de bureau. J'ai constaté que je pouvais le faire en définissant self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)
, ce qui la maintiendrait au-dessous de toutes les fenêtres, inamovible et insensible au plug-in Show Desktop Unity. Cependant, si vous cliquez sur la zone du bureau en dehors du widget, la fenêtre est cachée derrière le bureau et je ne peux pas la récupérer (je dois tuer le programme).
Quelle est la meilleure façon de gérer cela? Y a-t-il un autre paramètre? J'ai constaté que je pouvais également obtenir une fenêtre pour ignorer les commandes de Show Desktop si je définissais l'indicateur skip_taskbar et désactivais un paramètre dans compiz, mais je préférerais ne pas perdre notre temps avec les paramètres de compiz des gens pour obtenir cet effet.
EDIT: J'ai découvert l'ignorance de Show Desktop (voir ci-dessous), mais ne peut toujours pas l'obtenir pour ignorer la barre de lancement. Le repère de la fenêtre DESKTOP a fonctionné pour cela, mais présente les inconvénients mentionnés ci-dessus. J'ai aussi joué avec la définition de WM_CLASS dans le fichier .desktop, mais Unity semble l'ignorer.
Vous l'avez compris ... vous devez définir l'indicateur de type sur Gdk.WindowTypeHint.DOCK
, puis définir également skip_taskbar_hint
OR skip_pager_hint
.
EDIT Cela fonctionne, mais même avec skiptaskbar, la fenêtre apparaît toujours sous la forme d'une icône dans la barre de lancement. J'ai besoin d'un meilleur moyen ....
EDIT2 Compris! Le problème provenait d'autres lanceurs de la barre ayant la même classe WMC que le programme que j'essayais de créer un widget de bureau. Pour se distinguer, vous devez définir la classe WMClass de la fenêtre dans le programme, ainsi que dans son programme de lancement .desktop:
Dans le code:
Gtk.Window.set_wmclass(WMname,WMclass)
Et dans le lanceur .desktop:
StartupWMClass=WMname
J'ai une application en cours d'exécution qui fait exactement ce que vous souhaitez: c'est rainlendar2 en mode bureau. Sortie XwinInfo:
xwininfo: Identifiant de la fenêtre: 0x1200086 "rainlendar2" Conseils relatifs au gestionnaire de fenêtres: Le client accepte l'entrée ou le focus d'entrée: Oui L'état initial est Normal État Affiché sur tous les ordinateurs de bureau Type de fenêtre: Station d'accueil État de la fenêtre: Ignorer le pagineur Ignorer la barre des tâches Au-dessous de Collant
Comment cela se traduit-il en drapeaux Gtk +/Gdk? Mais il semble que l'adhésivité joue un rôle.