web-dev-qa-db-ja.com

Python-libnotifyがxfce4-notifydとnotify-osdで奇妙な動作を示す

Libnotifyのpython bindingsで遊んでみます。 /usr/share/doc/python-notify/examplesから このコード を取得しましたが、xfce4-notifydnotify-osdで異なる動作を示しています。

xfce4-notifydを使用したCase-1

enter image description here

case-2とnotify-osd

enter image description here

両方のケースで違いがわかります。最初のケースではactionbuttonの形式でxfce4-notifydに統合されますが、2番目のケースではこれは起こりません。 2番目のケースでは、new windowとして表示されます。

それで、なぜ私がこの奇妙な振る舞いを観察しているのか、そしてnotify-osd通知にアクションボタンを追加する方法を誰かに教えてもらえますか?.

PS:notify-osdのpatchedバージョンを使用しています。 notify-osdを使用したデフォルトの通知は次のようになります

enter image description here

2
RanRag

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()
1
andrewsomething