我有一个使用 Swing 库的 java 图形应用程序。如果应用程序最小化并且图形内容发生变化(颜色或其他),我应该在恢复窗口时看到修改。然而,窗口并没有更新,仍然像以前的状态。如果我调整窗口大小或移动它,它就会刷新。
我在 Linux 系统上运行这个程序,使用 X11 1.17.2 和 Mutter 3.14.4 作为窗口管理器。我知道问题来自 X11 发送的消息或来自 mutter 配置,因为该程序在另一个使用 X11 1.10.4 和 Metacity 2.28.0 的系统上运行。
我如何配置 Mutter 以允许其在 deiconify 上更新应用程序以及调整大小?或者我必须配置X11吗?我完全不知道如何解决这个问题......
答案1
Mutter 是一个合成窗口管理器。即使取消图标化,它也可能保留窗口缓冲区。这对于窗口切换功能很有用。例如,GNOME3“概述”显示所有窗口的完整内容,包括图标化窗口。 Metacity 不进行合成,因此它不使用任何屏幕外缓冲区。
您所描述的情况可能是 Mutter 和/或您的 X11 客户端程序中的错误。也就是说,您应该假设这不是配置问题。
该错误可能存在于您的代码中,或者存在于 Java/Swing 中。公平地说,如果您手动检测窗口是否已图标化,然后避免请求重新绘制,我怀疑您可能已经意识到这就是问题所在:-)。
考虑到 GNOME3,我可以想象这没有经过充分测试,因为普通 GNOME3 的窗口标题栏中没有“最小化”按钮。
您可以在代码中尝试一种解决方法。我认为这是非常明显的:-)。即侦听窗口被取消图标化,然后请求重新绘制。