Не получается активировать сигнал activ_uri при изготовлении объектива
Я пытаюсь разработать линзу для единства в Ubuntu 11.10 и не могу заставить работать сигнал activ_uri. Это выдержка из моего кода:
def _on_activate_uri (self, scop, uri):
print "----> " + uri + "<-"
ret=Unity.ActivationResponse.new(Unity.HandledType.HIDE_DASH,'')
return ret
и вот что я получаю обратно:
Ошибка типа: невозможно преобразовать возвращаемое значение в требуемый тип../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 ()
У кого-нибудь есть идея, где моя ошибка?
Заранее спасибо за помощь
2 ответа
У меня та же проблема, и я не знаю, как избежать ошибки. Однако, если вы можете жить с уродливым сообщением об ошибке, спамом на консоли, вы можете обойти это:
В момент выдачи ошибки _on_activate_uri был выполнен, поэтому все, что вы, возможно, захотите сделать там (печать в вашем примере), должно было произойти. Это, конечно, работает для меня таким образом.
По сути, мудро выбирая схему URI для ресурсов модели, мы можем эмулировать либо HIDE_DASH, либо режим по умолчанию (использовать установленное приложение, подходящее для схемы uri).
В моем случае и в вашем примере мы хотим поведение HIDE_DASH. Когда выдается ошибка, очевидно, единица пытается справиться с ситуацией, открывая URI с подходящим приложением. Таким образом, чтобы заставить его вести себя так же, как в HIDE_DASH, нам просто нужно предоставить URI ресурсов модели со схемой, которую не может обработать ни одно установленное приложение. В моем случае это могло бы заставить URI начинаться с "pidgin-lens://".
Если ваши URI начинаются с "http://", браузер будет открыт после запуска _on_activate_uri, так что поведение (NOT_HANDELED/GOTO_DASH_URI) также легко эмулируется.
SHOW_DASH, вероятно, не может быть эмулировано.
Кажется, это ошибка либо в gir-файле Unity, либо в python-gobject. Во всяком случае, как обходной путь, это похоже на работу:
ret = Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH,goto_uri='')