From d509a3d435e8357a6148617d7792f164dbd0b529 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 22 Jan 2023 03:27:51 +0100 Subject: AWTRobot.getClickTimeout(): NEWT Case: Return maximum(AWT, NEWT), otherwise we see click-count 2 on MacOS 12 --- .../event/TestParentingFocus02SwingAWTRobot.java | 19 +++++----- .../opengl/test/junit/util/AWTRobotUtil.java | 42 ++++++++++++++++------ 2 files changed, 43 insertions(+), 18 deletions(-) (limited to 'src/test/com') diff --git a/src/test/com/jogamp/opengl/test/junit/newt/event/TestParentingFocus02SwingAWTRobot.java b/src/test/com/jogamp/opengl/test/junit/newt/event/TestParentingFocus02SwingAWTRobot.java index 03e5176c5..5d9f4dc17 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/event/TestParentingFocus02SwingAWTRobot.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/event/TestParentingFocus02SwingAWTRobot.java @@ -193,13 +193,13 @@ public class TestParentingFocus02SwingAWTRobot extends UITestCase { // Button Outer Focus Thread.sleep(100); // allow event sync - System.err.println("FOCUS AWT Button Outer request"); + System.err.println("FOCUS AWT Button Outer request.1"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, buttonNorthOuter, buttonNorthOuter, buttonNorthOuterFA, null); // OSX sporadically buttonNorthOuter did not gain - major UI failure Assert.assertEquals(false, glWindow1FA.focusGained()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); Assert.assertEquals(false, buttonNorthInnerFA.focusGained()); - System.err.println("FOCUS AWT Button Outer sync"); + System.err.println("FOCUS AWT Button Outer sync.1"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, buttonNorthOuter, buttonNorthOuterKA); // OSX sporadically won't receive the keyboard input - major UI failure AWTRobotUtil.assertMouseClick(robot, java.awt.event.InputEvent.BUTTON1_MASK, 1, buttonNorthOuter, buttonNorthOuterMA); @@ -208,7 +208,7 @@ public class TestParentingFocus02SwingAWTRobot extends UITestCase { // NEWT Focus Thread.sleep(100); // allow event sync - System.err.println("FOCUS NEWT Canvas/GLWindow request"); + System.err.println("FOCUS NEWT Canvas/GLWindow request.2"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, newtCanvasAWT, newtCanvasAWT.getNEWTChild(), glWindow1FA, buttonNorthOuterFA); // Manually tested on Java7/[Linux,Windows] (where this assertion failed), @@ -219,13 +219,16 @@ public class TestParentingFocus02SwingAWTRobot extends UITestCase { System.err.println("Info: Focus prev. gained, but NewtCanvasAWT didn't loose it. Gainer: "+glWindow1FA+"; Looser "+newtCanvasAWTFA); } Assert.assertEquals(false, buttonNorthInnerFA.focusGained()); - System.err.println("FOCUS NEWT Canvas/GLWindow sync"); + System.err.println("FOCUS NEWT Canvas/GLWindow sync.2"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, glWindow1, glWindow1KA); Assert.assertEquals("AWT parent canvas received non consumed keyboard events", newtCanvasAWTKA.getConsumedCount(), newtCanvasAWTKA.getCount()); + System.err.println("FOCUS NEWT Canvas/GLWindow sync.2.2"); AWTRobotUtil.assertMouseClick(robot, java.awt.event.InputEvent.BUTTON1_MASK, 1, glWindow1, glWindow1MA); + System.err.println("FOCUS NEWT Canvas/GLWindow sync.2.3"); AWTRobotUtil.assertMouseClick(robot, java.awt.event.InputEvent.BUTTON1_MASK, 2, glWindow1, glWindow1MA); + System.err.println("FOCUS NEWT Canvas/GLWindow sync.2.4"); if( !newtCanvasAWT.isAWTEventPassThrough() ) { Assert.assertEquals("AWT parent canvas received consumed keyboard events", 0, newtCanvasAWTKA.getConsumedCount()); Assert.assertEquals("AWT parent canvas received mouse events", 0, newtCanvasAWTMA.getCount()); @@ -233,13 +236,13 @@ public class TestParentingFocus02SwingAWTRobot extends UITestCase { // Button Inner Focus Thread.sleep(100); // allow event sync - System.err.println("FOCUS AWT Button request"); + System.err.println("FOCUS AWT Button request.3"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, buttonNorthInner, buttonNorthInner, buttonNorthInnerFA, glWindow1FA); Assert.assertEquals(false, glWindow1FA.focusGained()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); Assert.assertEquals(false, buttonNorthOuterFA.focusGained()); - System.err.println("FOCUS AWT Button sync"); + System.err.println("FOCUS AWT Button sync.3"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, buttonNorthInner, buttonNorthInnerKA); AWTRobotUtil.assertMouseClick(robot, java.awt.event.InputEvent.BUTTON1_MASK, 1, buttonNorthInner, buttonNorthInnerMA); @@ -248,7 +251,7 @@ public class TestParentingFocus02SwingAWTRobot extends UITestCase { // NEWT Focus Thread.sleep(100); // allow event sync - System.err.println("FOCUS NEWT Canvas/GLWindow request"); + System.err.println("FOCUS NEWT Canvas/GLWindow request.4"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, newtCanvasAWT, newtCanvasAWT.getNEWTChild(), glWindow1FA, buttonNorthInnerFA); // Manually tested on Java7/[Linux,Windows] (where this assertion failed), @@ -260,7 +263,7 @@ public class TestParentingFocus02SwingAWTRobot extends UITestCase { } Assert.assertEquals(false, buttonNorthOuterFA.focusGained()); - System.err.println("FOCUS NEWT Canvas/GLWindow sync"); + System.err.println("FOCUS NEWT Canvas/GLWindow sync.4"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, glWindow1, glWindow1KA); Assert.assertEquals("AWT parent canvas received non consumed keyboard events", newtCanvasAWTKA.getConsumedCount(), newtCanvasAWTKA.getCount()); AWTRobotUtil.assertMouseClick(robot, java.awt.event.InputEvent.BUTTON1_MASK, 1, diff --git a/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java b/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java index cbc969589..9e3521323 100644 --- a/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java +++ b/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java @@ -86,7 +86,11 @@ public class AWTRobotUtil extends TestUtil { return awtEDTAliveFlag; } } - private static Runnable aliveRun = new Runnable() { public void run() { awtEDTAliveFlag = true; } }; + private static Runnable aliveRun = new Runnable() { + @Override + public void run() { + awtEDTAliveFlag = true; + } }; private static Object awtEDTAliveSync = new Object(); private static volatile boolean awtEDTAliveFlag = false; @@ -109,6 +113,7 @@ public class AWTRobotUtil extends TestUtil { robot.setAutoWaitForIdle(true); } javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { System.err.println("******** clearAWTFocus.0"); java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); @@ -209,6 +214,7 @@ public class AWTRobotUtil extends TestUtil { do { final int _wait = wait; javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { if(0==_wait) { window.setVisible(true); @@ -262,19 +268,24 @@ public class AWTRobotUtil extends TestUtil { awtRobotMouseMove(robot, p0[0], p0[1] ); } + private static int getAWTClickTimeout() { + if(null == AWT_CLICK_TO) { + AWT_CLICK_TO = + (Integer) java.awt.Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"); + if(null == AWT_CLICK_TO) { + AWT_CLICK_TO = new Integer(500); + } + } + return AWT_CLICK_TO.intValue(); + } // FIXME: AWTRobotUtil Cleanup: Use specific type for argument object public static int getClickTimeout(final Object obj) { if(obj instanceof com.jogamp.newt.Window) { - return com.jogamp.newt.event.MouseEvent.getClickTimeout(); + final int newt_to = com.jogamp.newt.event.MouseEvent.getClickTimeout(); + final int awt_to = getAWTClickTimeout(); + return Math.max(awt_to, newt_to); } else if(NativeWindowFactory.isAWTAvailable() && obj instanceof java.awt.Component) { - if(null == AWT_CLICK_TO) { - AWT_CLICK_TO = - (Integer) java.awt.Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"); - if(null == AWT_CLICK_TO) { - AWT_CLICK_TO = new Integer(500); - } - } - return AWT_CLICK_TO.intValue(); + return getAWTClickTimeout(); } else { throw new RuntimeException("Neither AWT nor NEWT: "+obj); } @@ -327,6 +338,7 @@ public class AWTRobotUtil extends TestUtil { private static void requestFocusAWT(final java.awt.Component comp, final boolean onTitleBarIfWindow) throws AWTException, InterruptedException, InvocationTargetException { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { comp.requestFocus(); System.err.println("requestFocus: AWT Component"); @@ -748,6 +760,7 @@ public class AWTRobotUtil extends TestUtil { final java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit(); final java.awt.EventQueue evtQ = tk.getSystemEventQueue(); AWTEDTExecutor.singleton.invoke(true, new Runnable() { + @Override public void run() { evtQ.postEvent(new java.awt.event.WindowEvent(win, java.awt.event.WindowEvent.WINDOW_CLOSING)); } }); @@ -757,6 +770,7 @@ public class AWTRobotUtil extends TestUtil { public static TestUtil.WindowClosingListener addClosingListener(final java.awt.Window win) { final AWTWindowClosingAdapter acl = new AWTWindowClosingAdapter(); AWTEDTExecutor.singleton.invoke(true, new Runnable() { + @Override public void run() { win.addWindowListener(acl); } } ); @@ -768,30 +782,38 @@ public class AWTRobotUtil extends TestUtil { AtomicInteger closing = new AtomicInteger(0); AtomicInteger closed = new AtomicInteger(0); + @Override public void reset() { closing.set(0); closed.set(0); } + @Override public int getWindowClosingCount() { return closing.get(); } + @Override public int getWindowClosedCount() { return closed.get(); } + @Override public boolean isWindowClosing() { return 0 < closing.get(); } + @Override public boolean isWindowClosed() { return 0 < closed.get(); } + @Override public void windowClosing(final java.awt.event.WindowEvent e) { closing.incrementAndGet(); System.err.println("AWTWindowClosingAdapter.windowClosing: "+this); } + @Override public void windowClosed(final java.awt.event.WindowEvent e) { closed.incrementAndGet(); System.err.println("AWTWindowClosingAdapter.windowClosed: "+this); } + @Override public String toString() { return "AWTWindowClosingAdapter[closing "+closing+", closed "+closed+"]"; } -- cgit v1.2.3