On Tue, 31 Aug 2021 16:28:53 GMT, Kevin Rushforth <[email protected]> wrote:
> 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.
modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java
line 157:
> 155: if (isPrimaryStage && (null != appletWindow)) {
> 156: platformWindow =
> app.createWindow(appletWindow.getGlassWindow().getNativeWindow());
> 157: } else {
The diffs in this method below this point are mostly caused by indentation. I
recommend reviewers select the "Hide whitespace changes" option.
-------------
PR: https://git.openjdk.java.net/jfx/pull/615