我的扩展程序具有这样的代码
for (let i = 0; i < screen.get_n_workspaces(); ++i) {
let w = screen.get_workspace_by_index(i);
//Do something
}
由于gjs将c函数映射到javascript,因此meta_screen_get_n_workspaces
成为get_n_workspaces
。但是,当我尝试meta_screen_get_workspaces
screen.get_workspaces().forEach(w => {
//Do someting
})
它说“ get_workspaces不是一个函数”。这是什么问题?
答案 0 :(得分:2)
您很可能依赖于libmutter中最近更改的API。如果您使用的libmutter版本较旧或更改日期较新,则需要检查全局变量。
您可能可以从the diff in Gnome Shell中了解如何调整代码。
通常,工作区现在由MetaWorkspaceManager
处理,它在Gnome Shell中以global.workspace_manager
的形式提供,您可以在其上调用get_n_workspaces()
。 libmutter中的相关上游文件为workspace_manager.h
。在此之前,我相信可以通过global.screen
访问它们。