首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac窗口服务器与X11:疯狂的任务

Mac窗口服务器与X11:疯狂的任务
EN

Stack Overflow用户
提问于 2010-06-24 12:53:36
回答 2查看 4.6K关注 0票数 5

所有喜欢低级别窗口服务器(CoreGraphicsPrivate.h等)、Mac上的X11、SIMBL和其他疯狂的东西的人:)

Mac上有一个简单的X11模拟应用程序(如xterm、xeyes等),只有一个窗口。在运行过程中,X11以某种方式创建了一个本机Quartz窗口来表示这个模拟应用程序,并且这个窗口可以通过Quartz window服务访问,这样我就可以获得它的CSWindowID、标题、位置、大小和所有者PID (PID为X11.app)。但是它不支持可访问性API,因此无法控制它(除了来自同一进程的Core Graphichs私有函数)。

现在,我们的任务是:

我需要在这样的窗口上托管一个额外的NSView (或者只是画一些东西)。我指的是一个本机Quartz窗口,它是X11模拟某些应用程序的结果。我知道,要在Mac上操作windows,我必须处于相同的过程中,即X11.app。

我编写了一个SIMBL插件,它侵入了X11应用程序进程。

在那里,我可以调用NSApp窗口,但是一直以来,我都得到了与实际应用程序窗口没有任何共同之处的2 NSWindows。它们甚至在屏幕上都看不见。

然而,当我调用NSWindowList()时,我得到了我需要的任何东西( X11窗口的窗口I),甚至更多的东西(来自其他应用程序的窗口I)。

当我获得X11模拟窗口的CSWindowID时,我调用NSApp windowWithWindowNumber:和HIWindowFromCGWindowID() (碳),但它们都返回零!从同样的过程!

顺便说一句,当我侵入Safari过程和其他过程时,所有这些动作都能完美地工作.

因此,问题是:

  • X11是如何创建这些无法从同一进程访问的窗口的?
  • 如何获得指向X11窗口的指针(NSWindow *、CGContextRef,或至少任何.)并将我的图形(我甚至不谈论NSViews)放在它们上?

提前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-24 18:35:19

所有的X11应用程序源代码和其他东西(X石英)都可以在苹果官方网站上使用(当前版本为2.3.5 (服务器85.2))。windows创建的核心在于xpr子目录

要操作windows,X石英使用Xplugin库(/usr/lib/libXplugin.dylib)。它的头文件/usr/include/Xplugin.h定义了像xp_create_surface()等函数,这些函数使用私有CoreGraphics API创建窗口,比如CGSNewWindowWithOpaqueShape()。无文档的CoreGraphicsPrivate.h或CSGPrivate.h是逆向工程的结果,可以找到通过网络。Xplugin在自己的散列中记住这种Quartz窗口的ids,并为它们返回一个不透明的整数(即xp_resource_id)。然后,X石英将特定的XID与此xp_resource_id关联起来,并将其返回给客户端。

Xplugin是封闭源,没有API返回xp_resource_id或XID可绘制的本机Quartz。

为了使用使用私有CoreGraphics API创建的窗口,您必须使用这些私有API。有一个名为CGWindowContextCreate()的函数,它通过Quartz id返回特定本机窗口的CGContextRef。可以使用此上下文在窗口上进行绘图。但是要接收真正的上下文而不是NULL,您必须处于创建窗口的进程中。

票数 5
EN

Stack Overflow用户

发布于 2010-06-24 14:09:03

据我理解,X11使用自己的windows服务器和通用堆栈。这就是为什么它可以在没有特殊端口的情况下运行X11应用程序。

它只有一个类似Cocoa窗口的响应层,这样它就可以与通用接口进行通信。它不是伪装的可可堆栈,而是表面上伪装成可可的X11堆栈。因此,它只响应Cocoa相关消息的一个子集。

我认为要在X11中做任何严肃的事情,必须从一开始就使用X11 API。换句话说,写起来就像它不打算运行在Mac之上一样。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3110067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档