0

My RCP app running in CentOS 6.7 uses the SWT Browser. It works properly when launching the app from within eclipse, but when I run it as a standalone app, the Browser cannot be instantiated, and a SWT Exception with message "No more handles" is thrown. I prefer to use the browser with style SWT.WEBKIT, but it doesn't work with style SWT.NONE either.

I have the latest versions of packages webkitgtk, webkitgtk-devel, and gtk2 installed. I tried using style SWT.NONE and set env variable MOZILLA_FIVE_HOME to point to the firefox installation directory, the xulrunner executable, and even the google-chrome installation. I also added $MOZILLA_FIVE_HOME to LD_LIBRARY_PATH. If I have anything set for MOZILLA_FIVE_HOME the app segfaults when the Browser is instantiated. If I don't set MOZILLA_FIVE_HOME I get the SWT exception.

The SWT documentation says that if I have webkitgtk installed, eclipse will detect it automatically. But it also says that with eclipse 4.2 and later it works with gtk3 by default. I don't see any gtk3 packages.

I'm using Eclipse SDK 4.4.2 in my target, but my app is an Eclipse 3 app. So perhaps this is an error in the compatibility layer. I can try using an Eclipse 3.x SDK, but I'd rather not do that. The SWT plugin being installed is version 3.102.xxx.

As I said, the app works when launched inside eclipse, so am I perhaps missing a plugin in my built product? I see the swt.gtk plugins installed, but I don't know what else to look for. Also the standalone app works properly in Ubuntu.

MidnightJava
  • 1,927
  • 2
  • 18
  • 38

1 Answers1

0

The following entries in eclipse.ini enable the Browser control to work in CentOS 6.7 with style SWT.NONE

-vmargs
-Dorg.eclipse.swt.browser.DefaultType=mozilla
-Dorg.eclipse.swt.browser.XULRunnerPath=/path/to/xulrunner/

This also requires that a supported version of xulrunner be installed (1.9.2 worked for me), as precisely specified in the SWT FAQ. NB: The following caveat is stated in the FAQ regarding the possible use of firefox as a xulrunner instance:

Also note that a Firefox release whose contained Gecko version correlates with the Mozilla versions above can also be used with Eclipse 3.1 and newer (Linux only), provided that it has been compiled with linkable Gecko libraries. It is important to note that Firefox downloads from mozilla.org do not satisfy this criteria, but Firefox installations that are included in major Linux distributions often do in the absence of a XULRunner installation. Attempting to use a Firefox install without linkable Gecko libraries will throw an error with message "No more handles [NS_InitEmbedding...error -2147221164]".

The firefox installed on my CentOS 6.7 system doesn't seem to have the linked gecko libraries, but I may have manually installed a differerent version at some point.

There appears to be no way to use Eclipse 4.4 or newer with webkit on CentOS 6.7, since gtk3 is required per the FAQ, and the only reference I found to installing gtk3 on CentOS 6.x said that it would be very difficult.

The FAQ is confusing to me on a couple points. It seems to contradict itself, saying that a compliant xulrunner can be used with eclipse 4.4 and then saying that it cannot, because eclipse 4.4 "uses GTK 3 by default" and xulrunner has not been ported to gtk3. My SWT installation appears to be built for gtk3, but it did not prevent me from using xulrunner. Furthermore, saying that gtk3 is used by default seems to imply that it's possible to use some other version of gtk, but hours of searching turned up no information on that.

If anyone knows how to make eclipse 4.4 work with gtk2, I would greatly appreciate it. I'm not happy at all about being forced to use gecko for eclipse 4.4 apps running in CentOS 6.x.

EDIT: It occurs to me that a big unanswered question is why the Browser doesn't throw the exception with style SWT.WEBKIT and no XulRunnerPath property set when I launch the app from within eclipse. I'd really like to understand that.

MidnightJava
  • 1,927
  • 2
  • 18
  • 38
  • The mozilla renderer's performance is an order magnitude off from the webkit renderer and is unworkable for my project. So I really need to figure out why the webkit libraries are available in the runtime workbench but not in the maven-built product. You'd think there's a bundle missing, but I've looked at it over and over and I don't see anything missing. And then there's the fact that the very same app works fine on Ubuntu and CentOS 7.1. Very strange problem behavior. – MidnightJava Aug 31 '15 at 23:59