Как определить, была ли нажата клавиша-модификатор во время сброса на панели Dock? - PullRequest
3 голосов
/ 13 мая 2011

Мое приложение Cocoa поддерживает перетаскивание файлов на значок Dock, но мне бы хотелось иметь другое поведение в зависимости от того, нажата ли клавиша-модификатор (Command, Option и т. Д.).

Я попытался проверить modifierFlags для currentEvent, но они одинаковы, независимо от того, удерживается ли модификатор или нет (я тестировал с помощью клавиши Option).

Код:

// Code is inside my AppDelegate
- (void)application:(NSApplication *)theApplication openFiles:(NSArray *)files {
    BOOL optDown = (([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask)
                    == NSAlternateKeyMask);
    NSLog(@"flags: %u, down? %@", [[NSApp currentEvent] modifierFlags],
          optDown ? @"YES" : @"NO");
}

Вывод (перетаскивание файла ключом Option вниз, а затем нет):

flags: 1088, down? NO
flags: 1088, down? NO

Ожидаемое

flags: <not sure>, down? YES
flags: <different>, down? NO

1 Ответ

14 голосов
/ 13 мая 2011

В общем, вы не можете ожидать, что [NSApp currentEvent] будет иметь какое-либо отношение к текущему состоянию пользователя, если ваше приложение не является передним.

Чтобы получить состояние оборудования, которое будет работать независимо от самого переднего.приложение, GetCurrentKeyModifiers() поддерживается обратно до 10.0 (включая 64-битные);[NSEvent modifierFlags] - это еще один вариант, если вам может потребоваться 10,6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...