`` `
Emitir
O daemon de notificação não oferece suporte a nomes de ícones.
No lado do aplicativo, eu uso o GApplication para enviar notificações. Eu defino um ícone usando este tipo de código:
icon = g_themed_icon_new("edit-copy");
g_notification_set_icon(notif, icon);
g_application_send_notification(app, "notif-id", notif);
Este código basicamente travará meu aplicativo. A falha é devido a um bug no glib, que é disparado porque o tempo limite de send_notification () se esgota. O tempo limite é atingido porque o daemon de notificação do Cinnamon não responde mais e provavelmente também travou.
Eu rastreei isso o máximo que pude. No lado do chamador primeiro (ou seja, glib), podemos ver que o suporte para GThemedIcon foi discutido no Bug 745634 e adicionado na glib ec1edef3 .
Agora, se você olhar para este arquivo, verá que a implementação salvará o ícone na dica image-path
. O que nos leva às etapas para reproduzir ...
Passos para reproduzir
Portanto, podemos recriar a chamada dbus que é enviada por g_application_send_notification()
. Quanto à imagem, podemos usar um caminho completo (é o que você obtém se o chamador usa GFileIcon) ou simplesmente o nome do arquivo sem a extensão (é o que você obtém se o chamador usou GThemedIcon).
Definir um caminho completo funciona:
IMAGE=/usr/share/icons/Adwaita/48x48/actions/edit-copy.png
python -c "import dbus; print dbus.Bus().call_blocking(\
'org.freedesktop.Notifications', \
'/org/freedesktop/Notifications', \
'org.freedesktop.Notifications', \
'Notify', \
'susssasa{sv}i', \
('appname', 0, '', 'summary', 'body', [], {'image-path': '$IMAGE'}, -1))"
A configuração de um nome de ícone não, nenhuma notificação é exibida:
IMAGE=edit-copy
python -c ... # copy-paste the snippet above
Outra informação
Cabe a você decidir se deseja oferecer suporte ao ícone temático ou não em seu daemon de notificação, mas pelo menos o daemon de notificação deve lidar com qualquer entrada de lixo que é enviada por aplicativos na dica image-path
.
Adicionei alguns logs no Javascript do Cinnamon, e acabei aqui no arquivo js/ui/notificationDaemon.js
:
} else if (hints['image-path']) {
return textureCache.load_uri_async(GLib.filename_to_uri(hints['image-path'], null), size, size);
Esta chamada nunca retorna porque GLib.filename_to_uri
levanta uma exceção que não é tratada. Percebi que há alguns desta chamada no arquivo, onde as exceções não são tratadas.
Eu adicionei um extrato try
catch
, mas a notificação ainda não é exibida. Eu não fui mais longe.
Espero que isso ajude, sinta-se à vontade para me enviar um ping para obter mais detalhes. Saúde,
Arnaud
@elboulangero, você ainda está tendo esse problema?
@ icarter09 Desculpe, descobri isso apenas enquanto fazia alguns testes em uma VM Cinnamon, depois que o usuário relatou um travamento com Goodvibes no Cinnamon. Eu não administro o Cinnamon, então não posso dizer.
Dito isso, acho que você pode tentar as "Etapas para reproduzir" acima para ver se ainda é um problema
Felicidades
@ icarter09 Sim, ainda é um problema aqui, o fedora usa @itzexor WIP para corrigi-lo
https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f
Comentários muito úteis
@ icarter09 Sim, ainda é um problema aqui, o fedora usa @itzexor WIP para corrigi-lo
https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f