在Linux中确定和恢复Window状态

时间:2016-09-04 01:18:42

标签: linux x11 xlib

我使用xlib。我想记住窗口位置,并在下次启动时将其恢复到该位置。这将有助于用户,因为他不需要在每次开始时将窗口移动/调整到所需位置。

除了一个案例外,它或多或少都可以。当窗口最大化时,我找不到确定其真实(非最大化)大小和位置的方法。也许有人知道怎么做?

1 个答案:

答案 0 :(得分:2)

据我所知,有一种标准方法可以做到这一点。例如,如果您阅读Metacity的源代码,您可以看到它在MetaWindow对象中保持这个未最大化的大小,但我认为它不会存储在属性中,而且我也没有看到它的属性。 EWMH或ICCCM规范。

某些特定的窗口管理器可能会将其存储在非标准属性中。

当一个窗口最大化时,你可以获得一个带有最大化标志的属性更改事件(libwnck是一个旧库来跟踪这种事情,也许那里有一个我不知道的新事物)。但是我怀疑它是否定义了调整大小是在设置标志之前还是之后发生的。您可以启发式地假设在设置最大化标记的1秒内覆盖大部分屏幕的调整大小是最大化或类似的黑客攻击。

所有这一切,我怀疑获得此功能的最简单方法是将其实现为窗口管理器扩展或插件,许多WM以某种方式支持它。

有一个旧的规范(X会话管理协议),不幸的是,规范被荒谬地破坏,不清楚,基本上不可能实现。一个从未解决的核心问题 - 可能需要应用合作来解决 - 是如何识别"同样的"窗口重新启动以恢复其大小。 只有有缺陷的启发式方法。

(我曾写过metacity并且很久以前曾在几位会议经理工作过,所以一旦我能告诉你更多,但我已经忘记了很多细节。)