Предназначено для всех, кто любит низкоуровневый Windows Server (CoreGraphicsPrivate.h и т. Д.), X11 на Mac, SIMBL и другие сумасшедшие вещи:)
На Mac есть простое эмулированное приложение X11 (например, xtermхы и тд) с одним окном.Во время работы X11 каким-то образом создает собственное окно Quartz для представления этого эмулированного приложения, и это окно доступно через Quartz Window Services, так что я могу получить его CSWindowID, заголовок, положение, размер и PID владельца (PID X11.app).Но он не поддерживает Accessibility API, поэтому нет никакого способа управлять им (кроме, может быть, частных функций Core Graphichs из того же процесса).
Теперь вот задача:
Мне нужно разместить дополнительный NSView (или просто нарисовать что-то) на таком окне.Я имею в виду родное окно Quartz, которое появилось в результате эмуляции приложения X11.Я знаю, что для управления окнами на Mac я должен быть в том же процессе, то есть X11.app.
Я написал плагин SIMBL, который внедряется в процесс X11.app.
Там я могу позвонить [NSApp windows], но все время получаю ровно 2 NSWindows, которые не имеют ничего общего с окнами реальных приложений.Они даже не видны на экране.
Тем не менее, когда я вызываю NSWindowList (), я получаю все, что мне нужно (идентификаторы окон для окон X11) и даже больше (идентификаторы окон из других приложений).
Когда у меня есть CSWindowID для окон, эмулируемых X11, я вызываю [NSApp windowWithWindowNumber:] (Какао) и HIWindowFromCGWindowID () (Carbon), но они оба возвращают ноль!Из того же самого процесса!
Кстати, все эти действия прекрасно работают, когда я вторгаюсь в процесс Safari и другие ...
Итак, вопросы:
Как X11 создал такие окна, которые недоступны из того же процесса?
Как получить указатели на окна X11 (NSWindow *, CGContextRef или, по крайней мере, что-нибудь ...) и разместить мою графику (я даже не говорю о NSViews) на них?
Большое спасибо заранее!