Python-libnotify, показывающий странное поведение с xfce4-notifyd и notify-osd

Я пытаюсь поиграть с libnotify's python bindings. Я получил этот код из /usr/share/doc/python-notify/examples, и он показывает различное поведение с xfce4-notifyd и notify-osd.

Случай 1 с xfce4-notifyd

enter image description here

Случай 2 с notify-osd

enter image description here

Вы можете увидеть разницу в обоих случаях. В первом случае action интегрируется в виде button в xfce4-notifyd, тогда как во втором случае этого не происходит. Во втором случае это просто отображается как new window.

Итак, кто-нибудь может сказать мне, почему я наблюдаю это странное поведение и как мне добавить кнопки действий в notify-osd уведомления.

PS: я использую patched версию notify-osd. Мои уведомления по умолчанию с уведомлением-osd выглядят как

enter image description here

2
задан 1 July 2012 в 17:19

1 ответ

Notify-osd не обрабатывает действия. Это явное дизайнерское решение разработчиков. Как указано в в спецификации проекта , «кроме этого эффекта зависания, пузырьки не должны напрямую реагировать на устройства ввода». В он также утверждает , что когда запрашиваются действия, он возвращается к блоку предупреждения:

Для случаев, когда приложения ожидали, что система уведомлений разрешит интерактивность, не проверяя, действительно ли она и в случаях, когда приложения ожидали, что система уведомлений будет отображать уведомление в течение неопределенного периода времени, OSD Notify должно показывать окно предупреждения в качестве запасного варианта.

Пока обсуждаются вопрос о том, является ли это хорошим решением, Notify-osd является реализацией спецификации уведомлений Freedesktop , в которой четко указано, что это ответственность клиента чтобы убедиться, что сервер поддерживает желаемую возможность:

Клиенты должны стараться избегать предположений о представлении и возможностях сервера уведомлений. Содержание сообщения - самая важная вещь.

Клиенты могут проверить на сервере, какие возможности поддерживаются, используя сообщение GetCapabilities.

Вы можете проверить возможности сервера уведомлений с помощью чего-то вроде:

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()
0
ответ дан 1 July 2012 в 17:19

Другие вопросы по тегам:

Похожие вопросы: