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()
誰かが私の間違いがどこにあるのか考えていますか?
よろしくお願いします
私は同じ問題を抱えており、エラーを回避する方法がわかりません。ただし、コンソールにスパムを送信する醜いエラーメッセージを処理できる場合は、次の問題を回避できます。
エラーがスローされた時点で、_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はおそらくエミュレートできません。
Unitygirファイルまたはpython-gobjectのいずれかのバグのようです。とにかく回避策として、これはうまくいくようです:
ret = Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH,goto_uri='')