OS/2 port of Eclipse is based on the code of Windows port because of similarity of their APIs. But of course, they are not identical, so there is a number of differences in the behavior of OS/2 and Windows implementations that is not covered by the Eclipse/SWT public API (which is completely identical) and can lead to various side effects. These differences are mentioned here.
| # | Windows | OS/2 | Remarks | 
|---|---|---|---|
| 001 | In Windows, if a top level (frame) window is created with the
        CW_USEDEFAULT constant as its size and position, it
        doesn't receive the WM_SIZE message until it is shown for
        the first time or explicitly resized/moved, while
        GetWindowRect() (i.e. Shell.getBounds())
        already reports these default size and position, but not zeros. This
        has one side effect: the Shell widget receives
        SWT.Resize/Move events not right after creation but only
        after the first open(), setVisible() or
        setBounds() call. In turn, this allows to implicitly do
        the Shell layout upon the first open()
        without an explicit call to layout() since the layout is
        done automatically during WM_SIZE message handling. | 
        Although we can acquire nearly the same behavior in OS/2 by
        specifying the FS_SHELLPOSITION flag during the frame
        creation, the actual size/position of the window remains zero until it
        is shown for the first time. This leads, for example, to the
        impossibility to center the Shell widget before a call to
        its open() method, which (as we think) breaks the SWT
        API. So, we set the default Shell size/position (as told
        us by the system through WinQueryTaskSizePos() call)
        explicitly after widget creation and use FS_SHELLPOSITION
        only to distinguish that the widget is being shown for the first time
        and we need to do the "implicit" layout to emulate Windows behavior.
        This has the side effect such as the Shell widget
        receives SWT.Resize/Move events right after its creation,
        not after the first open as in Windows. We don't see any reason to
        emulate this thing too because it is logically more correct and either
        behavior is not explicitly specified by the SWT API. | 
        |
| 002 | GC.drawRoundRectangle() and
        GC.fillRoundRectangle() for some reason (a bug?) draw
        rectangles 1 pixel narrower both in horizontal and vertical than their
        nonrounded versions with the same width and height
        arguments.Also rectangles with the negative width or height are drawn not with the same width and height as when these arguments are positive.  | 
        Rounded and nonrounded rectangles are drawn with the same width
        and height provided they are passed the same width and height
        arguments. Rectangles of negative width/height are drawn with the same size as with positive ones.  | 
        See also here. | 
| 003 - eliminated | GC.drawFocus() draws the focus rectangle following
        the rules of fillRectangle()-- width and height arguments
        specify rectangle's width and height but not the position of right and
        bottom borders as in drawRectangle(), although the
        javadoc says that the latter is used to draw the focus on platforms
        that do not support such a notion (so we get different width and
        height on that platforms) | 
        GC.drawFocus() follows the same rules as
        drawRectangle(). | 
        |
| 004 | Iconify / deiconify... different order of appearance of these events... | ||
| 005 | When drawing on a palette-based image using GC its
        getForeground() and getBackground() methods
        do not always return actual RGB color values from the image's palette
        that are used to assign colors to new pixels drawn by GC
        methods. Instead, they return exactly the same RGB values as they were
        passed before to setForeground()/setBackground() methods.
        The difference between these values takes place when an RGB value for
        a color specified in the set... method is absent in the
        image's palette -- in this case Windows automatically selects the
        closest match (which can differ seriously) as the color, but the RGB
        value stored in the GC internal data (the device context
        data) is the original one (not matched) and it will be used to return
        a color when the get... method is called. | 
        Under OS/2 also the closest match is selected from the image's
        palette and used for drawing pixels when drawing on a palette-based
        image. But the color returned by GC.getForeground() and
        getBackground() methods always contains the actual
        (matched) RGB value used for drawing. | 
        Example. Suppose that we have an image that doesn't have a pure
        red (255, 0, 0) in its palette. We create a red Color on
        a direct-color Display, a GC on this image,
        then call GC.setForeground (red_color) and
        GC.drawOval(). The circle is drawn not in red but in the
        color closest to red in the image's palette, as expected. In Windows,
        a subsequent call to GC.getForeground() will always
        return a color with the (255,0,0) RGB value while in OS/2 the RGB
        value will be the closest match chosen from the image's palette and
        used for drawing. See also the SWT006_01 testcase. | 
      
| 006 | Image.setBackground() doesn't work for direct color
        images. | 
        Image.setBackground() changes the transparent pixel
        on direct color images as well as on palette-based. | 
        |
| 007 | When the system is in 256-color mode, we can still get the image data in its original color depth and palette after the image has been loaded/created. This is true for direct color images also (this probably false for icons only, where we get data converted to 8-bit, regardless of the original). | When the system is in 256-color mode, all bitmaps are converted
        and internally stored in 8-bit depth using the current palette,
        regardless of their original depth and/or palette. This means it's
        impossible to get back the same image data from the system as we
        provided creating the bitmap (for example, when calling
        Image.getImageData()) -- we always get data in the
        converted form. | 
        This is the unchangeable behavior of OS/2 (we don't know any acceptable solution for this). Taking into account that the usage of 256-color mode is rare in our days we decided to leave things as they are for the present. | 
| 008 | Potential problem with icons... (OS/2 supports only 32/16 px and 40/20 px icons...) | ||
| 009 | When the window is not visible setting its maximized state to true
        will not actually resize the window to the maximum size (because
        windows cannot be maximized when invisible). This leads to the number
        of hidden problems such as the Shell's children having
        zero size after adding them to a newly created Shell,
        setting its layout and maximizing it but before calling the
        Shell.open() method. | 
        When the window is not visible setting its maximized state to true will resize it as if it would be visible. This does not lead to any problems except that we have to keep in mint the compatibility with SWT for other platforms. | |
| 010 | When the SWT.RADIO button is selected and all other
        radio buttons in the group are automatically deselected, these
        deselected buttons receive the SWT.Selection event
        before the selected button. | 
        Deselected radio buttons receive the SWT.Selection
        event after the selected one receives it. | 
        This seems not to essential. | 
[Haven't been started yet -- SWT part must be finished first]