В Catalina `orderFront:` заставляет приложение становиться активным приложением; как мне это предотвратить? - PullRequest
0 голосов
/ 11 января 2020

У меня есть фоновое приложение для мониторинга, которое запускается либо как аксессуар, либо как обычное приложение (выбор пользователя зависит от того, хотят ли они видеть его в доке).

В приложении несколько ключевая утилита windows (NSPanel s), отображающая ход выполнения фоновых задач. Когда запускается фоновая задача, окно становится видимым, используя orderFront:.

. Это прекрасно работает годами; окно просто появится где-то за активным приложением.

Начиная с Catalina (macOS 10.15), однако, orderFront: заставляет мое приложение мониторинга становиться активным, крадя фокус у приложения пользователя.

Это плохо, и я хотел бы предотвратить это, но я не могу понять, как.

1 Ответ

0 голосов
/ 17 января 2020

Проблема не в -orderFront:.

Оказывается, что в Catalina, если вы измените политику активации приложения на NSApplicationActivationPolicyRegular, как в какой-то момент в ближайшем будущем (т.е. не сразу), приложение станет активным приложением, как если бы оно было запущено.

Меня бросила последовательность событий: политика активации изменилась, окно было создано и сделано спереди, а затем приложение стало самым передним приложением.

К сожалению, поскольку невозможно отказаться от того, чтобы стать самым передним приложением, мой единственный обходной путь - захват текущего активного приложения при изменении политики активации, ожидание активации, затем запросить исходное приложение снова стать активным. Ужасно, но в моем приложении это должно происходить только несколько раз в день; мы надеемся, что пользователь не смотрит на экран, когда он это делает.

...