2012-07-05 5 views
0

У меня есть приложение, открывающее меню при нажатии на значок док-станции (- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag)Cocoa: Доступ к очереди событий?

Меню «останавливает» выполнение текущей нити, пока она не будет закрыта. Поэтому я получаю только звонки applicationShouldHandleReopen: после закрытия меню.

Я думал, что с помощью таймера я могу проверить, есть ли такие вызовы методов в очереди. Но возможно ли это? Или есть другой способ справиться с моей проблемой? (Я хочу, чтобы закрыть мое меню на второй клик на значок док-станции)

+0

Непонятно, в чем проблема? Как насчет поведения по умолчанию нежелательно? Метод 'applicationShouldHandleReopen:' вызывается всякий раз, когда пользователь нажимает один раз на значок док-станции непосредственно перед тем, как ваше приложение становится активным. Меню док-станции для вашего приложения отображается всякий раз, когда пользователь щелкает и удерживает или щелкает правой кнопкой мыши значок вашего док-станции. Второй щелчок на значке вашего док-станции при отображении меню закроет его, не приведя ваше приложение на передний план. Вы можете указать настраиваемые элементы для отображения в этом меню док-станции, но не с помощью 'applicationShouldHandleRopen:'. –

+0

Извините, я не был достаточно ясен: я использую меню custum, которое появляется при нажатии налево. –

+0

Я вижу. Будет ли стандартный щелчок правой кнопкой мыши по настройке меню Док-станции, используемой Finder и другими приложениями, для вас? Добавление статических или динамических пунктов меню в это меню описано здесь (http://developer.apple.com/library/mac/#documentation/Carbon/Conceptual/customizing_docktile/docktasks_cocoa/docktasks_cocoa.html#//apple_ref/doc/ UID/TP30000986-СН3-SW6). При открытии меню, похожее на док-станцию, когда пользователь оставит клики, удивит некоторых пользователей и будет иметь странность интерфейса, которая оставила бы и щелкнула правой кнопкой мыши различные меню. –

ответ

0

Решение я нашел мою проблему:

Я использовал этот код Getting the position of my application's dock icon using Cocoa's Accessibility API, чтобы получить доступ к позиции и размера моей значок док-станции.

Затем с NSEvent + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block с NSLeftMouseUp как маску, мне удается поймать каждый клик на экране

Наконец, я должен был проверить, если мой щелчок был с CGRect моего DockIcon. (Мне пришлось немного обмануть, потому что после того, как меню уволено, applicationShouldHandleReopen: называется, потому что я нажимаю на него)