Mozilla XEmbed plugin 和 GTK Socket/Plug

今天抽空看了一下 Mozilla XEmbed plugins 应该如何实现,顺便给 Antler 做了个补丁。

XEmbed 的作用是把应用 A 创建的一个窗口交给应用 B 来使用,应用 A 和应用 B 可以是一个进程,也可以是不同的进程。在 GTK2 中,通过 GtkSocket 和 GtkPlug 来对这种机制进行支持。通过这个机制,可以让多个进程同时对一个窗口的显示内容进行操作。

在比较新 (1.0以后) 的 Mozilla 中,Gecko Plugin (也就是我们说的插件)就可以通过这种机制来实现。Gecko 会先通过 NPP_GetValue 来问插件是否支持 XEmbed,如果插件支持,则它会创建一个 GtkSocket,并将其 XID 通过 NPP_SetWindow 的第二个参数的 ->window 域传递过来,在插件中则可以通过这个 XID 直接创建一个 GtkPlug 并使用它了。这比使用传统的 Xt 接口要方便很多。

据说这个机制能够解决插件的一些问题,但在 Antler 中一个比较大的问题是当焦点在 scintilla 中时,它会把所有的键盘事件都吃掉,不管对它有没有用。这应当是 Netscape  Plugins API 的问题。因为在这里,来自 Macromedia 和 IBM 的开发人员指出了这个问题。

1 条评论 »

  1. hotjuly 留言,

    2007年04月20日 星期五 @ 1:16 pm

    打扰了。使用你的chmreader的filefox 插件,这里问一下做一个firefox插件把当前打开的网页保存成chm的可行性大吗?目的是保存资料。

本文的RSS feed · 引用 URI

发表您的评论

提示:如果你刚刚提交过评论,但是还没有被显示出来,请点击这里刷新一下: 刷新评论