RFR: 8201538: Remove implementation support for applets from JavaFX

Kevin Rushforth kcr at openjdk.java.net
Tue Aug 31 16:34:51 UTC 2021


This PR removes the obsolete applet implementation from JavaFX. It is an ongoing maintenance burden to carry around this legacy code. Also, cleaning this up could help in the implementation of GTK4, Wayland, and Metal, since we won't have to account for the way applet windows are created and managed.

## Notes to reviewers:

The first part of the removal was to eliminate the methods and classes on the Java side that are associated with creating and managing an applet window, and which are no longer called. After these were removed, I then removed the corresponding methods and classes on the native side that are no longer called.

### Shared Code

The following were removed from the shared code.

#### Removed Java classes


com.sun.javafx.tk.AppletWindow
com.sun.javafx.tk.quantum.GlassAppletWindow


#### Removed methods

The following methods were removed in the parent class and all subclasses.


com.sun.glass.ui.Application:
    public abstract Window createWindow(long parent)

com.sun.glass.ui.Window:
    public boolean getAppletMode()
    public void setAppletMode(boolean appletMode)
    public void dispatchNpapiEvent(Map eventInfo)
    protected abstract long _createChildWindow(long parent)
    protected Window(long parent)
    protected abstract int _getEmbeddedX(long ptr)
    protected abstract int _getEmbeddedY(long ptr)

com.sun.javafx.tk.Toolkit:
    public abstract AppletWindow createAppletWindow(...)
    public abstract void closeAppletWindow()

com.sun.javafx.tk.quantum.WindowStage:
    static void setAppletWindow(GlassAppletWindow aw)
    static GlassAppletWindow getAppletWindow()



### Linux (Gtk) Java code

The following classes or methods were removed:


com.sun.glass.ui.gtk.GtkChildWindow (class removed)

com.sun.glass.ui.gtk.GtkWindow:
    protected GtkWindow(long parent)


### Linux (Gtk) native glass:

The following native classes were removed:


WindowContextChild
WindowContextPlug


### macOS Java code

The following classes or methods were removed:


com.sun.glass.events.mac.NpapiEvent (class removed)

com.sun.glass.ui.mac.MacApplication:
    native protected String _getRemoteLayerServerName()

com.sun.glass.ui.View:
    public int getNativeRemoteLayerId(String serverName)

com.sun.glass.ui.mac.MacView:
    native protected int _getNativeRemoteLayerId(long ptr, String serverName)
    native protected void _hostRemoteLayerId(long ptr, int nativeLayerId)

com.sun.glass.ui.mac.MacWindow:
    protected MacWindow(long parent)


### macOS native code

The following native classes were removed:


GlassEmbeddedWindow*
GlassNSEvent
GlassView3D+Remote
RemoteLayerSupport


I also removed the `jIsChild` parameter from the window creation code which allowed for removing a lot of dead blocks of code. The main window creation method was:


- (id)_initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle
        screen:(NSScreen *)screen jwindow:(jobject)jwindow jIsChild:(jboolean)jIsChild


This created a `GlassEmbeddedWindow` iff `jIsChild == JNI_TRUE`. Since `jIsChild` was only set to true by the (now removed) `_createChildWindow(long)` method, we can remove the parameter, the `GlassEmbeddedWindow*` classes, and all code blocks that are qualified by `if (jIsChild)`.

### Windows Java code 

The following classes or methods were removed:


com.sun.glass.ui.win.WinChildWindow (class removed)

com.sun.glass.ui.win.WinWindow:
    protected WinWindow(long parent)


### Windows native code

After removing all references to `IsChild()`, which was only ever true for `_createChildWindow()`, we can also remove the following:


GlassApplication::InstallMouseLLHook
GlassApplication::UninstallMouseLLHook


### iOS Java code


com.sun.glass.ui.ios.IosWindow:
    protected IosWindow(long parent)


### iOS native code

With the removal of the `_createChildWindow` method, the following JNI method in `IosWindow` can be removed:


Java_com_sun_glass_ui_ios_IosWindow__1createChildWindow(JNIEnv *, jobject, jlong)


As a note, I don't have a setup to build this. It is a simple, safe change, but should be double-checked by someone from Gluon.

-------------

Commit messages:
 - 8201538: Remove implementation support for applets from JavaFX

Changes: https://git.openjdk.java.net/jfx/pull/615/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=615&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8201538
  Stats: 3424 lines in 64 files changed: 32 ins; 3308 del; 84 mod
  Patch: https://git.openjdk.java.net/jfx/pull/615.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/615/head:pull/615

PR: https://git.openjdk.java.net/jfx/pull/615


More information about the openjfx-dev mailing list