Переход в другое пространство (MacOSX) программно

Я создаю настраиваемое окно (NSWindow с NSBorderlessWindowMask). До сих пор я мог обрабатывать перетаскивание, изменение размера, cmd + щелчок и даже миниатюризацию с двойным щелчком, если это разрешено (см. здесь), поэтому мое окно как можно больше напоминает обычный NSWindow.

Однако, когда я перетаскиваю свое окно в угол экрана, пользователь будет ожидать, что оно переместит это окно в следующее пространство. (В случае, если в "SystemPreferences" включены "пробелы" > "Экспозиция и пробелы" > "Пробелы" > "Включить пробелы" )

Интересно, как я могу перейти на другое пространство программно и переместить мое окно там?

Ответ 1

Наконец, я нашел решение. Я не могу перейти к определенному пространству программно, но я могу заставить мое окно вести себя как другое non NSBorderlessWindowMask, если выполнено [window setMovableByWindowBackground:YES]. Это была конечная цель этого вопроса:)

Решение написано (с некоторыми деталями) здесь, потому что этот вопрос кажется старше (или, может быть, дубликат этого вопроса?)

Есть ли способ сделать обычную работу NSWindow с пространством.

Ответ 2

К сожалению, нет общедоступного API, который бы позволял вам это делать, но если вы хотите использовать Частный API, это возможно. Взгляните на CGSPrivate.h, и вы увидите, что вы можете сделать такой звонок:

CGSConnection connection = _CGSDefaultConnection();
CGSMoveWorkspaceWindowList(connection, &windowNumber, 1, newSpaceNumber);   

Обратите внимание, что использование этого частного API приведет к отклонению вашего приложения в Apple Mac App Store.