Я пытаюсь поиграть с libnotify's python bindings
. Я получил этот код из /usr/share/doc/python-notify/examples
, и он показывает различное поведение с xfce4-notifyd
и notify-osd
.
Случай 1 с xfce4-notifyd
Случай 2 с notify-osd
Вы можете увидеть разницу в обоих случаях. В первом случае action
интегрируется в виде button
в xfce4-notifyd
, тогда как во втором случае этого не происходит. Во втором случае это просто отображается как new window
.
Итак, кто-нибудь может сказать мне, почему я наблюдаю это странное поведение и как мне добавить кнопки действий в notify-osd
уведомления.
PS: я использую patched
версию notify-osd. Мои уведомления по умолчанию с уведомлением-osd выглядят как
Notify-osd не обрабатывает действия. Это явное дизайнерское решение разработчиков. Как указано в в спецификации проекта , «кроме этого эффекта зависания, пузырьки не должны напрямую реагировать на устройства ввода». В он также утверждает , что когда запрашиваются действия, он возвращается к блоку предупреждения:
Для случаев, когда приложения ожидали, что система уведомлений разрешит интерактивность, не проверяя, действительно ли она и в случаях, когда приложения ожидали, что система уведомлений будет отображать уведомление в течение неопределенного периода времени, OSD Notify должно показывать окно предупреждения в качестве запасного варианта.
blockquote>Пока обсуждаются вопрос о том, является ли это хорошим решением, Notify-osd является реализацией спецификации уведомлений Freedesktop , в которой четко указано, что это ответственность клиента чтобы убедиться, что сервер поддерживает желаемую возможность:
Клиенты должны стараться избегать предположений о представлении и возможностях сервера уведомлений. Содержание сообщения - самая важная вещь.
Клиенты могут проверить на сервере, какие возможности поддерживаются, используя сообщение GetCapabilities.
blockquote>Вы можете проверить возможности сервера уведомлений с помощью чего-то вроде:
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()