Cocoa:访问事件队列?

时间:2012-07-05 00:39:21

标签: cocoa event-handling dock nsmenu

我有一个应用程序,当点击停靠栏图标(- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag

时会打开一个菜单

菜单“停止”当前线程的执行,直到它关闭。因此,一旦菜单关闭,我只会收到applicationShouldHandleReopen:的来电。

我认为使用计时器我可以检查队列中是否有这样的方法调用。但这可能吗?或者还有其他方法来处理我的问题? (我想在第二次点击停靠栏图标时关闭我的菜单)

1 个答案:

答案 0 :(得分:0)

我发现问题的解决方案:

我使用此代码Getting the position of my application's dock icon using Cocoa's Accessibility API来访问我的停靠栏图标的位置和大小。

然后使用带有+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block的NSEvent NSLeftMouseUp作为掩码,我设法抓住屏幕上的每次点击

最后,我只需检查我的点击是否与我的dockIcon的CGRect有关。 (我不得不欺骗一下,因为在菜单被取消后,applicationShouldHandleReopen:被调用,因为我点击了它)