0

我正在使用 GJS,我如何Clutter.Actor通过它的名称获得。例如,如果我想获得 GNOME Shell 的顶部面板,我如何Clutter.Actor通过它的名称“面板”获得它?

我的研究最终在某个地方Clutter.Stage可以附加 Actor(s),但是根据我的看法,可以有多个 Stages 设置,所以我可能还必须找到我想要的 Actor 是哪个 Stage找到在。现在我想知道如何通过名称获取 Actor。

我从代码中看到了;Main.layoutManager.panelBox获取 GNOME Shell 的顶部面板,但这似乎不适用于我的情况,因为它是我想要获取的第三方 Actor,并且我希望获取 Actor(s) 的方式是通过名称,因为我可能正在工作与不同的第三方参与者。

我知道有一种方法可以得到这个;Main.layoutManager.panelBox.get_parent().get_children()我可以通过它的索引获得特定的演员,但我认为这不是解决这个问题的最佳方法,考虑到事物的动态性,其次,我觉得这种方式有点草率所以..

我能够通过窥镜获得名称(Alt + F2 -> lg -> 选择器)。目前,我想要获取的特定 Actor 是 DashtoDock,仅供参考。

谢谢~希望有人能帮忙。

4

1 回答 1

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");
于 2018-02-04T20:12:35.883 回答