web-dev-qa-db-fra.com

Python-libnotify montrant un comportement étrange avec xfce4-notifyd et notify-osd

J'essaie de jouer avec python bindings De libnotify. J'ai ce code de /usr/share/doc/python-notify/examples Et il montre un comportement différent avec xfce4-notifyd Et notify-osd.

Cas-1 avec xfce4-notifyd

enter image description here

Cas-2 avec notify-osd

enter image description here

Vous pouvez voir la différence dans les deux cas. Dans le premier cas, le action est intégré sous la forme de button dans xfce4-notifyd Alors que dans le deuxième cas, cela ne se produit pas. Dans le deuxième cas, il apparaît simplement sous la forme d'un new window.

Alors, quelqu'un peut-il me dire pourquoi j'observe ce comportement étrange et comment ajouter des boutons d'action aux notifications notify-osd.

PS: j'utilise la version patched de notify-osd. Mes notifications par défaut avec notify-osd ressemblent

enter image description here

2
RanRag

Notify-osd ne gère pas les actions. Il s'agit d'une décision de conception explicite des développeurs. Comme les spécifications de conception stipulent , "En dehors de cet effet de survol, les bulles ne devraient en aucun cas répondre directement aux périphériques d'entrée." Le il affirme également que lorsque des actions sont demandées, il reviendra à une boîte d'alerte:

Pour les cas où les applications s'attendaient à ce que le système de notification autorise l'interactivité sans vérifier s'il le fait réellement, et les cas où les applications s'attendaient à ce que le système de notification affiche une notification indéfiniment, Notify OSD devrait afficher une boîte d'alerte comme solution de rechange.

Bien qu'il soit question de savoir si c'est une bonne décision, Notify-osd est une implémentation de la spécification de notification Freedesktop , qui indique clairement qu'il est de la responsabilité du client de s'assurer que le serveur prend en charge la capacité souhaitée:

Les clients doivent essayer d'éviter de faire des hypothèses sur la présentation et les capacités du serveur de notification. Le contenu du message est la chose la plus importante.

Les clients peuvent vérifier auprès du serveur les fonctionnalités prises en charge à l'aide du message GetCapabilities.

Vous pouvez tester les capacités du serveur de notification avec quelque chose comme:

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()
1
andrewsomething