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

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

Дело-1 с xfce4-notifyd

введите описание здесь

Дело-2 с уведомлением-OSD

введите описание здесь

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

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

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

введите описание здесь

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()
Другие вопросы по тегам