я, кажется, точную проблему противоположному, чем this question on stopping dock bounce.Не удается получить NSAlert постоянно подпрыгивать док значок
Я не могу получить мое приложение постоянно подпрыгивать значок док-станции!
Я слишком ненавижу постоянно отскакивать значки док-станции, но в этом случае, если пользователь не понимает, что мое приложение не может запускаться, они могут потерять часы отслеживания времени.
Вот мой код, который я положил в приложение, делегирует applicationWillFinishLaunching: method.
if (!AXAPIEnabled()) { // I'm checking that Accessibility is turned on
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert setMessageText:@"Lapsus cannot run."];
[alert addButtonWithTitle:@"Open Accessibility Prefs..."];
[alert addButtonWithTitle:@"Quit"];
[alert setInformativeText:@"Lapsus needs \"Enable access for assistive devices\" in the Accessibility pane of System Preferences to be turned on."];
[NSApp activateIgnoringOtherApps:YES];
int attentionrequest = [NSApp requestUserAttention:NSCriticalRequest];
NSInteger returnValue = [alert runModal];
....
[NSApp cancelUserAttentionRequest:attentionrequest];
}
Я попытался удалить requestUserAttention line.
Я попытался положить requestUserAttention линию в большом количестве разных местах: непосредственно перед вызовом runModal, первая вещь, и т.д.
Я попытался удалить строку activateIgnoringOtherApps.
Независимо от того, что я делаю, значок док-станции отскакивает один раз, а затем останавливается.
Пользователь, вероятно, увидит, что мое приложение, как я приношу его на передний план, но есть вероятность, что если они нажмут в нужное время, их активное приложение скроет критическое сообщение об ошибке.
Так что я хочу что-то, чтобы даже когда их пристань скрыта, они знают, что что-то не так.
Я строю это на Mac OS X 10.5 Leopard. Любые идеи о том, что я делаю неправильно? Или Leopard не поддерживает непрерывное подпрыгивание значков док-станции?
UPDATE:
Я укладывал вызов метода в applicationWillFinishLaunching:
Как только я положил его в applicationDidFinishLaunching :, и удалила activateIgnoringOtherApps: вызов, он работал по мере необходимости.
Однако мой вопрос все еще «Могу ли я взять с собой приложение на фронт, а также прыгающий значок док? С первого ответа, казалось бы, нет, хотя я не уверен, я понимаю, почему.
UPDATE:..
Я не понимаю, почему, потому что я не думал, через Теперь, когда это было сказано мне, что красть фокус означает док получил то, что он хотел, это имеет смысл
Заключение
Если вы хотите обратить внимание пользователей, не используйте [NSApp activateIgnoringOtherApps: YES];
Подумайте об этом: приложение отскакивает от значка, чтобы сообщить пользователю, что хочет по каким-то причинам стать фронтовиком. После того, как он получит самый передний статус, Dock предполагает, что вы получили то, что хотели, и перестали подпрыгивать значок. Также подумайте о том, что вы сделали бы с приложением, которое произвольно принесло бы себя и все его окна на фронт, пока вы были в середине набора текста или рисования или чего-то почти ничего. Если ваши предупреждения не имеют поистине опасного для жизни характера, не будьте рывком и воруйте фокус. –
Конечно. Это имеет смысл, когда я, э ... думаю об этом. Как я этого явно не делал. :) Я не видел, что я делаю как «краду фокуса», но когда вы так выразились, я вижу, что это неприемлемо. activateIgnoringOtherApps: YES будет побежден из моего инструментария с этого момента! Спасибо за ваш комментарий. –