Oh sunny day in Paris, it was becoming a scarce resource lately! And why am I blogging here about a new release of nspluginwrapper instead of getting out? Huh, let's say I needed my mind to get busy differently, looking for other kinds of problems, and feeling capable to fix those at least…
As usual, NSPluginWrapper is an Open Source compatibility plugin for Netscape 4 (NPAPI) plugins. That is, it enables you to use plugins on platforms they were not built for. For example, you can use the Adobe Flash Player 9 plugin on Linux/x86_64, NetBSD and FreeBSD platforms.
Short list of changes in 0.9.91.5, details to follow:
NPP_Destroy()Improved XEMBED support. NSPluginWrapper now has improved support for plugins using the XEMBED protocol. This means theDiamondX XEmbed example plugin is now working even though that was not specifically an XEMBED problem but rather a communication/initialisation one. Most importantly, Flash Player 9 Update 3 (beta 2) is also working better. Note that Konqueror NPAPI emulation layer still doesn't support the XEMBED protocol, so this only works for Mozilla-based browsers.
Fixed focus problems with Flash Player. Debian bug #435912 is about Flash Player grabbing the keys from other windows even if the Flash Player window lost the focus. The way nspluginwrapper handles input focus has now changed, thus also removing some other (rare?) crashes. However, this curently relies much on XEMBED support. And since Konqueror doesn't implement it yet, this bug is still present there.
BTW, I also suspect that Flash Player is not totally innocent to those focus problems. The Flash Player 9 Update 3 (beta 2) “re-introduces” the bug, though it's not nspluginwrapper's fault this time as the problem can be reproduced with a plain 32-bit browser.
Run-time detect broken 64-bit Konqueror versions. Support for Konqueror was added in version 0.9.90.4. However, it required an additional patch to get 64-bit Konqueror on-par with NPAPI defined types. Now, nspluginwrapper will try to detect broken 64-bit versions of Konqueror at run-time and should be able to address both cases from a single binary.
The heuristics for detecting Konqueror are: “it's a Qt application that has either an Xt application name of nspluginviewer or a user-agent string containing Konqueror”. The heuristics for detecting what I (wrongly?) call LONG64 NPAPI structures, i.e. those that were made up of 64-bit uint32 types, are mostly based on what NPP_SetWindow() receives and assumptions of what specific NPWindow fields have to look like. Besides, Konqueror doesn't implement NPN_NewStream() et al., so this also simplifies the wrappers around NPStream in this case. You are welcome to suggest any improvement to those heuristics, but I believe they are reasonable enough.
Support for wrapping 64-bit plugins. Martin Stransky from Red Hat Engineering has added support for 64-bit plugins. This means you can now wrap both i386 and x86_64 plugins into an x86_64 browser. This is so that you can let a crashing plugin die alone without bringing the browser with him into the grave.
BTW, if you are running Linux, you should use the packages provided by your distribution. In particular, Fedora packages have further improvements to fit both their build and run-time policies. Additional changes (e.g. plugins viewer restart) will be merged in a future release.