<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
   <title>Eclipse Project SDK R0.9 - SWT Release Notes</title>
</head>
<body>

<table COLS=1 WIDTH="604" HEIGHT="45" >
<tr>
<td BACKGROUND="workbench.gif"><b>Eclipse Project SDK R0.9 - SWT Release
Notes</b></td>
</tr>
</table>

<h3>
Notices</h3>
(c) Copyright IBM Corp. 2000, 2001, 2002. All Rights Reserved.
<h3>
Table Of Contents</h3>
&nbsp;1. Known Issues
<h3>
99.1 Known Issues</h3>
<h4>
99.1.1 Available Colors on 8-bit Linux</h4>

Typically, in Gnome Linux installs running with 8 bitplain visuals (i.e. 256 color mode), before the 
Eclipse application is started, you already do not have any free colors.  This may mean that Eclipse
is unable to allocate the default widget background color causing it to display a white background. 
The functionality,  however, is not affected.

<h4>
99.1.2 XInitThreads and Linux</h4>

SWT makes use of the XInitThreads system function to allow graphics routines to
be invoked from non-user-interface threads. However, the implementation of XInitThreads
on Linux has several issues, which cause the following SWT problems:

<dl>
<dt><b>Printing Support</b></dt>
<dd>The X printing extension implementation on Linux currently does not work for applications
    which are XInitThreads enabled. This makes it impossible for us to provide printing
    support on Linux. Until this is rectified, <code>Printer.getPrinterList()</code> will
    always return an empty array on the Linux platform.</dd>
<dt><b>Drag and Drop</b></dt>
<dd>On Motif, SWT only supports dragging between windows running on the same system process.
    In particular, dragging a file between Eclipse and another application will cause the
    drop target application to hang. This is a result of a bug in the Motif libraries for
    applications that are running XInitThreads.</dd>
<dt><b>IME Support</b></dt>
<dd>The Japanese IME support provided by Linux is currently incompatible with applications
    which are XInitThreads enabled, and will cause them to hang.</dd>
</dl>

<h4>
99.1.3 Disposing in a Focus Event</h4>

Applications should not dispose widgets in focus changing events.  Doing so  on Motif may cause Eclipse to terminate,
since Motif accesses the disposed widget within their internal focus change event handler.
Similar but less serious issues exist on Windows such that occasionally an SWT exception can be thrown.

<h4>
99.1.4 List and ComboBox on Windows NT</h4>

On Windows NT only, you should avoid creating items in a List or ComboBox with strings longer than 1000 characters.
Doing so may result in a General Protection Fault.  This has been fixed in more recent versions of Windows.

<h4>
99.1.5 BiDi Support</h4>

The StyledText widget now provides bidirectional language support for Hebrew and Arabic locales.
Currently, this support is available only on win32, and has several known problems. It should be
considered to be a preliminary implementation only.

<h4>
99.1.6 Cursor constructor arguments</h4>

In the constructor <code>Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int hotspotY)</code>,
when both a source and mask argument are specified (i.e. mask is not null), the meaning of the two arguments is
reversed. That is, the "mask" argument should be the source image and the "source" argument should be the
mask image. This problem was discovered too late in the development cycle to be fixed for R1.0. The intent is to
fix this in a future release, potentially by introducing a new more general constructor.

<h4>
99.1.7 Use of the "&" character in TabFolder</h4>

The "&" character is not currently supported in TabFolder labels. Doing so on win32, will cause the
character which follows the "&" to be underlined as if it was a mnemonic, even though mnemonics are
not available for TabFolders. On other platforms, the "&" character will be displayed correctly, but
for portability reasons, it should be avoided.

<h4>
99.1.8  ToolBar on Windows</h4>

On Windows, you must create all tool bars with the FLAT style bit set. If you do not do this,
the "hot" (rollover) images of <em>all</em> toolbars may display incorrectly.
This will be fixed in a future release.

<h4>
99.1.9  Non ASCII strings on Linux</h4>

On Linux RedHat 6.2 only, you will not be able to display text that contains non
ASCII characters. This limitation is not present on Linux RedHat 7.1 or higher.

<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" BORDER=0 height=12 width=195></a>
</body>
</html>
