Не получается активировать сигнал 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: assertionG_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='')
Другие вопросы по тегам