窗口不可见,新的最大化窗口被移动到新的工作区但未绘制 Ubuntu 19.10

窗口不可见,新的最大化窗口被移动到新的工作区但未绘制 Ubuntu 19.10

我正在开发移动工作空间的扩展,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 崩溃的问题。

相关内容