No ubuntu 16.04, recebo a seguinte mensagem
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
quando abro o zenity com o comando
zenity --text-info --filename=<filename>
Isso não aconteceu sob 14.04. Presumo que a resposta esteja relacionada a este post, mas o post não explica como implementar a solução proposta. Alguém poderia explicar em qual arquivo devo adicionar as linhas sugeridas?
Você corrige esse aviso dando ao GtkDialog um pai para o qual ele é modal. As funções relevantes são gtk_window_set_transient_for () (que define essa janela para estar sempre em cima ou transitória de outra) e, opcionalmente, gtk_window_set_modal () para torná-la uma caixa de diálogo modal. Isso é o que os vários construtores GtkDialog fazem.
zenity --help-general
dá,--attach=WINDOW Set the parent window to attach to
mas não tenho certeza de como usá-lo (o que é o Windows?), talvez isso resolva seu problema.WINDOW_ID=$(xprop -name
echo $ TITLE` | grep WM_CLIENT_LEADER | corte -d "#" -f2 | cut -c2-20) `e tentei,zenity --attach=$WINDOW_ID --text-info --filename=<filename>
mas infelizmente ainda recebi o aviso. Pena, mas pode ser útil um dia saber como obter o ID da janela!NULL
. No entanto, não conseguimake install
zenity localmente (não consegui encontrar documentos ou algo sobre como configurar a instalação), então finalmente desisti. Terá que usar o sujo2>/dev/null
.Respostas:
Ignore isto.
É um aviso , não um erro. O aplicativo funciona, mas não é codificado com as melhores práticas em mente, ao que parece. Você precisaria modificar
zenity
o código fonte para implementar a correção descrita na sua pergunta vinculada e compilar você mesmo, mas ... funciona mesmo assim, então por que você deveria se preocupar?Se você quiser apenas se livrar da saída do seu terminal, basta redirecionar o STDERR (fluxo de erro padrão, para onde o aviso é impresso) para
/dev/null
(dispositivo de caractere virtual que engole dados) anexando2> /dev/null
ao final do comando, como isso:fonte
2> /dev/null
, não tem o efeito desejado, o aviso ainda persiste. Eu sei que é apenas um incômodo, mas eu adoraria poder suprimir avisos como este.Parece que os desenvolvedores do Gtk decidiram adicionar este aviso que afeta vários pacotes. Nós apenas temos que esperar que o desenvolvedor do Zenity o atualize e conserte.
Com o shell bash (isso não é compatível com Posix), é relativamente simples suprimir mensagens de erro específicas enquanto permite que outras mensagens sejam armazenadas no stderr:
Isso não interfere no stdout, de modo que pode ser canalizado ou usado na substituição de comandos normalmente:
fonte
zenity ... 2>/dev/null
funciona para mim. O único problema que vejo é que outras mensagens de erro (importantes) também serão suprimidas, para melhor criar a captura de erros de alguma forma no seu códigofonte
Com base na resposta de Dave Rove , se você tiver muitos avisos, poderá limpar isso criando uma função como
use-o assim:
Isso torna as coisas um pouco mais fáceis de ler ao combinar com outra lógica:
fonte