[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