如何通过其名称获取Clutter.Actor

时间:2018-02-04 09:16:35

标签: gnome-shell clutter gjs

我正在使用GJS,如何通过其名称获取Clutter.Actor。例如,如果我想获得GNOME Shell的顶级面板,如何通过其名称" panel"来获取Clutter.Actor

我的研究在Clutter.Stage的某个地方结束,这是可以附加Actor的地方,但是通过我看到的方式,可以有多个阶段设置,所以我可能还必须找到哪个阶段这是我试图找到的演员。现在我想知道如何通过它的名字获得一个Actor。

我从代码中看到过; Main.layoutManager.panelBox获取GNOME Shell的顶级面板,但这似乎并不适用于我的案例,因为它是我想要获得的第三方演员,以及我希望的方式获得Actor是通过名称,因为我可能与不同的第三方Actor(。)。

我知道有一种方法可以得到这个; Main.layoutManager.panelBox.get_parent().get_children()我可以通过它的索引获得特定的Actor,但我不认为这是解决这个问题的最好方法,考虑到动态的东西,其次,我觉得这样有点草率。

我能够通过Looking Glass(Alt + F2 - > lg - >选择器)获得名称。现在,我想要获得的具体演员是DashtoDock,仅供参考。

谢谢〜希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:2)

不幸的是,您似乎正在寻找的是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;
};

然后在Main.layoutManager.uiGroup上调用它,其中Dash to Dock是

const Main = imports.ui.main;

let dashToDock = searchByName(Main.layoutManager.uiGroup, "dashtodockContainer");