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 и минимизации видео, чего я не хочу.
Ответы
Ответ 1
Я не считаю возможным использование обычных API-интерфейсов для изменения курсора, когда ваше приложение неактивно. Я уверен, что оконная система этого не позволяет: itd будет нарушением границ между приложениями - если вы попытаетесь установить курсор из фона, а приложение foreground также попытается установить курсор, который выиграет?
Конечно, система может это сделать (например, когда вы делаете скриншот с ⌘⇧4), потому что это в самой оконной системе.