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
Cas-2 avec notify-osd
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
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()