Sous Ubuntu 16.04, je reçois le message suivant
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
quand j'ouvre zenity avec la commande
zenity --text-info --filename=<filename>
Cela ne s'est pas produit sous 14.04. Je suppose que la réponse est liée à ce post, mais le post n'explique pas comment implémenter la solution proposée. Quelqu'un pourrait-il expliquer à quel fichier je dois ajouter les lignes suggérées?
Vous corrigez cet avertissement en attribuant au GtkDialog un parent auquel il doit être modal. Les fonctions pertinentes sont gtk_window_set_transient_for () (qui définit cette fenêtre pour qu'elle soit toujours au-dessus ou transitoire pour une autre) et éventuellement gtk_window_set_modal () pour en faire une boîte de dialogue modale. C'est finalement ce que font les différents constructeurs GtkDialog.
zenity --help-general
donne--attach=WINDOW Set the parent window to attach to
mais je ne sais pas comment l'utiliser (qu'est-ce que Windows?), peut-être que cela résoudra votre problème.WINDOW_ID=$(xprop -name
echo $ TITLE` | grep WM_CLIENT_LEADER | cut -d "#" -f2 | cut -c2-20) `et j'ai ensuite essayézenity --attach=$WINDOW_ID --text-info --filename=<filename>
mais malheureusement j'ai quand même reçu l'avertissement. Dommage, mais il peut être utile un jour de savoir comment obtenir l'identifiant de la fenêtre!NULL
. Cependant, je ne pouvais pasmake install
zenity localement (je n'ai pas pu trouver de documentation ou quelque chose sur la façon de configurer l'installation), j'ai donc finalement abandonné. Devra utiliser le sale2>/dev/null
.Réponses:
Ignorez-le.
C'est un avertissement , pas une erreur. L'application fonctionne, elle n'est tout simplement pas codée avec les meilleures pratiques à l'esprit, comme il semble. Vous devrez modifier
zenity
le code source de pour implémenter le correctif décrit dans votre question liée, puis le compiler vous-même, mais ... cela fonctionne quand même, alors pourquoi devriez-vous vous embêter?Si vous voulez simplement vous débarrasser de la sortie dans votre terminal, vous pouvez simplement rediriger STDERR (flux d'erreur standard, c'est là que l'avertissement est imprimé) vers
/dev/null
(périphérique de caractère virtuel qui avale des données) en ajoutant2> /dev/null
à la fin de la commande, comme ça:la source
2> /dev/null
n'a pas l'effet souhaité, l'avertissement persiste. Je sais que ce n'est qu'une nuisance, mais j'aimerais pouvoir supprimer des avertissements comme celui-ci.Il semble que les développeurs Gtk aient décidé d'ajouter cet avertissement qui affecte un certain nombre de packages. Nous devons juste attendre que le développeur Zenity rattrape et corrige Zenity.
Avec le shell bash (ce n'est pas compatible Posix), il est relativement simple de supprimer des messages d'erreur spécifiques tout en permettant à d'autres messages de passer par stderr:
Cela n'interfère pas avec stdout, donc cela peut être canalisé ou utilisé dans la substitution de commandes comme d'habitude:
la source
zenity ... 2>/dev/null
travaille pour moi. Le seul problème que je vois est que d'autres messages d'erreurs (importants) seront également supprimés, donc une meilleure capture d'erreur de construction en quelque sorte dans votre codela source
En s'appuyant sur la réponse de Dave Rove , si vous avez de nombreuses invites, vous pouvez nettoyer cela en créant une fonction telle que
puis utilisez-le comme ceci:
Cela rend les choses un peu plus faciles à lire lors de la combinaison avec d'autres logiques:
la source