【发布时间】:2017-09-16 20:30:25
【问题描述】:
我第一次尝试提出以下问题时显然出了点问题:
我正在尝试编写一个传统的全屏切换功能,该功能应该在当前屏幕(监视器)上将窗口置于或退出全屏模式,同时不影响其他屏幕的内容 - 无论空间如何配置。
我已经让它适用于“传统”空间模式,其中每个空间跨越所有连接的屏幕。在这种情况下,主屏幕上只有 1 个菜单栏和 Dock,都可以通过 [[NSScreen screens] firstObject] 获得。因此,我可以做类似的事情
if ([nsWin screen] == [[NSScreen screens] firstObject]) {
m_normalPresOpts = [nsApp presentationOptions];
[nsApp setPresentationOptions:m_normalPresOpts | NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationAutoHideDock];
}
让 Dock 和菜单栏仅在全屏窗口位于主屏幕上时自动隐藏。
Apple 无法在不重新启动登录会话的情况下切换 Spaces 设置,所以我什至不知道当屏幕有单独的 Spaces 时上面的代码是如何工作的。我怀疑[[NSScreen screens] firstObject] 仍将包含左上角位于 (0,0) 的屏幕,因此其他屏幕上的全屏窗口将继续使菜单栏和 Dock 可见。此外,我仍在运行 10.9,并且也希望在以后的版本中立即正确处理。
有没有办法以编程方式确定 Spaces 的配置方式或知道给定屏幕是否包含菜单栏/Dock?谷歌搜索没有给我任何与代码相关的结果。不知何故,我在磁盘文档中错过了[NSScreen +screensHaveSeparateSpaces],这是我问题的最终答案吗?
【问题讨论】:
-
即使使用“传统”空间模式,Dock 也不一定在主屏幕上。它可以配置为显示在桌面的左侧或右侧,可以将其放在另一个屏幕上。
-
嗯,你是对的。如果将辅助屏幕放在“主”屏幕下方,则将其放在底部也是如此。在这种情况下,您必须使用下面 Hofi 的方法,或者将 Dock 置于自动隐藏模式(暂时,如果可能的话)。
-
我想知道这是否是一种常见的设置。当我需要在一个屏幕上工作一段时间(想想笔记本电脑)时,我会发现不将两个元素放在同一个屏幕上并且改变它们的相对位置会很烦人。这不适用于底部 Dock 和垂直堆叠的屏幕,但有多少人会这样做 :)
-
我有双显示器,左侧是主显示器,右侧是 Dock。所以,这对我来说很常见。 ;)
-
哈,这解释了你为什么想到它 :P 如果你的 Dock 在左侧屏幕上处于活动状态时自动隐藏你的 Dock 会不会介意,因为你知道你仍然可以通过 "用鼠标光标触摸”屏幕右边框?
标签: cocoa fullscreen multiple-monitors mission-control