Как я могу разместить простынь (скользящее модальное диалоговое окно) в окне другого процесса с помощью инфраструктуры Apple OS X Cocoa?
Редактировать: Немного уточнил:
Мое приложение - это расширение Finder для управления версиями Subversion (http://scplugin.tigris.org/). Часть моего приложения - это надстройка (элемент контекстного меню для Finder); однако основная часть моего приложения находится в отдельном процессе демона. По нескольким причинам мы решили поместить практически весь код в демон; плагин определяет только само меню, а Apple-Events переходит к демону.
Иногда демону требуется запросить у пользователя дополнительную информацию. Для этого он может выкинуть окно на экран, но это мешает работе (случайное расположение), и мне кажется, что рабочий процесс здесь законно модальный, например «выберите файл, выберите« зафиксировать »из меню, предоставьте комментарии к фиксации , сделай операцию ".
Взаимодействие между процессами (например, передача какой-либо ссылки) допустимо: оба процесса принадлежат мне, но я хочу избежать привязки кода листа к основному процессу.





На самом деле, похоже, что вы пытаетесь наладить взаимодействие между процессами на уровне представления, что на самом деле не так, как обычно работает Cocoa. Все будет намного проще, если вы разделите слои немного больше.
Почему вы не хотите поместить код листа в другой процесс? Это код просмотра, а код просмотра по своей сути зависит от процесса. Правильнее всего здесь будет, вероятно, добавить в код вашего плагина некоторую общую поддержку модальных листов и вызов IPC, который ваш демон может сделать для вызова этого кода. Попытка передать объекты просмотра удаленному процессу будет кошмаром, если вы вообще сможете заставить его работать.
С таким подходом вы боретесь с фреймворками.
Пожалуйста, не делай этого. Сделайте взаимодействие немодальным, если это вообще возможно. Особенно в чем-то вроде фиксации гораздо приятнее иметь возможность просматривать свои файлы, пока вы пишете комментарии к фиксации.
В OS X есть группы окон, но я не думаю, что они могут (легко) охватывать приложения.
Вы не можете добавить лист в окно в другом процессе, потому что у вас есть только самый ограниченный доступ к окнам в другом процессе.
Еще одна вещь, которую следует учитывать, заключается в том, что в OS X можно открыть много окон Finder в одной папке (в отличие от OS 9). Даже если у вас сделал есть достаточные привилегии / API для добавления листа в окно Finder, не похоже, что модальность этого окна помешает пользователю продолжить работу с файлами.
(Мое личное мнение, как давнего пользователя Mac, таково, что такое взаимодействие приведет меня прямо к стене.)
К вашему сведению: пункты контекстного меню для Finder - это DOA в Snow Leopard. Вы должны их переписать как услуги. См. <developer.apple.com/mac/library/documentation/Cocoa/Concept ual /…>