我正在使用GJS,如何通过它的名称获取Clutter.Actor。例如,如果我想获取GNOME Shell的顶部面板,如何通过其名称“Clutter.Actor”获取其面板?
我的研究最终在Clutter.Stage上的某个地方结束了,这是演员可以被附加的地方,然而在我看来,可能有多个阶段设置,所以我可能还必须找到我试图寻找的演员是在哪个阶段。现在,我想知道怎样才能通过Actor的名字获得它。
我已经从代码中看到了;Main.layoutManager.panelBox来获得GNOME Shell的顶部面板,然而这似乎不适用于我的情况,因为它是我试图获得的第三方Actor,而我希望获得Actor的方式是通过名称,因为我可能正在与不同的第三方Actor(s)合作。
据我所知,有一种方法可以获得它;Main.layoutManager.panelBox.get_parent().get_children()和我可以通过它的索引来获取特定的参与者,但我认为这不是处理这个问题的最佳方式,考虑到事物的动态性,其次,我觉得这种方式有点草率。
我是通过Looking Glass (Alt + F2 -> lg ->选择器)得到这个名字的。就目前而言,我想要获取的特定Actor是DashtoDock的,仅供参考。
谢谢~希望有人能帮上忙。
发布于 2018-02-05 04:12:36
不幸的是,您要寻找的似乎是一个searchByName()函数,但我认为您必须自己实现它。类似于(未测试的):
function searchByName(topActor, name) {
let children = topActor.get_children();
for (let i = 0; i < children.length; i++) {
if (child.name === name) {
return child;
} else if (child.get_n_children()) {
let result = searchByName(child, name);
if (result) {
return result;
}
}
}
return false;
};然后在Dash to Dock所在的Main.layoutManager.uiGroup上调用它
const Main = imports.ui.main;
let dashToDock = searchByName(Main.layoutManager.uiGroup, "dashtodockContainer");https://stackoverflow.com/questions/48606536
复制相似问题