[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    RFR: 8201538: Remove implementation support for applets from JavaFX
From:       Kevin Rushforth <kcr () openjdk ! java ! net>
Date:       2021-08-31 16:34:51
Message-ID: 5Fxtt0GR8oAqedsdK2MPeebV4mv9C9x_wUvxi9x7iQM=.4b35e2c4-2971-4880-be6f-7a751474befb () github ! com
[Download RAW message or body]

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic