我的扩展有这样的代码
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不是一个函数"。这里有什么问题?
很可能您依赖于最近在libmutter中更改的API。如果您使用的是旧版本的 libmutter 或比更改日期更新的版本,则需要检查全局变量。
你可以从 Gnome Shell 的差异中弄清楚你的代码需要如何调整。
通常,工作区现在由MetaWorkspaceManager
处理,它可以在 Gnome Shell 中作为global.workspace_manager
使用,您可以为此调用get_n_workspaces()
。libmutter 中的相关上游文件是workspace_manager.h
。在此之前,我相信它们是通过global.screen
访问的。