【问题标题】:Why is moving a GUI window from the code discouraged?为什么不鼓励从代码中移动 GUI 窗口?
【发布时间】:2021-02-18 16:02:23
【问题描述】:

好吧,标题几乎说明了一切:为什么我不应该从代码中移动屏幕上的 GUI(例如 Gtk)窗口?在 Gtk 3 中有一个用于在屏幕上移动窗口的 API,但在 Gtk 4 中被删除了,因为从代码中移动窗口并不好;只有用户应该这样做(不要要求我提供来源,我在某处读过它但忘记了 where 并且找不到它)。但我想不出它为什么不好的任何原因,但有几个原因可能好,例如在应用程序重新启动之间恢复窗口的位置。你能解释一下吗?

【问题讨论】:

    标签: user-interface window gtk window-managers


    【解决方案1】:

    主要原因是它不可能跨平台工作,所以从定义上讲它是损坏的API。这也是它在 GTK4 中被删除的原因。例如:在 Wayland 会话之上运行时这是不可能实现的,因为该协议不允许获取/设置全局坐标。如果您仍然希望有类似的工作,则必须为您想要支持的平台调用特定平台 API(例如 X11)。

    关于某些显示协议不支持它的原因:它对用户体验和安全性不利。在 UX 方面:一些合成器可能有特殊行为,因为他们需要在小型设备上工作,或者因为他们有一个信息亭模式,在这种模式下,一切都应该始终全屏运行,或者他们提供平铺体验。应用程序自己定位它们的窗口然后往往会产生意想不到的行为。在安全性方面:如果您允许这样做,从技术上讲,应用程序可以重新定位和调整自身大小,使其覆盖您的屏幕,同时使其自身透明,而不会引起注意,这意味着它有可能抓取所有输入。

    【讨论】:

    • "Wayland session, since the protocol doesn't allow getting/setting global coordinates" - 但是 Gedit 窗口是如何通过拖动 HeaderBar 在 Wayland 上移动的?
    • 好问题!更好地解释here on wayland-book.com,但一般要点是:您需要像 XDG Desktop 这样的 Wayland 扩展,它提供一个可以作为客户端触发的事件,您可以在其中提供启动拖动操作的事件的序列号。之后,合成器接管并确保发生正确的事情。
    猜你喜欢
    • 2018-09-19
    • 2012-10-03
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2016-05-24
    • 2019-12-19
    相关资源
    最近更新 更多