Изменить на другое пространство (MacOSX) программно - PullRequest
9 голосов
/ 06 июня 2011

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

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

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

Ответы [ 2 ]

4 голосов
/ 07 июня 2011

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

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

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

1 голос
/ 27 июля 2011

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

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

Есть ли способ заставить настраиваемое NSWindow работать с пробелами

...