gpt4 book ai didi

c - X11:如何让一个窗口一个接一个地移动?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:11 25 4
gpt4 key购买 nike

我有两个顶层窗口,win1 和 win2。

我想在移动 win1 时让 win2 跟随 win1,以便 win2 相对于 win1 的位置(我称之为 relpos)保持不变。 IOW,粘性窗口!

我的想法是在win1的ConfigureNotify中移动win2。为此,我需要知道 relpos

当 win2 移动时,我可以在 win2 的 ConfigureNotify 中获取(并存储)relpos。

问题是 win2 在用户移动和以编程方式移动时都会获取 ConfigureNotify。有没有办法区分这两种情况?

如果没有,整个方法就是失败的,所以下一个问题是:还有其他方法吗?

谢谢。

注意:我不能只设置一个“moving_programmatically”标志,移动窗口,然后检查 ConfigureNotify 上的标志,因为 X 是异步的(它最大的缺点之一 - 许多人认为这是一个功能)并且无法保证何时和我得到了多少 ConfigureNotify 事件。尝试这样做并将 win1 移动得太快,看看 win2 是如何落后的。

最佳答案

我认为您必须为此编写一个窗口管理器。你遇到麻烦的原因是你无法获得“点击 win1 标题”和“在 win1 上释放鼠标按钮”事件 - 窗口管理器在你的应用程序可以看到它们之前吞下它们。使用这些事件,解决方案很简单:当用户单击 win1 的标题栏时获取相对偏移量,并在移动 win1 时使用此偏移量。

其他应用程序(如 LibreOffice)通过允许将此类窗口拖到主窗口中来解决此问题(主窗口变大,子窗口变成旁边的调色板)。

关于c - X11:如何让一个窗口一个接一个地移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32247059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com