diff options
13 files changed, 63 insertions, 36 deletions
diff --git a/make/scripts/java-run-all.sh b/make/scripts/java-run-all.sh index bc0a61cab..2b3fc21e7 100755 --- a/make/scripts/java-run-all.sh +++ b/make/scripts/java-run-all.sh @@ -61,6 +61,8 @@ rm -f java-run.log # export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri # export LIBGL_DEBUG=verbose +which java 2>&1 | tee -a java-run.log +java -version 2>&1 | tee -a java-run.log echo LIBXCB_ALLOW_SLOPPY_LOCK: $LIBXCB_ALLOW_SLOPPY_LOCK 2>&1 | tee -a java-run.log echo LIBGL_DRIVERS_PATH: $LIBGL_DRIVERS_PATH 2>&1 | tee -a java-run.log echo LIBGL_DEBUG: $LIBGL_DEBUG 2>&1 | tee -a java-run.log diff --git a/make/scripts/tests.sh b/make/scripts/tests.sh index e391698fb..da74603bd 100755 --- a/make/scripts/tests.sh +++ b/make/scripts/tests.sh @@ -30,6 +30,9 @@ spath=`dirname $0` # $spath/java-run-all.sh ../build-x86_64 com.jogamp.test.junit.jogl.awt.TestSwingAWTRobotUsageBeforeJOGLInitBug411 $* # $spath/java-run-all.sh ../build-x86_64 com.jogamp.test.junit.newt.TestFocus01SwingAWTRobot $* -$spath/java-run-all.sh ../build-x86_64 com.jogamp.test.junit.newt.TestFocus02SwingAWTRobot $* +# $spath/java-run-all.sh ../build-x86_64 com.jogamp.test.junit.newt.TestFocus02SwingAWTRobot $* + +# $spath/java-run-all.sh ../build-x86 com.jogamp.test.junit.newt.TestFocus01SwingAWTRobot $* +$spath/java-run-all.sh ../build-x86 com.jogamp.test.junit.newt.TestFocus02SwingAWTRobot $* $spath/count-edt-start.sh java-run.log diff --git a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java index de4ea2a30..d378e8ed0 100644 --- a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java +++ b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java @@ -36,6 +36,7 @@ import java.security.*; import java.awt.Canvas; import java.awt.EventQueue; import java.awt.Graphics; +import java.awt.KeyboardFocusManager; import javax.media.nativewindow.*; @@ -50,7 +51,7 @@ public class NewtCanvasAWT extends java.awt.Canvas { NativeWindow parent = null; Window newtChild = null; - AWTAdapter awtAdapter = null; + AWTParentWindowAdapter awtAdapter = null; /** * Instantiates a NewtCanvas without a NEWT child.<br> @@ -88,6 +89,9 @@ public class NewtCanvasAWT extends java.awt.Canvas { System.err.println("FocusActionImpl.run() "+Display.getThreadName()); } NewtCanvasAWT.this.requestFocusAWTParent(); + // awtAdapter.setForcePermanentFocusLossOneShot(); + KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + kfm.clearGlobalFocusOwner(); } } FocusActionImpl focusActionImpl = new FocusActionImpl(); @@ -123,7 +127,7 @@ public class NewtCanvasAWT extends java.awt.Canvas { awtAdapter=null; } if(attach && null!=newtChild) { - awtAdapter = new AWTParentWindowAdapter(newtChild).addTo(this); + awtAdapter = (AWTParentWindowAdapter) new AWTParentWindowAdapter(newtChild).addTo(this); } } diff --git a/src/newt/classes/com/jogamp/newt/event/NEWTEvent.java b/src/newt/classes/com/jogamp/newt/event/NEWTEvent.java index c85fc5f64..bbe648c42 100644 --- a/src/newt/classes/com/jogamp/newt/event/NEWTEvent.java +++ b/src/newt/classes/com/jogamp/newt/event/NEWTEvent.java @@ -80,7 +80,7 @@ public class NEWTEvent extends java.util.EventObject { } if(DEBUG) { for (int i = 0; i < stack.length && i<5; i++) { - System.out.println(i+": " + stack[i].getClassName()+ "." + stack[i].getMethodName()); + System.err.println(i+": " + stack[i].getClassName()+ "." + stack[i].getMethodName()); } } @@ -101,7 +101,7 @@ public class NEWTEvent extends java.util.EventObject { clazzName.equals(WindowClazzName) || clazzName.equals(AWTNewtEventFactoryClazzName) ) ; if(DEBUG) { - System.out.println("system: "+res); + System.err.println("system: "+res); } return res; } diff --git a/src/newt/classes/com/jogamp/newt/event/TraceKeyAdapter.java b/src/newt/classes/com/jogamp/newt/event/TraceKeyAdapter.java index 999c9bed4..98ba5a24d 100644 --- a/src/newt/classes/com/jogamp/newt/event/TraceKeyAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/TraceKeyAdapter.java @@ -41,15 +41,15 @@ public class TraceKeyAdapter implements KeyListener { } public void keyPressed(KeyEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.keyPressed(e); } } public void keyReleased(KeyEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.keyReleased(e); } } public void keyTyped(KeyEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.keyTyped(e); } } } diff --git a/src/newt/classes/com/jogamp/newt/event/TraceMouseAdapter.java b/src/newt/classes/com/jogamp/newt/event/TraceMouseAdapter.java index 0ec0e6fe4..17d8df80b 100644 --- a/src/newt/classes/com/jogamp/newt/event/TraceMouseAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/TraceMouseAdapter.java @@ -43,35 +43,35 @@ public class TraceMouseAdapter implements MouseListener { } public void mouseClicked(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseClicked(e); } } public void mouseEntered(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseEntered(e); } } public void mouseExited(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseExited(e); } } public void mousePressed(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mousePressed(e); } } public void mouseReleased(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseReleased(e); } } public void mouseMoved(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseMoved(e); } } public void mouseDragged(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseDragged(e); } } public void mouseWheelMoved(MouseEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.mouseWheelMoved(e); } } } diff --git a/src/newt/classes/com/jogamp/newt/event/TraceWindowAdapter.java b/src/newt/classes/com/jogamp/newt/event/TraceWindowAdapter.java index 7a7207e4e..3545a42d4 100644 --- a/src/newt/classes/com/jogamp/newt/event/TraceWindowAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/TraceWindowAdapter.java @@ -43,27 +43,27 @@ public class TraceWindowAdapter implements WindowListener { } public void windowResized(WindowEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.windowResized(e); } } public void windowMoved(WindowEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.windowMoved(e); } } public void windowDestroyNotify(WindowEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.windowDestroyNotify(e); } } public void windowGainedFocus(WindowEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.windowGainedFocus(e); } } public void windowLostFocus(WindowEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.windowLostFocus(e); } } public void windowRepaint(WindowUpdateEvent e) { - System.out.println(e); + System.err.println(e); if(null!=downstream) { downstream.windowRepaint(e); } } } diff --git a/src/newt/classes/com/jogamp/newt/event/awt/AWTParentWindowAdapter.java b/src/newt/classes/com/jogamp/newt/event/awt/AWTParentWindowAdapter.java index 32452d6ee..e86d365bc 100644 --- a/src/newt/classes/com/jogamp/newt/event/awt/AWTParentWindowAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/awt/AWTParentWindowAdapter.java @@ -28,6 +28,8 @@ package com.jogamp.newt.event.awt; +import java.awt.KeyboardFocusManager; + /** * Specialized parent/client adapter, * where the NEWT child window really gets resized, @@ -50,15 +52,29 @@ public class AWTParentWindowAdapter return super.removeFrom(awtComponent); } + boolean forcePermanentFocusLossOneShot = false; + + public void setForcePermanentFocusLossOneShot() { + forcePermanentFocusLossOneShot = true; + } + public void focusGained(java.awt.event.FocusEvent e) { if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: focusGained: START "+ e.getComponent()); + System.err.println("AWT: focusGained: "+ e); } } public void focusLost(java.awt.event.FocusEvent e) { if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: focusLost: "+ e.getComponent()); + System.err.println("AWT: focusLost: "+ e); + } + if(forcePermanentFocusLossOneShot) { + forcePermanentFocusLossOneShot = false; + if(DEBUG_IMPLEMENTATION) { + System.err.println("AWT: focusLost: - clearGlobalFocusOwner -"); + } + KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + kfm.clearGlobalFocusOwner(); } } @@ -67,7 +83,7 @@ public class AWTParentWindowAdapter // the resized event will be send via the native window feedback. final java.awt.Component comp = e.getComponent(); if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: componentResized: "+comp); + System.err.println("AWT: componentResized: "+comp); } newtWindow.runOnEDTIfAvail(false, new Runnable() { public void run() { @@ -99,7 +115,7 @@ public class AWTParentWindowAdapter if( 0 != ( java.awt.event.HierarchyEvent.SHOWING_CHANGED & bits ) ) { final boolean showing = changed.isShowing(); if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: hierarchyChanged SHOWING_CHANGED: showing "+showing+", "+changed); + System.err.println("AWT: hierarchyChanged SHOWING_CHANGED: showing "+showing+", "+changed); } if(newtWindow.isValid()) { newtWindow.runOnEDTIfAvail(false, new Runnable() { @@ -112,7 +128,7 @@ public class AWTParentWindowAdapter if( 0 != ( java.awt.event.HierarchyEvent.DISPLAYABILITY_CHANGED & bits ) ) { final boolean displayability = changed.isDisplayable(); if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: hierarchyChanged DISPLAYABILITY_CHANGED: displayability "+displayability+", "+changed); + System.err.println("AWT: hierarchyChanged DISPLAYABILITY_CHANGED: displayability "+displayability+", "+changed); } } } diff --git a/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java b/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java index dd58ad1c8..85fe5407b 100644 --- a/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java @@ -124,7 +124,7 @@ public class AWTWindowAdapter public void componentShown(java.awt.event.ComponentEvent e) { final java.awt.Component comp = e.getComponent(); if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: componentShown: "+comp); + System.err.println("AWT: componentShown: "+comp); } /** if(null==newtListener) { @@ -141,7 +141,7 @@ public class AWTWindowAdapter public void componentHidden(java.awt.event.ComponentEvent e) { final java.awt.Component comp = e.getComponent(); if(DEBUG_IMPLEMENTATION) { - System.out.println("AWT: componentHidden: "+comp); + System.err.println("AWT: componentHidden: "+comp); } /** if(null==newtListener) { diff --git a/src/newt/classes/com/jogamp/newt/impl/WindowImpl.java b/src/newt/classes/com/jogamp/newt/impl/WindowImpl.java index e26947a36..02541aa73 100644 --- a/src/newt/classes/com/jogamp/newt/impl/WindowImpl.java +++ b/src/newt/classes/com/jogamp/newt/impl/WindowImpl.java @@ -1064,7 +1064,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer * hence focus traversal can be made transparent. */ public void setFocusAction(FocusRunnable focusAction) { - focusAction = focusAction; + this.focusAction = focusAction; } protected boolean focusAction() { if(DEBUG_IMPLEMENTATION) { diff --git a/src/newt/classes/com/jogamp/newt/impl/macosx/MacDisplay.java b/src/newt/classes/com/jogamp/newt/impl/macosx/MacDisplay.java index 42cdb9ca3..dc45f7479 100644 --- a/src/newt/classes/com/jogamp/newt/impl/macosx/MacDisplay.java +++ b/src/newt/classes/com/jogamp/newt/impl/macosx/MacDisplay.java @@ -51,7 +51,9 @@ public class MacDisplay extends DisplayImpl { if(!MacWindow.initIDs0()) { throw new NativeWindowException("Failed to initialize jmethodIDs"); } - if(DEBUG) System.out.println("MacDisplay.init App and IDs OK "+Thread.currentThread().getName()); + if(DEBUG) { + System.err.println("MacDisplay.init App and IDs OK "+Thread.currentThread().getName()); + } } public static void initSingleton() { diff --git a/src/newt/classes/com/jogamp/newt/impl/macosx/MacWindow.java b/src/newt/classes/com/jogamp/newt/impl/macosx/MacWindow.java index 6432f363e..5043be918 100644 --- a/src/newt/classes/com/jogamp/newt/impl/macosx/MacWindow.java +++ b/src/newt/classes/com/jogamp/newt/impl/macosx/MacWindow.java @@ -152,7 +152,7 @@ public class MacWindow extends WindowImpl { protected void closeNativeImpl() { nsViewLock.lock(); try { - if(DEBUG_IMPLEMENTATION) { System.out.println("MacWindow.CloseAction "+Thread.currentThread().getName()); } + if(DEBUG_IMPLEMENTATION) { System.err.println("MacWindow.CloseAction "+Thread.currentThread().getName()); } if (getWindowHandle() != 0) { close0(getWindowHandle()); } @@ -270,7 +270,7 @@ public class MacWindow extends WindowImpl { private void insetsChanged(int left, int top, int right, int bottom) { if (DEBUG_IMPLEMENTATION) { - System.out.println(Thread.currentThread().getName()+ + System.err.println(Thread.currentThread().getName()+ " Insets changed to " + left + ", " + top + ", " + right + ", " + bottom); } if (left != -1 && top != -1 && right != -1 && bottom != -1) { @@ -366,7 +366,7 @@ public class MacWindow extends WindowImpl { public void enqueueKeyEvent(boolean wait, int eventType, int modifiers, int keyCode, char keyChar) { int key = convertKeyChar(keyChar); - if(DEBUG_IMPLEMENTATION) System.out.println("MacWindow.enqueueKeyEvent "+Thread.currentThread().getName()); + if(DEBUG_IMPLEMENTATION) System.err.println("MacWindow.enqueueKeyEvent "+Thread.currentThread().getName()); // Note that we send the key char for the key code on this // platform -- we do not get any useful key codes out of the system super.enqueueKeyEvent(wait, eventType, modifiers, key, keyChar); diff --git a/src/newt/classes/com/jogamp/newt/impl/opengl/broadcom/egl/Window.java b/src/newt/classes/com/jogamp/newt/impl/opengl/broadcom/egl/Window.java index 947e28c27..9f5e7b7c1 100644 --- a/src/newt/classes/com/jogamp/newt/impl/opengl/broadcom/egl/Window.java +++ b/src/newt/classes/com/jogamp/newt/impl/opengl/broadcom/egl/Window.java @@ -111,7 +111,7 @@ public class Window extends com.jogamp.newt.impl.WindowImpl { private long realizeWindow(boolean chromaKey, int width, int height) { if(DEBUG_IMPLEMENTATION) { - System.out.println("BCEGL Window.realizeWindow() with: chroma "+chromaKey+", "+width+"x"+height+", "+config); + System.err.println("BCEGL Window.realizeWindow() with: chroma "+chromaKey+", "+width+"x"+height+", "+config); } long handle = CreateWindow(getDisplayHandle(), chromaKey, width, height); if (0 == handle) { @@ -130,7 +130,7 @@ public class Window extends com.jogamp.newt.impl.WindowImpl { throw new NativeWindowException("Error creating EGLGraphicsConfiguration from id: "+cfgID+", "+this); } if(DEBUG_IMPLEMENTATION) { - System.out.println("BCEGL Window.windowCreated(): "+toHexString(cfgID)+", "+width+"x"+height+", "+config); + System.err.println("BCEGL Window.windowCreated(): "+toHexString(cfgID)+", "+width+"x"+height+", "+config); } } |