我正在开发移动工作空间的扩展,https://github.com/raonetwo/MaximizeToWorkspace。
对于以最大化模式启动的窗口,工作区切换按预期进行。新应用程序似乎处于焦点中,鼠标左键和右键单击(以及键盘)按预期工作。将鼠标悬停在图标上时,窗口会显示在活动概览和工作区以及应用程序预览中。但它在所在的工作区/显示器中不可见/不绘制。如果我最小化并取消最小化窗口(如从视频中看到的那样),它会开始正确绘制窗口。我该怎么做才能解决这个问题?
代码可以在以下位置找到https://github.com/raonetwo/MaximizeToWorkspace/tree/72d7f82d8930de1484fd2afa3caf9f20b245a1e2
答案1
global.run_at_leisure.bind
不是解决方案,因为在快速的机器上它会被调用得太早。
如果问题在于切换活动工作区:不要切换。
在“map”信号上使用workspacemanager.reorder_workspace(workspace,new_index)
将活动工作区放置在正确的索引上并移动窗口。
reorder_workspace
不调用workspace.activate()
。
答案2
我已经解决了这个问题。我需要将窗口的延迟移动到新工作区,直到所有其他处理完成。这是通过 global.run_at_leisure.bind 实现的。可以在 GitHub 存储库中找到工作代码。
我首先通过示例复制了这段代码,也许阅读文档对我来说会更好。总体而言没有问题,扩展按预期运行。
此后,我修改了扩展代码,在 global.display 上使用“window-created”信号,而不是在 global.window-manager 上使用“map”信号,因为它不起作用,并且最终会导致 gnome-shell 因引用了被破坏的对象而因信号 11 而崩溃。我还添加了最小的多显示器支持,并修复了由于拖放发出窗口创建信号但对象被破坏而导致 shell 崩溃的问题。