如何检查Exposé是否被激活?

时间:2010-04-13 03:36:36

标签: objective-c cocoa macos apple-expose

我正在创建一个模拟MacBook多点触控板的应用程序。您可能知道,在MacBook的触控板上

  • 如果您向上滑动4个手指,则会触发Show Desktop。
  • 如果您向下滑动4根手指,则会显示Exposé。

但是,如果正在激活“显示桌面”并向下滑动4个手指,它将返回到正常模式。 Exposé也是如此:如果激活Exposé并向上滑动4根手指,它也会恢复正常模式。

问题在于:我使用键盘快捷键F3显示Exposé和F11以显示Show Desktop。问题是,当激活Show Desktop时,如果按F3,它将直接进入Exposé。当Exposé被激活时,如果按F11,它将直接进入Show Desktop。但我希望它的行为类似于触控板,我猜它的代码可能看起来像这样

- FourFingersDidSwipeUp {
    if (isExposeBeingActivated() || isShowDesktopBeingActivated()) {
        pressKey("Esc");
    } else {
        pressKey("F11");
    }
}

但我不知道如何实现“isExposeBeingActivated()”和“isShowDesktopBeingActivated()”方法。我已经尝试创建一个窗口并检查它的大小是否已经改变(假设如果激活Expose,它的大小应该更小),但系统总是返回相同的大小。我尝试在Expose期间监视后台进程,但没有任何反应。对此有什么建议吗?

(如果我的英语听起来很奇怪,我很抱歉。)

2 个答案:

答案 0 :(得分:1)

据我所知,除了能够指定自己应用程序窗口的“收集行为”之外,没有任何与Exposé相关的功能的公共接口。

答案 1 :(得分:0)

在阅读完电子邮件后来到这里。我理解这个问题。经过一番谷歌搜索后,我发现了你已经知道的内容,确实没有Exposé的官方API或文档。我想到的一个非常难看的解决方案可能是让Exposé触发一个计时器,该计时器等于完全显示所有窗口所需的总时间(猜测这是不变的)。如果在该计时器内完成向上滑动,则意味着Exposé仍然处于活动状态(isExposeBeingActivated()),因此您将触发取消而不是Show Desktop。这不包括使用“慢动作”Exposé(通过SHIFT键)。也许你可以检测到它是正常的还是“慢动作”的Exposé电话?

真的很抱歉,如果这在你的应用程序范围内根本没有意义,我想我只是在说第一个我想到的解决方案。

干杯。

佩德罗。