Libnotifyのpython bindings
で遊んでみます。 /usr/share/doc/python-notify/examples
から このコード を取得しましたが、xfce4-notifyd
とnotify-osd
で異なる動作を示しています。
xfce4-notifydを使用したCase-1
case-2とnotify-osd
両方のケースで違いがわかります。最初のケースではaction
はbutton
の形式でxfce4-notifyd
に統合されますが、2番目のケースではこれは起こりません。 2番目のケースでは、new window
として表示されます。
それで、なぜ私がこの奇妙な振る舞いを観察しているのか、そしてnotify-osd
通知にアクションボタンを追加する方法を誰かに教えてもらえますか?.
PS:notify-osdのpatched
バージョンを使用しています。 notify-osdを使用したデフォルトの通知は次のようになります
Notify-osdはアクションを処理しません。これは、開発者による明示的な設計決定です。 設計仕様は のように、「そのホバー効果以外は、泡はいかなる方法でも入力デバイスに直接応答すべきではありません。」 これもアサートします アクションが要求されると、アラートボックスにフォールバックします。
アプリケーションが、通知システムが実際に許可するかどうかを確認せずに対話性を許可することを期待していた場合、およびアプリケーションが通知システムに通知を無期限に表示することを期待していた場合、Notify OSDはフォールバックとしてアラートボックスを表示する必要があります。
それが適切な決定であるかどうかは議論の余地がありますが、Notify-osdは Freedesktop notification spec の実装であり、サーバーがサポートすることを確認するのはクライアントの責任であることを明確に述べています望ましい能力:
クライアントは、通知サーバーのプレゼンテーションと機能についての想定を避けてください。メッセージの内容が最も重要です。
クライアントは、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()