<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>879</bug_id>
          
          <creation_ts>2013-10-30 23:09:19 +0100</creation_ts>
          <short_desc>Threads deadlock in native keyboardfocus calls made form multiple threads</short_desc>
          <delta_ts>2013-11-18 20:52:22 +0100</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Newt</product>
          <component>windows</component>
          <version>1</version>
          <rep_platform>pc_x86_64</rep_platform>
          <op_sys>windows</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>892</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Harvey Harrison">harvey.harrison</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          <cc>narf_bro</cc>
          
          <cf_type>---</cf_type>
          <cf_scm_refs>0be87f241c0f0b2f5881d9a602ce12378b8e453d
23697c7921039e9655a5760e21d7029598b679d7
d544c839f6df10f20977c786a446833f3aa7ef13
177d0da1a9a8e031f15efa9e89465f8ed97f25e5</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3223</commentid>
    <comment_count>0</comment_count>
      <attachid>531</attachid>
    <who name="Harvey Harrison">harvey.harrison</who>
    <bug_when>2013-10-30 23:09:19 +0100</bug_when>
    <thetext>Created attachment 531
patch for discussion purposes, likely breaks things

Stack dumps once everthing locks up, the RenderThread stays in the _requestFocus
native method forever at this point.

&quot;RenderThread-Display-.windows_nil-1-EDT-1&quot; daemon prio=6 tid=0x000000000f622000 nid=0xe6c runnable [0x000000001417e000]
   java.lang.Thread.State: RUNNABLE
	at sun.awt.windows.WComponentPeer._requestFocus(Native Method)
	at sun.awt.windows.WComponentPeer.requestFocus(Unknown Source)
	at java.awt.Component.requestFocusHelper(Unknown Source)
	at java.awt.Component.requestFocusHelper(Unknown Source)
	at java.awt.Component.requestFocus(Unknown Source)
	at com.jogamp.newt.awt.NewtCanvasAWT.access$301(NewtCanvasAWT.java:83)
	at com.jogamp.newt.awt.NewtCanvasAWT$FocusAction.run(NewtCanvasAWT.java:179)
	at jogamp.newt.WindowImpl.focusAction(WindowImpl.java:1789)
	at jogamp.newt.WindowImpl.requestFocus(WindowImpl.java:1761)
	at jogamp.newt.WindowImpl.requestFocus(WindowImpl.java:1757)
	at jogamp.newt.driver.windows.DisplayDriver.DispatchMessages0(Native Method)
	at jogamp.newt.driver.windows.DisplayDriver.dispatchMessagesNative(DisplayDriver.java:85)
	at jogamp.newt.DisplayImpl.dispatchMessages(DisplayImpl.java:496)
	at jogamp.newt.DisplayImpl$5.run(DisplayImpl.java:419)
	at jogamp.newt.DefaultEDTUtil$EventDispatchThread.run(DefaultEDTUtil.java:308)

   Locked ownable synchronizers:
	- None


&quot;AWT-EventQueue-0&quot; prio=6 tid=0x0000000009aa1800 nid=0x27e0 runnable [0x000000000daec000]
   java.lang.Thread.State: RUNNABLE
	at sun.awt.KeyboardFocusManagerPeerImpl.getNativeFocusedWindow(Native Method)
	at sun.awt.KeyboardFocusManagerPeerImpl.getCurrentFocusedWindow(Unknown Source)
	at java.awt.KeyboardFocusManager.getNativeFocusedWindow(Unknown Source)
	at java.awt.KeyboardFocusManager.markClearGlobalFocusOwner(Unknown Source)
	- locked &lt;0x000000075a9026a8&gt; (a java.util.LinkedList)
	at java.awt.KeyboardFocusManager._clearGlobalFocusOwner(Unknown Source)
	at java.awt.KeyboardFocusManager.clearGlobalFocusOwner(Unknown Source)
	at jogamp.newt.awt.event.AWTParentWindowAdapter.focusGained(AWTParentWindowAdapter.java:75)
	at java.awt.Component.processFocusEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.SequencedEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

   Locked ownable synchronizers:
	- None

&quot;AWT-Windows&quot; daemon prio=6 tid=0x0000000007b71000 nid=0x1418 waiting for monitor entry [0x0000000009ebe000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at java.awt.KeyboardFocusManager.shouldNativelyFocusHeavyweight(Unknown Source)
	- waiting to lock &lt;0x000000075a9026a8&gt; (a java.util.LinkedList)
	at sun.awt.windows.WToolkit.eventLoop(Native Method)
	at sun.awt.windows.WToolkit.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
	- None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3224</commentid>
    <comment_count>1</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-10-30 23:32:10 +0100</bug_when>
    <thetext>(11:21:11 PM) sgothel: hmm .. the whole focus traversal .. (so you have an overview) .. in NewtCanvasAWT is to extend AWT&apos;s traversal w/ our NEWT child
(11:21:41 PM) sgothel: I would love to see this fixed for sure

(11:22:33 PM) hharrison: If there was a knob we could set without patching to just &apos;ignore keyboardfocus&apos; we could also use that

(11:24:06 PM) sgothel: we don&apos;t need to wait, i.e. the native calls explicitly state wait=false - b/c of this problem
(11:24:20 PM) sgothel: so it is designed to be all deferred ..
(11:25:08 PM) sgothel: the only problem is .. hmm is that the NEWT-EDT command waits for Component.requestFocus(Unknown Source)
(11:25:42 PM) sgothel: after that .. if gives the focus back to NEWT
(11:25:49 PM) sgothel: thats while it&apos;s waiting ..
(11:25:59 PM) hharrison: and injecting events onto two queues feels...maybe like an even worse problem
(11:26:08 PM) sgothel: so if the tail (give focus back to NEWT) would work on AWT-EDT .. maybe
(11:26:19 PM) sgothel: as long it&apos;s all non-waiting
(11:26:24 PM) sgothel: non-blocking
(11:27:13 PM) sgothel: NewtCanvasAWT could inject a runnable to AWT-EDT to perform the AWT requestFocus() + action to call NEWT-EDT to focus NEWT window (non-blocking)
(11:27:21 PM) sgothel: all non-blocking .. streaming
(11:27:36 PM) sgothel: maybe we can try this ..
(11:27:57 PM) sgothel: I look at it .. if it passes our unit tests .. good
(11:28:16 PM) sgothel: and solves these issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3238</commentid>
    <comment_count>2</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-10-31 22:08:54 +0100</bug_when>
    <thetext>Please provide a unit test - or a manual test case reproducing the dealock,
so we can analyze the issue better and confirm the future change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3278</commentid>
    <comment_count>3</comment_count>
    <who name="Jesse">narf_bro</who>
    <bug_when>2013-11-06 15:21:10 +0100</bug_when>
    <thetext>Just wanted to comment that I am getting this as well, same call stack. Easy way to reproduce this is to put canvas.requestFocusInWindow() inside mouseClicked event on a MouseListener and then click away/into the window over and over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3314</commentid>
    <comment_count>4</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-11 21:40:42 +0100</bug_when>
    <thetext>Same remedy (AWT-EDT task streaming) may apply to Bug 893.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3316</commentid>
    <comment_count>5</comment_count>
      <attachid>540</attachid>
    <who name="Harvey Harrison">harvey.harrison</who>
    <bug_when>2013-11-12 21:52:37 +0100</bug_when>
    <thetext>Created attachment 540
Another workaround patch, tested on Java 6 and 7 on windows 7

Again, mostly for discussion purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3332</commentid>
    <comment_count>6</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-17 03:15:17 +0100</bug_when>
    <thetext>Since we manage focus key traversal ourselves w/o requiring the AWT component to have the focus,
it seems that we simply can drop requesting the focus. 

TestParentingFocus03KeyTraversalAWT: Works on X11 and Windows

I have to double check this ..

@@ -190,16 +190,9 @@ public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProto
             if(DEBUG) {
                 System.err.println(&quot;NewtCanvasAWT.FocusAction: &quot;+Display.getThreadName()+&quot;, isOnscreen &quot;+isOnscreen+&quot;, hasFocus &quot;+hasFocus()+&quot;, isParent &quot;+isParent+&quot;, isFS &quot;+isFullscreen);
             }
-            if(isParent &amp;&amp; !isFullscreen) {
-                // Newt-EDT -&gt; AWT-EDT may freeze Window&apos;s native peer requestFocus.
-                if(!hasFocus()) {
-                    // Acquire the AWT focus 1st for proper AWT traversal
-                    NewtCanvasAWT.super.requestFocus();
-                }
-                if(isOnscreen) {
-                    // Remove the AWT focus in favor of the native NEWT focus
-                    KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
-                }
+            if( isParent &amp;&amp; !isFullscreen &amp;&amp; isOnscreen ) {
+                // Remove the AWT focus in favor of the native NEWT focus
+                KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
             }
             return false; // NEWT shall proceed requesting the native focus
         }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3333</commentid>
    <comment_count>7</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-17 03:23:14 +0100</bug_when>
    <thetext>(In reply to comment #6)
&gt; Since we manage focus key traversal ourselves w/o requiring the AWT
&gt; component to have the focus,

Commit cb7118fc875b6722803e4b11d5681671962a8d3a
introduced function to query the next or previous &apos;to be focused&apos; component:
   AWTMisc.getNextFocus(..) .. etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3334</commentid>
    <comment_count>8</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-17 04:56:31 +0100</bug_when>
    <thetext>0be87f241c0f0b2f5881d9a602ce12378b8e453d
    Since we manage focus key traversal ourselves w/o requiring the AWT
    component to have the focus[1],
    we simply can drop requesting the focus for &apos;focus hopping&apos; NEWT -&gt; AWT -&gt; NEWT[2].
    
    Further more, &apos;MenuSelectionManager.defaultManager().clearSelectedPath()&apos;
    must be performed on AWT-EDT w/o blocking. Otherwise it may perform blocking tasks on AWT-EDT.
    
    [1] Commit cb7118fc875b6722803e4b11d5681671962a8d3a
    introduced function to query the next or previous &apos;to be focused&apos; component:
       AWTMisc.getNextFocus(..) .. etc.
    
    [2] Focus hopping is also addressed in Bug 892</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3341</commentid>
    <comment_count>9</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-18 01:41:03 +0100</bug_when>
    <thetext>23697c7921039e9655a5760e21d7029598b679d7
    NewtCanvasAWT.FocusAction must take focus when in offscreen-mode (OSX/CALayer)
    since the NEWT window _is_ offscreen (no input events) and AWT events are translated to NEWT.
    
    Regression of commit 0be87f241c0f0b2f5881d9a602ce12378b8e453d</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3347</commentid>
    <comment_count>10</comment_count>
    <who name="Harvey Harrison">harvey.harrison</who>
    <bug_when>2013-11-18 18:47:55 +0100</bug_when>
    <thetext>Running with commit d8f7418f170aba4703df2b11d5ae11598f71a796 I still see the following deadlock, I wonder, is there any harm in just firing a purpose built runnable into the AWT eventQueue to call the KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner()
bit?




&quot;RenderThread-Display-.windows_nil-1-EDT-1&quot; daemon prio=6 tid=0x0000000008f88000 nid=0x21c4 runnable [0x00000000115ae000]
   java.lang.Thread.State: RUNNABLE
	at sun.awt.KeyboardFocusManagerPeerImpl.getNativeFocusedWindow(Native Method)
	at sun.awt.KeyboardFocusManagerPeerImpl.getCurrentFocusedWindow(KeyboardFocusManagerPeerImpl.java:27)
	at java.awt.KeyboardFocusManager.getNativeFocusedWindow(KeyboardFocusManager.java:567)
	at java.awt.KeyboardFocusManager.markClearGlobalFocusOwner(KeyboardFocusManager.java:2496)
	- locked &lt;0x00000007af1a4768&gt; (a java.util.LinkedList)
	at java.awt.KeyboardFocusManager._clearGlobalFocusOwner(KeyboardFocusManager.java:550)
	at java.awt.KeyboardFocusManager.clearGlobalFocusOwner(KeyboardFocusManager.java:546)
	at com.jogamp.newt.awt.NewtCanvasAWT$FocusAction.run(NewtCanvasAWT.java:215)
	at jogamp.newt.WindowImpl.focusAction(WindowImpl.java:1920)
	at jogamp.newt.WindowImpl.requestFocus(WindowImpl.java:1892)
	at jogamp.newt.WindowImpl.requestFocus(WindowImpl.java:1888)
	at jogamp.newt.driver.windows.DisplayDriver.DispatchMessages0(Native Method)
	at jogamp.newt.driver.windows.DisplayDriver.dispatchMessagesNative(DisplayDriver.java:88)
	at jogamp.newt.DisplayImpl.dispatchMessages(DisplayImpl.java:540)
	at jogamp.newt.DisplayImpl$5.run(DisplayImpl.java:463)
	at jogamp.newt.DefaultEDTUtil$NEDT.run(DefaultEDTUtil.java:326)

   Locked ownable synchronizers:
	- None


&quot;AWT-EventQueue-0&quot; prio=6 tid=0x0000000006da3800 nid=0x27c4 runnable [0x000000000c8bc000]
   java.lang.Thread.State: RUNNABLE
	at sun.awt.windows.WComponentPeer._requestFocus(Native Method)
	at sun.awt.windows.WComponentPeer.requestFocus(WComponentPeer.java:623)
	at java.awt.Component.requestFocusHelper(Component.java:7447)
	at java.awt.Component.requestFocusInWindow(Component.java:7330)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:361)
	at java.awt.Component.dispatchEventImpl(Component.java:4525)
	at java.awt.Container.dispatchEventImpl(Container.java:2097)
	at java.awt.Window.dispatchEventImpl(Window.java:2482)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:621)
	at java.awt.EventQueue$2.run(EventQueue.java:619)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
	at java.awt.SequencedEvent.dispatch(SequencedEvent.java:101)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:621)
	at java.awt.EventQueue$2.run(EventQueue.java:619)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

   Locked ownable synchronizers:
	- None

&quot;AWT-Windows&quot; daemon prio=6 tid=0x0000000006d85000 nid=0x17a4 waiting for monitor entry [0x000000000844e000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at java.awt.KeyboardFocusManager.shouldNativelyFocusHeavyweight(KeyboardFocusManager.java:2304)
	- waiting to lock &lt;0x00000007af1a4768&gt; (a java.util.LinkedList)
	at sun.awt.windows.WToolkit.eventLoop(Native Method)
	at sun.awt.windows.WToolkit.run(WToolkit.java:293)
	at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
	- None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3348</commentid>
    <comment_count>11</comment_count>
    <who name="Harvey Harrison">harvey.harrison</who>
    <bug_when>2013-11-18 19:14:14 +0100</bug_when>
    <thetext>Patch I&apos;ve been hammering on this morning that seems to be holding up:

diff --git a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
index 49bd0d7..56da037 100644
--- a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
+++ b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
@@ -212,8 +212,9 @@ public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProto
             if( isParent &amp;&amp; !isFullscreen ) { // must be parent of newtChild _and_ newtChild not fullscreen
                 if( isOnscreen ) {
                     // Remove the AWT focus in favor of the native NEWT focus
-                    KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
-                } else if( !isOnscreen ) {
+                    AWTEDTExecutor.singleton.invoke(false, new ClearFocusOwner());
+                }
+                else {
                     // In offscreen mode we require the focus!
                     if( !hasFocus() ) {
                         // Newt-EDT -&gt; AWT-EDT may freeze Window&apos;s native peer requestFocus.
@@ -226,8 +227,16 @@ public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProto
     }
     private final FocusAction focusAction = new FocusAction();
 
+    private static class ClearFocusOwner implements Runnable {
+        @Override
+        public void run() {
+            KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
+        }
+    }
+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3349</commentid>
    <comment_count>12</comment_count>
    <who name="Harvey Harrison">harvey.harrison</who>
    <bug_when>2013-11-18 20:12:45 +0100</bug_when>
    <thetext>Commits available at https://github.com/AusencoSimulation/jogl.git

commit d544c839f6df10f20977c786a446833f3aa7ef13
Author: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;
Date:   Mon Nov 18 10:54:35 2013 -0800

    jogl: do the clearGlobalFocusOwner() call on the AWT EDT in NewtCanvasAWT
    
    Otherwise we can deadlock in the native focusrequest calls from the AWT thread,
    see bug 879 for the details.
    
    Signed-off-by: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;

commit 0a9d16f057727652220a5983b65f22f427df6a22
Author: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;
Date:   Mon Nov 18 10:55:30 2013 -0800

    jogl: simplify conditional that repeats test for isOnScreen
    
    if (isOnscreen)
    else if (!isOnScreen)
    
    change to
    
    if (isOnscreen)
    else
    
    Signed-off-by: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;

commit 417675219de9fb5fceca5771812366ae8768b658
Author: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;
Date:   Mon Nov 18 10:54:01 2013 -0800

    jogl: add missing @Override annotation in NewtCanvasAWT
    
    Signed-off-by: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3350</commentid>
    <comment_count>13</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-18 20:52:22 +0100</bug_when>
    <thetext>added Harvey&apos;s git-sha1 values to SCM Refs. field.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>531</attachid>
            <date>2013-10-30 23:09:19 +0100</date>
            <delta_ts>2013-11-12 21:52:37 +0100</delta_ts>
            <desc>patch for discussion purposes, likely breaks things</desc>
            <filename>jogl-focus-diff.txt</filename>
            <type>text/plain</type>
            <size>1712</size>
            <attacher name="Harvey Harrison">harvey.harrison</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9uZXd0L25hdGl2ZS9XaW5kb3dzV2luZG93LmMgYi9zcmMvbmV3dC9u
YXRpdmUvV2luZG93c1dpbmRvdy5jCmluZGV4IDRlZjI0NTkuLmNmNzg5OWQgMTAwNjQ0Ci0tLSBh
L3NyYy9uZXd0L25hdGl2ZS9XaW5kb3dzV2luZG93LmMKKysrIGIvc3JjL25ld3QvbmF0aXZlL1dp
bmRvd3NXaW5kb3cuYwpAQCAtOTAxLDcgKzkwMSw3IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNL
IHduZFByb2MoSFdORCB3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
CiAKICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgogICAgICAgICBEQkdfUFJJTlQoIioqKiBXaW5k
b3dzV2luZG93OiBMQlVUVE9ORE9XTlxuIik7Ci0gICAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRo
b2QoZW52LCB3aW5kb3csIHJlcXVlc3RGb2N1c0lELCBKTklfRkFMU0UpOworICAgICAgICAvLygq
ZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCB3aW5kb3csIHJlcXVlc3RGb2N1c0lELCBKTklfRkFM
U0UpOwogICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwgd2luZG93LCBzZW5kTW91
c2VFdmVudElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqc2hvcnQpIEVWRU5U
X01PVVNFX1BSRVNTRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TW9kaWZp
ZXJzKCAwICksCkBAIC05MjEsNyArOTIxLDcgQEAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgd25k
UHJvYyhIV05EIHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFAKIAog
ICAgIGNhc2UgV01fTUJVVFRPTkRPV046CiAgICAgICAgIERCR19QUklOVCgiKioqIFdpbmRvd3NX
aW5kb3c6IE1CVVRUT05ET1dOXG4iKTsKLSAgICAgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZChl
bnYsIHdpbmRvdywgcmVxdWVzdEZvY3VzSUQsIEpOSV9GQUxTRSk7CisgICAgICAgIC8vKCplbnYp
LT5DYWxsVm9pZE1ldGhvZChlbnYsIHdpbmRvdywgcmVxdWVzdEZvY3VzSUQsIEpOSV9GQUxTRSk7
CiAgICAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCB3aW5kb3csIHNlbmRNb3VzZUV2
ZW50SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzaG9ydCkgRVZFTlRfTU9V
U0VfUFJFU1NFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRNb2RpZmllcnMo
IDAgKSwKQEAgLTk0MSw3ICs5NDEsNyBAQCBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB3bmRQcm9j
KEhXTkQgd25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUAogCiAgICAg
Y2FzZSBXTV9SQlVUVE9ORE9XTjoKICAgICAgICAgREJHX1BSSU5UKCIqKiogV2luZG93c1dpbmRv
dzogUkJVVFRPTkRPV05cbiIpOwotICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwg
d2luZG93LCByZXF1ZXN0Rm9jdXNJRCwgSk5JX0ZBTFNFKTsKKyAgICAgICAgLy8oKmVudiktPkNh
bGxWb2lkTWV0aG9kKGVudiwgd2luZG93LCByZXF1ZXN0Rm9jdXNJRCwgSk5JX0ZBTFNFKTsKICAg
ICAgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZChlbnYsIHdpbmRvdywgc2VuZE1vdXNlRXZlbnRJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoanNob3J0KSBFVkVOVF9NT1VTRV9Q
UkVTU0VELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE1vZGlmaWVycyggMCAp
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>540</attachid>
            <date>2013-11-12 21:52:37 +0100</date>
            <delta_ts>2013-11-12 21:52:37 +0100</delta_ts>
            <desc>Another workaround patch, tested on Java 6 and 7 on windows 7</desc>
            <filename>focus-workaround.patch</filename>
            <type>text/plain</type>
            <size>2027</size>
            <attacher name="Harvey Harrison">harvey.harrison</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9uZXd0L25hdGl2ZS9XaW5kb3dzV2luZG93LmMgYi9zcmMvbmV3dC9u
YXRpdmUvV2luZG93c1dpbmRvdy5jCmluZGV4IGExOWVmYmMuLmMxNjI0NzQgMTAwNjQ0Ci0tLSBh
L3NyYy9uZXd0L25hdGl2ZS9XaW5kb3dzV2luZG93LmMKKysrIGIvc3JjL25ld3QvbmF0aXZlL1dp
bmRvd3NXaW5kb3cuYwpAQCAtOTcyLDcgKzk3Miw3IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNL
IHduZFByb2MoSFdORCB3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
CiAgICAgICAgICAgICAgICAgd3VkLT53aWR0aCwgd3VkLT5oZWlnaHQsIHd1ZC0+bW91c2VJbnNp
ZGUsIHd1ZC0+dG91Y2hEb3duQ291bnQsIHd1ZC0+dG91Y2hEb3duTGFzdFVwKTsKICAgICAgICAg
ICAgIGlmKCAwID09IHd1ZC0+dG91Y2hEb3duTGFzdFVwICYmIDAgPT0gd3VkLT50b3VjaERvd25D
b3VudCApIHsKICAgICAgICAgICAgICAgICB3dWQtPm1vdXNlSW5zaWRlID0gMTsKLSAgICAgICAg
ICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwgd2luZG93LCByZXF1ZXN0Rm9jdXNJ
RCwgSk5JX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBTZXRGb2N1cyh3bmQpOwogICAgICAgICAg
ICAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCB3aW5kb3csIHNlbmRNb3VzZUV2ZW50
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoanNob3J0KSBFVkVO
VF9NT1VTRV9QUkVTU0VELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2V0TW9kaWZpZXJzKCAwICksCkBAIC0xMDA4LDcgKzEwMDgsNyBAQCBzdGF0aWMgTFJFU1VMVCBD
QUxMQkFDSyB3bmRQcm9jKEhXTkQgd25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSBsUAogICAgICAgICAgICAgICAgIHd1ZC0+d2lkdGgsIHd1ZC0+aGVpZ2h0LCB3dWQtPm1v
dXNlSW5zaWRlLCB3dWQtPnRvdWNoRG93bkNvdW50LCB3dWQtPnRvdWNoRG93bkxhc3RVcCk7CiAg
ICAgICAgICAgICBpZiggMCA9PSB3dWQtPnRvdWNoRG93bkNvdW50ICkgewogICAgICAgICAgICAg
ICAgIHd1ZC0+bW91c2VJbnNpZGUgPSAxOwotICAgICAgICAgICAgICAgICgqZW52KS0+Q2FsbFZv
aWRNZXRob2QoZW52LCB3aW5kb3csIHJlcXVlc3RGb2N1c0lELCBKTklfRkFMU0UpOworICAgICAg
ICAgICAgICAgIFNldEZvY3VzKHduZCk7CiAgICAgICAgICAgICAgICAgKCplbnYpLT5DYWxsVm9p
ZE1ldGhvZChlbnYsIHdpbmRvdywgc2VuZE1vdXNlRXZlbnRJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChqc2hvcnQpIEVWRU5UX01PVVNFX1BSRVNTRUQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRNb2RpZmllcnMoIDAgKSwKQEAg
LTEwNDEsNyArMTA0MSw3IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCB3
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQCiAgICAgICAgICAgICAg
ICAgd3VkLT53aWR0aCwgd3VkLT5oZWlnaHQsIHd1ZC0+bW91c2VJbnNpZGUsIHd1ZC0+dG91Y2hE
b3duQ291bnQsIHd1ZC0+dG91Y2hEb3duTGFzdFVwKTsKICAgICAgICAgICAgIGlmKCAwID09IHd1
ZC0+dG91Y2hEb3duQ291bnQgKSB7CiAgICAgICAgICAgICAgICAgd3VkLT5tb3VzZUluc2lkZSA9
IDE7Ci0gICAgICAgICAgICAgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZChlbnYsIHdpbmRvdywg
cmVxdWVzdEZvY3VzSUQsIEpOSV9GQUxTRSk7CisgICAgICAgICAgICAgICAgU2V0Rm9jdXMod25k
KTsKICAgICAgICAgICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVudiwgd2luZG93LCBz
ZW5kTW91c2VFdmVudElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGpzaG9ydCkgRVZFTlRfTU9VU0VfUFJFU1NFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldE1vZGlmaWVycyggMCApLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>