范围开发/如何在 perform_action 中更改范围结果

范围开发/如何在 perform_action 中更改范围结果

我有点搞不懂如何在Scope::perform_action方法或对象方法中 设置结果属性或触发范围搜索(刷新) ActivationQuery。这个想法是更改源中的数据,然后通过新查询刷新回复,或者只是以与源更改相同的方式修改先前的结果。典型的例子是设置“已读”状态。

您能通过下面的例子提供一点帮助吗?

sc::ActivationQueryBase::UPtr Scope::perform_action(const sc::Result &result,
                                      sc::ActionMetadata const &metadata,
                                      std::string const &widget_id, std::string const &action_id) {

    //update current Result/reply or trigger new search by scope

    return sc::ActivationQueryBase::UPtr(new ActivationQuery(result, metadata, widget_id, action_id, config_));

}

答案1

您无法更改结果本身,它仅用于读取,您需要将任何更新应用于后端数据,然后重新执行搜索。为此,请在 ActivationQuery 类中重新实现 ActivationQueryBase 的 activate() 方法;在 activate() 中执行更新后端数据所需的任何操作,然后返回使用此 ctor 创建的 ActivationResponse 实例:

激活响应(CannedQuery const&查询);

查询参数应该指向你的范围。

当点击预览中的按钮时重新执行搜索的另一种方法是将按钮的 uri 属性设置为 CannedQuery::to_uri() 的值,但在这种情况下不会执行激活处理程序。

请注意,使用第一种方法,您可能会遇到https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1335761

我希望这能有所帮助。

相关内容