首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过名称获取Clutter.Actor

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

Stack Overflow用户
提问于 2018-02-04 17:16:35
回答 1查看 187关注 0票数 0

我正在使用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的,仅供参考。

谢谢~希望有人能帮上忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-05 04:12:36

不幸的是,您要寻找的似乎是一个searchByName()函数,但我认为您必须自己实现它。类似于(未测试的):

代码语言:javascript
复制
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上调用它

代码语言:javascript
复制
const Main = imports.ui.main;

let dashToDock = searchByName(Main.layoutManager.uiGroup, "dashtodockContainer");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48606536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档