为什么不鼓励从代码中移动 GUI window?
Why is moving a GUI window from the code discouraged?
好吧,标题几乎说明了一切:为什么我不应该从代码中在屏幕上移动 GUI(例如 Gtk)window?在 Gtk 3 中有一个 API 用于在屏幕上移动 windows,但它在 Gtk 4 中被删除,因为从代码中移动 window 是不好的;只有用户应该这样做(不要让我为此提供来源,我在某个地方读过它但忘记了 where 并且找不到它)。但我想不出它不应该好的任何原因,但有几个原因可以 是 好的,例如在应用程序之间恢复 window 的位置重新启动。你能解释一下吗?
主要原因是它不可能跨平台工作,所以它被破坏了 API 定义。这也是它在 GTK4 中被删除的原因。例如:当 运行ning 在 Wayland 会话之上时,这是不可能实现的,因为协议不允许 getting/setting 全局坐标。如果您仍然希望有类似的工作,您必须为您想要支持的平台调用特定平台 API(例如,X11)。
关于部分显示协议不支持的原因:不利于用户体验和安全。在 UX 方面:一些合成器可能有特殊的行为,因为他们需要在小型设备上工作,或者因为他们有 kiosk 模式,在这种模式下一切都应该 运行 全屏,或者他们提供平铺体验。然后,应用程序定位其 windows 本身往往会产生意想不到的行为。在安全性方面:如果您允许这样做,从技术上讲,应用程序可以重新定位和调整自身大小,以便它覆盖您的屏幕,同时使自身透明,而不被人注意到,这意味着它有可能抓取所有输入。
好吧,标题几乎说明了一切:为什么我不应该从代码中在屏幕上移动 GUI(例如 Gtk)window?在 Gtk 3 中有一个 API 用于在屏幕上移动 windows,但它在 Gtk 4 中被删除,因为从代码中移动 window 是不好的;只有用户应该这样做(不要让我为此提供来源,我在某个地方读过它但忘记了 where 并且找不到它)。但我想不出它不应该好的任何原因,但有几个原因可以 是 好的,例如在应用程序之间恢复 window 的位置重新启动。你能解释一下吗?
主要原因是它不可能跨平台工作,所以它被破坏了 API 定义。这也是它在 GTK4 中被删除的原因。例如:当 运行ning 在 Wayland 会话之上时,这是不可能实现的,因为协议不允许 getting/setting 全局坐标。如果您仍然希望有类似的工作,您必须为您想要支持的平台调用特定平台 API(例如,X11)。
关于部分显示协议不支持的原因:不利于用户体验和安全。在 UX 方面:一些合成器可能有特殊的行为,因为他们需要在小型设备上工作,或者因为他们有 kiosk 模式,在这种模式下一切都应该 运行 全屏,或者他们提供平铺体验。然后,应用程序定位其 windows 本身往往会产生意想不到的行为。在安全性方面:如果您允许这样做,从技术上讲,应用程序可以重新定位和调整自身大小,以便它覆盖您的屏幕,同时使自身透明,而不被人注意到,这意味着它有可能抓取所有输入。