web-dev-qa-db-ja.com

レンズを作るときにactivate_uri信号を機能させることができません

Ubuntu 11.10でUnity用のレンズを開発しようとしていますが、activate_uri信号を機能させることができません。これは私のコードの抜粋です:

_def _on_activate_uri (self, scop, uri):
    print "----> " + uri + "<-"
    ret=Unity.ActivationResponse.new(Unity.HandledType.HIDE_DASH,'')
    return ret
_

そしてこれは私が返すものです:

TypeError:戻り値を目的のタイプに変換できません../lens/appslens.py:230:警告:g_object_get_qdata:アサーションG_IS_OBJECT (object)' failed GObject.MainLoop().run() ../lens/appslens.py:230: Warning: g_object_set_qdata_full: assertion G_IS_OBJECT(object) 'が失敗しましたGObject.MainLoop()。run().. /lens/appslens.py:230:警告:g_object_unref:アサーション `G_IS_OBJECT(object) 'が失敗しましたGObject.MainLoop()。run()

誰かが私の間違いがどこにあるのか考えていますか?

よろしくお願いします

3
pub.david

私は同じ問題を抱えており、エラーを回避する方法がわかりません。ただし、コンソールにスパムを送信する醜いエラーメッセージを処理できる場合は、次の問題を回避できます。

エラーがスローされた時点で、_on_activate_uriが実行されているため、そこで実行したいすべてのこと(この例では、印刷)が実行されているはずです。それは確かに私にとってそのように機能します。

基本的に、モデルリソースのURIスキームを賢く選択することで、HIDE_DASHまたはデフォルトのフォールバック(URIスキームに適したインストール済みアプリケーションを使用)の動作をエミュレートできます。

私の場合、そしてあなたの例では、HIDE_DASHの振る舞いが必要です。エラーがスローされると、Unityは適切なアプリケーションでURIを開くことで状況に対処しようとします。したがって、HIDE_DASHのように動作させるには、インストールされたアプリケーションが処理できないスキームを使用して、モデルリソースのURIを指定する必要があります。私の場合、URIは「Pidgin-lens://」で始まります。

URIが「http://」で始まる場合、_on_activate_uriの実行後にブラウザーが開かれるため、動作(NOT_HANDELED/GOTO_DASH_URI)も簡単にエミュレートされます。

SHOW_DASHはおそらくエミュレートできません。

1
Wolfgang Groiss

Unitygirファイルまたはpython-gobjectのいずれかのバグのようです。とにかく回避策として、これはうまくいくようです:

ret = Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH,goto_uri='')
1
mhr3