Hi, I pushed my hacked together PoC to https://github.com/javafxports/openjdk-jfx/pull/145.
Tom On 01.08.18 22:00, Tom Schindl wrote: > I logged https://bugs.openjdk.java.net/browse/JDK-8208649 > > Tom > > On 31.07.18 22:14, Tom Schindl wrote: >> Hi, >> >> I could not resist giving my idea a try and passing the native-pointer >> from SWT completely through JavaFX and using it as a parent on Windows >> created by FX. >> >> Although my C/Objective-C knowledge is next to useless it works and now >> Popup-Windows (eg created by a DropDown are a Native-Child of their >> SWT-NSWindow which means they move if you move the window, they don't >> hide behind their parent, ...) - they just work as they do in a native >> JavaFX application! >> >> I'll create an issue and we can move the discussion there. >> >> Tom >> >> On 31.07.18 15:16, Tom Schindl wrote: >>> hi, >>> >>> yes and I can confirm that the date-picker issue is not that dramatic on >>> Windows. If I modify my test case just a bit by opening my own stage >>> with a parent-stage the z-order at least can also get messed up on windows. >>> >>> package test; >>> >>> import javax.swing.JFrame; >>> >>> import javafx.application.Platform; >>> import javafx.embed.swing.JFXPanel; >>> import javafx.geometry.Pos; >>> import javafx.scene.Scene; >>> import javafx.scene.control.Button; >>> import javafx.scene.control.ColorPicker; >>> import javafx.scene.layout.BorderPane; >>> import javafx.stage.Stage; >>> >>> public class TestSwingInterop extends JFrame { >>> >>> public TestSwingInterop() { >>> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >>> final JFXPanel fxPanel = new JFXPanel(); >>> add(fxPanel); >>> >>> Platform.runLater(new Runnable() { >>> @Override >>> public void run() { >>> initFX(fxPanel); >>> } >>> }); >>> } >>> >>> static void initFX(JFXPanel fxPanel) { >>> // This method is invoked on JavaFX thread >>> Scene scene = createScene(); >>> fxPanel.setScene(scene); >>> } >>> >>> static Scene createScene() { >>> ColorPicker picker = new ColorPicker(); >>> BorderPane.setAlignment(picker, Pos.TOP_LEFT); >>> BorderPane p = new BorderPane(picker); >>> Button button = new Button("Extra Stage"); >>> button.setOnAction( evt -> { >>> Stage s = new Stage(); >>> s.setScene(new Scene(new BorderPane(new Button("Hello >>> World")), 300, 300)); >>> s.initOwner(button.getScene().getWindow()); >>> s.show(); >>> }); >>> p.setBottom(button); >>> >>> return new Scene(p); >>> } >>> >>> public static void main(String[] args) { >>> TestSwingInterop s = new TestSwingInterop(); >>> s.setBounds(100, 100, 1000, 800); >>> s.setVisible(true); >>> } >>> } >>> >>> package test; >>> >>> import javafx.application.Application; >>> import javafx.stage.Stage; >>> >>> public class TestPlainFX extends Application { >>> >>> @Override >>> public void start(Stage primaryStage) throws Exception { >>> primaryStage.setScene(TestSwingInterop.createScene()); >>> primaryStage.show(); >>> } >>> >>> public static void main(String[] args) { >>> launch(args); >>> } >>> } >>> >>> If you run an click the "Extra - Stage" Button you'll notice that the >>> main Swing window can get infront of it child (this is a similar problem >>> than the Picker). The same does not work if you are in pure FX. >>> >>> Tom >>> Am 2018-07-31 14:57, schrieb Kevin Rushforth: >>>> OK, I can reproduce it on Mac using JDK 11-ea and the latest jfx-dev. >>>> Can you file a bug? >>>> >>>> -- Kevin >>>> >>>> >>>> On 7/31/2018 5:51 AM, Tom Schindl wrote: >>>>> Hi, >>>>> >>>>> I'm on Mac as well and just gave 8u181 a spin and see the same problem >>>>> (beside others eg the DropDown popup does not move with window). >>>>> >>>>> Just to make sure: It is curcial to not only bring up the DropDown-List >>>>> but also open the Dialog-Window with the color-spectrum, ... . >>>>> >>>>> Tom >>>>> >>>>> On 31.07.18 14:34, Michael Paus wrote: >>>>>> I did the test on a Mac. >>>>>> >>>>>> MacOS High Sierra >>>>>> OpenJDK12ea4 >>>>>> OpenJFX11ea20 (SDK) >>>>>> >>>>>> I just ran the code and repeated the steps given by Tom. >>>>>> * Bring up the DropDown-List >>>>>> * Bring up the custom color dialog >>>>>> * Click somewhere in the JFrame >>>>>> >>>>>> Michael >>>>>> >>>>>> Am 31.07.18 um 14:19 schrieb Kevin Rushforth: >>>>>>> I ran the test program on Windows 7 using JDK-11+24 plus my local >>>>>>> build of openjfx 11, and I can't reproduce the problem. I suspect that >>>>>>> Prasanta is correct in that this was fixed for FX/Swing interop by >>>>>>> JDK-8185634 (on the FX side) and JDK-8187803 (on the AWT side). I >>>>>>> don't know why you and Tom are still seeing this bug. What platform >>>>>>> are you testing on? >>>>>>> >>>>>>> Note that this won't help SWT interop, though. A similar fix might be >>>>>>> needed there (once we understand why the Swing interop test program >>>>>>> isn't working for some of you). >>>>>>> >>>>>>> -- Kevin >>>>>>> >>>>>>> On 7/31/2018 4:45 AM, Michael Paus wrote: >>>>>>>> Hi Tom >>>>>>>> I gave it a try with the latest OpenJDK12ea and OpenJFX11ea and I >>>>>>>> still >>>>>>>> see the same baviour which you described. >>>>>>>> Michael >>>>>>>> >>>>>>>> Am 31.07.18 um 13:08 schrieb Tom Schindl: >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I give it a try but from the bug description and discussion I would >>>>>>>>> have >>>>>>>>> assumed it deals with the opposite problems (Opening a Swing-Dialog >>>>>>>>> from >>>>>>>>> an JavaFX-Application who uses Swing-Node). >>>>>>>>> >>>>>>>>> I also studied the code to see if how you make a JavaFX-Stage >>>>>>>>> having a >>>>>>>>> different owner but I could only find changes to AWT deal with this. >>>>>>>>> >>>>>>>>> Anyways I'll try to get it the latest master running. The issue >>>>>>>>> states >>>>>>>>> that it is fixed in 8u182 but only 8u181 is available and there >>>>>>>>> are no >>>>>>>>> EA-Builds of Java8 available anymore (Looks like Oracle does not >>>>>>>>> want >>>>>>>>> people to test fixes for upcoming 8-update anymore) >>>>>>>>> >>>>>>>>> Tom >>>>>>>>> >>>>>>>>> On 31.07.18 11:21, Prasanta Sadhukhan wrote: >>>>>>>>>> Hi Tom, >>>>>>>>>> >>>>>>>>>> I am not able to see the problem in latest workspace. I believe >>>>>>>>>> this >>>>>>>>>> issue is already fixed by JDK-8185634. >>>>>>>>>> >>>>>>>>>> Regards >>>>>>>>>> Prasanta >>>>>>>>>> On 7/31/2018 1:16 PM, Tom Schindl wrote: >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> In one of our customers application we have major problems when >>>>>>>>>>> embedding JavaFX into SWT (but from my tests the situation is >>>>>>>>>>> equal for >>>>>>>>>>> Swing). >>>>>>>>>>> >>>>>>>>>>> In the end all windows (most commonly popup-windows) are affected >>>>>>>>>>> because they don't have a parent-window assigned and so they >>>>>>>>>>> can be >>>>>>>>>>> hidden by the window embedding them - if the window opened is >>>>>>>>>>> Modal like >>>>>>>>>>> eg the one from ColorPicker the JavaFX UI is also blocked. >>>>>>>>>>> >>>>>>>>>>> To see what I mean just use this snippet below and do the >>>>>>>>>>> following: >>>>>>>>>>> * Bring up the DropDown-List >>>>>>>>>>> * Bring up the custom color dialog >>>>>>>>>>> * Click somewhere in the JFrame >>>>>>>>>>> >>>>>>>>>>> You notice the following: >>>>>>>>>>> * JavaFX Window is moved behind Swing-Window >>>>>>>>>>> * JavaFX UI is blocked >>>>>>>>>>> >>>>>>>>>>>> package test; >>>>>>>>>>>> >>>>>>>>>>>> import javax.swing.JFrame; >>>>>>>>>>>> >>>>>>>>>>>> import javafx.application.Platform; >>>>>>>>>>>> import javafx.embed.swing.JFXPanel; >>>>>>>>>>>> import javafx.geometry.Pos; >>>>>>>>>>>> import javafx.scene.Scene; >>>>>>>>>>>> import javafx.scene.control.ColorPicker; >>>>>>>>>>>> import javafx.scene.layout.BorderPane; >>>>>>>>>>>> >>>>>>>>>>>> public class TestSwingInterop extends JFrame { >>>>>>>>>>>> public TestSwingInterop() { >>>>>>>>>>>> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >>>>>>>>>>>> final JFXPanel fxPanel = new JFXPanel(); >>>>>>>>>>>> add(fxPanel); >>>>>>>>>>>> Platform.runLater(new Runnable() { >>>>>>>>>>>> @Override >>>>>>>>>>>> public void run() { >>>>>>>>>>>> initFX(fxPanel); >>>>>>>>>>>> } >>>>>>>>>>>> }); >>>>>>>>>>>> } >>>>>>>>>>>> private static void initFX(JFXPanel fxPanel) { >>>>>>>>>>>> // This method is invoked on JavaFX thread >>>>>>>>>>>> Scene scene = createScene(); >>>>>>>>>>>> fxPanel.setScene(scene); >>>>>>>>>>>> } >>>>>>>>>>>> private static Scene createScene() { >>>>>>>>>>>> ColorPicker picker = new ColorPicker(); >>>>>>>>>>>> BorderPane.setAlignment(picker, Pos.TOP_LEFT); >>>>>>>>>>>> BorderPane p = new BorderPane(picker); >>>>>>>>>>>> return new Scene(p); >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> public static void main(String[] args) { >>>>>>>>>>>> TestSwingInterop s = new TestSwingInterop(); >>>>>>>>>>>> s.setBounds(100, 100, 1000, 800); >>>>>>>>>>>> s.setVisible(true); >>>>>>>>>>>> } >>>>>>>>>>>> } >>>>>>>>>>> I've tested this on Java8 and Java9 but didn't had a chance to run >>>>>>>>>>> it on >>>>>>>>>>> the latest master. >>>>>>>>>>> >>>>>>>>>>> The problem is that the newly created JavaFX windows don't have >>>>>>>>>>> the >>>>>>>>>>> Native-Window as their parent but the EmbeddedStage (who is not >>>>>>>>>>> bound to >>>>>>>>>>> a native-window handle). It looks like EmbeddedStage has >>>>>>>>>>> already been >>>>>>>>>>> prepared (see getRawHandle() : long) to support something like >>>>>>>>>>> that in >>>>>>>>>>> future but com.sun.glass.ui.Window and its subclasses have >>>>>>>>>>> never been >>>>>>>>>>> extend to create a window based on a pure long-pointer. >>>>>>>>>>> >>>>>>>>>>> The only exception and the reason I guess the strategy would >>>>>>>>>>> work was >>>>>>>>>>> used for Applets. >>>>>>>>>>> >>>>>>>>>>> Before diving deeper into this I wanted to get a feedback from >>>>>>>>>>> people >>>>>>>>>>> who know things better: Does the strategy of passing along the >>>>>>>>>>> window >>>>>>>>>>> pointer (eg from SWT, don't know about Swing yet) to Glass and >>>>>>>>>>> using it >>>>>>>>>>> as the parent pointer sound like a proper idea? >>>>>>>>>>> >>>>>>>>>>> Tom >>>>>>>>>>> >> > -- Tom Schindl, CTO BestSolution.at EDV Systemhaus GmbH Eduard-Bodem-Gasse 5-7. A-6020 Innsbruck Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck
