Подтвердить что ты не робот

NSPanel в "Non-Activating" -Mode не всегда показывает правильные курсоры

Я создал простую Cocoa -Application в XCode 4.6 с NSPanel вместо стандартного NSWindow. Когда я включаю Non-Activating вариант и запустить приложение, все работает нормально:

Панель отображается перед всем остальным и когда курсор мыши наводится на края панели, что изменяется от нормального стрелка-курсор к соответствующему курсору изменения размера, поэтому пользователь знает, что он может изменять размер панели.

Это работает отлично, так как я не нажимаю на другое приложение как например Safari или Finder.

С момента, когда я когда-то уделяю внимание другому приложению, Я могу нажимать и навешивать на панель столько, сколько захочу, стиль курсора больше не изменится - он всегда остается стрелкой, и невозможно вернуться к нормальному поведению.

Панель остается доступной и спереди, вы все равно можете перемещать и изменять ее размер, но курсор мыши остается стрелкой все время. Тогда вы даже не можете его изменить вручную используя что-то вроде: [[NSCursor crosshairCursor] set].

Поэтому мне нужно найти способ создания NSPanel, который сохраняет нормальный автоматическое изменение-cursorstyle-когда-зависания поверх панель-ребра-поведение даже если вы уделяете внимание другому приложению.

Я уже пытался использовать настроенный NSPanel -класс, где я перезаписал canBecomeKeyWindow и canBecomeMainWindow, чтобы они вернули ДА но даже когда я делаю свою панель KeyWindow и MainWindow...

[myPanel makeKeyAndOrderFront:self];
[myPanel makeMainWindow];

... он не решает проблему с курсором.

Было бы здорово, если бы кто-нибудь мог мне помочь здесь:)

PS: базовый SDK и цель развертывания установлены в моем проекте <10 >


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

Все работает нормально, пока приложение, которое владеет панелью, активно, но если вы нажмете на другое приложение, мое приложение отключится и не активируется снова - даже если вы нажмете на панель - потому что "non-activating" -option включен.

Проблема в том, что мне нужен параметр "non activating", потому что я создаю приложение для захвата экрана, которое должно отображаться и работать перед всем остальным, но без деактивации любого запущенного приложения. Я мог бы решить проблему с курсором на

[NSApp activateIgnoringOtherApps];

но затем снятие скриншота полноэкранного видео, работающего в Safari, приведет к деактивации Safari и минимизации видео, чего я не хочу.

4b9b3361

Ответ 1

Я не считаю возможным использование обычных API-интерфейсов для изменения курсора, когда ваше приложение неактивно. Я уверен, что оконная система этого не позволяет: itd будет нарушением границ между приложениями - если вы попытаетесь установить курсор из фона, а приложение foreground также попытается установить курсор, который выиграет?

Конечно, система может это сделать (например, когда вы делаете скриншот с ⌘⇧4), потому что это в самой оконной системе.