如何通过名称获取 Clutter.Actor
How to get Clutter.Actor via its name
我正在使用 GJS,如何通过其名称获取 Clutter.Actor
。例如,如果我想获得 GNOME Shell 的顶部面板,我如何通过它的名称 "panel" 获得它的 Clutter.Actor
?
我的研究在 Clutter.Stage
的某个地方结束了,这是可以附加 Actor 的地方,但是按照我的看法,可以设置多个阶段,所以我可能还必须找到我要查找的演员处于哪个阶段。现在我想知道如何通过名字获得演员。
我从代码中看到了; Main.layoutManager.panelBox
获取 GNOME Shell 的顶部面板,但这似乎不适用于我的情况,因为它是我试图获取的第三方 Actor,以及我希望获取 Actor( s) 是通过名称,因为我可能正在与不同的第三方演员合作。
我知道有一种方法可以得到它; Main.layoutManager.panelBox.get_parent().get_children()
我可以通过它的索引获取特定的 Actor,但我认为这不是解决这个问题的最佳方式,考虑到事物的动态性,其次,我发现这种方式有点草率所以..
我可以通过 Looking Glass (Alt + F2 -> lg -> picker) 获取名称。目前,我尝试获取的特定 Actor 是 DashtoDock 的,仅供参考。
谢谢~希望有人能帮忙
不幸的是,您正在寻找的似乎是一个 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");
我正在使用 GJS,如何通过其名称获取 Clutter.Actor
。例如,如果我想获得 GNOME Shell 的顶部面板,我如何通过它的名称 "panel" 获得它的 Clutter.Actor
?
我的研究在 Clutter.Stage
的某个地方结束了,这是可以附加 Actor 的地方,但是按照我的看法,可以设置多个阶段,所以我可能还必须找到我要查找的演员处于哪个阶段。现在我想知道如何通过名字获得演员。
我从代码中看到了; Main.layoutManager.panelBox
获取 GNOME Shell 的顶部面板,但这似乎不适用于我的情况,因为它是我试图获取的第三方 Actor,以及我希望获取 Actor( s) 是通过名称,因为我可能正在与不同的第三方演员合作。
我知道有一种方法可以得到它; Main.layoutManager.panelBox.get_parent().get_children()
我可以通过它的索引获取特定的 Actor,但我认为这不是解决这个问题的最佳方式,考虑到事物的动态性,其次,我发现这种方式有点草率所以..
我可以通过 Looking Glass (Alt + F2 -> lg -> picker) 获取名称。目前,我尝试获取的特定 Actor 是 DashtoDock 的,仅供参考。
谢谢~希望有人能帮忙
不幸的是,您正在寻找的似乎是一个 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");