我正在尝试在 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(对象)'失败 GObject.MainLoop().run() ../lens/appslens.py:230:警告:g_object_unref:断言“G_IS_OBJECT(对象)'失败 GObject.MainLoop().run()
有人知道我的错误在哪里吗?
在此先感谢您的帮助
答案1
我遇到了同样的问题,不知道如何避免该错误。但是,如果您可以忍受控制台上不断出现的丑陋错误消息,则可以解决该问题:
在抛出错误时,_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 可能无法被模拟。
答案2
似乎是 Unity gir 文件或 python-gobject 中的一个错误。无论如何,作为一种解决方法,这似乎有效:
ret = Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH,goto_uri='')