Python-libnotify mostrando comportamento estranho com xfce4-notifyd e notify-osd

2

Estou tentando brincar com python bindings da libnotify. Eu tenho este código de /usr/share/doc/python-notify/examples e ele está mostrando um comportamento diferente com xfce4-notifyd e notify-osd .

Caso 1 com xfce4-notifyd

Caso 2 com notificar-osd

Você pode ver a diferença em ambos os casos. No primeiro caso, o action é integrado na forma de button em xfce4-notifyd , enquanto no segundo caso isso não está acontecendo. No segundo caso, apenas aparece como new window .

Então, alguém pode me dizer por que estou observando esse comportamento estranho e como adiciono botões de ação às notify-osd notificações?

PS: estou usando a versão patched do notify-osd. Minhas notificações padrão com o notify-osd se parecem com

    
por RanRag 01.07.2012 / 15:19

1 resposta

1

O Notify-osd não manipula ações. Essa é uma decisão de design explícita dos desenvolvedores. Como os estados das especificações de design , "além do efeito de foco, as bolhas não devem responder diretamente aos dispositivos de entrada de forma alguma." O também afirma que, quando ações são solicitadas, elas retornam para uma caixa de alerta:

  

Para casos em que os aplicativos esperavam que o sistema de notificação   permitir a interatividade sem verificar se ela realmente funciona e   casos em que as aplicações esperavam que o sistema de notificação   exibir uma notificação indefinidamente, o Notify OSD deve mostrar um alerta   caixa como um fallback.

Embora esteja em debate se esta é ou não uma boa decisão, O Notify-osd é uma implementação da especificação de notificação do Freedesktop , que afirma claramente que é a responsabilidade do cliente para garantir que o servidor suporte a capacidade desejada:

  

Os clientes devem tentar evitar suposições sobre a apresentação   e habilidades do servidor de notificação. O conteúdo da mensagem é o   coisa mais importante.

     

Os clientes podem verificar com o servidor quais recursos são suportados   usando a mensagem GetCapabilities.

Você pode testar os recursos do servidor de notificação com algo como:

import pynotify

pynotify.init("Test Capabilities")
caps = pynotify.get_server_caps()

if caps and 'actions' in caps:
    # We support actions, so add a button.
    notification = pynotify.Notification("Can we use actions?", \
                                         "Yup, we sure do.")
    notification.add_action("ignore", "Ignore", ignore_cb)
else:
    notification = pynotify.Notification("Can we use actions?", \
                                         "Nope, we don't support actions.")
notification.show()
    
por andrewsomething 02.08.2012 / 02:21