Я пытаюсь разработать линзу для единства в 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 ()
У кого-нибудь есть идеи, где моя ошибка?
Заранее благодарю за помощь
Кажется, что это ошибка в gir-файле Unity или в python-gobject. Во всяком случае, как обходной путь, это похоже на работу:
ret = Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH,goto_uri='')
У меня та же проблема, и я не знаю, как избежать ошибки. Однако, если вы можете жить с уродливым сообщением об ошибке, спамом на консоли, вы можете обойти его:
В момент возникновения ошибки _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, вероятно, нельзя эмулировать.