<AWT Dev> Fwd: Your Report (Review ID: 1570033) - Shift+Tab no longer generates a KEY_TYPED event; used to with JRE 1.5

Anton V. Tarasov Anton.Tarasov at Sun.COM
Sun Aug 23 23:53:45 PDT 2009


Hi Peter,

Here's the CR:

http://bugs.sun.com/view_bug.do?bug_id=6866784

There was something wrong with the machinery, they fixed it.

Thanks,
Anton.


Peter Arrenbrecht wrote:
> On Thu, Jul 30, 2009 at 1:40 PM, Anton V. Tarasov<Anton.Tarasov at sun.com> wrote:
>> Peter,
>>
>> I've filed a bug - 6866784. It will be available at bugs.sun.com in a couple
>> of days.
>>
>> Thanks,
>> Anton.
> 
> Anton, I still cannot find this bug. And neither can I find the bug
> that seems to have been entered by the system on my behalf. To cite:
> 
> <cite>
> We have determined that this report is a new bug and entered the bug
> into our internal bug tracking system under Bug Id: 6871299.
> 
> You can monitor this bug on the Java Bug Database at
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6871299.
> </cite>
> 
> Any ideas?
> -parren
> 
>> Anton V. Tarasov wrote:
>>> Hi Peter,
>>>
>>> Peter Arrenbrecht wrote:
>>>> Folks,
>>>>
>>>> I filed a bug about a missing KEY_TYPED event for Shift+Tab for JRE
>>>> 1.6 and up a while ago. Now I've found an additional case where it
>>>> manifests itself. If you have two text fields on a frame, the second
>>>> of which is setFocusTraversalKeysEnabled(false), then typing Shift+Tab
>>>> in the first field and then any letter will swallow that letter. This
>>>> is because the DefaultKeyboardFocusManager sets the
>>>> consumeNextKeyTyped flag on the Shift+Tab, which then suppresses the
>>>> next KEY_TYPED. Since the KEY_TYPED for Shift+Tab is missing, it
>>>> swallows the next normal key.
>>>>
>>> Indeed, this is a bug.
>>>
>>> You could file it via https://bugs.openjdk.java.net, or I may file it
>>> by myself via our internal bug tracker. What is the best for you?
>>>
>>>> While investigating this, I also wondered about the fix for bug
>>>> 6637607, which is mentioned in
>>>> DefaultKeyboardFocusManager.processKeyEvent(). It looks very
>>>> asymmetrical, the else only being present on the FORWARD case, but not
>>>> on the subsequent, basically copy-pasted blocks. Shouldn't one always
>>>> reset consumeNextKeyTyped right at the start of the if-block? Like so:
>>>>
>>>>       if (focusedComponent.getFocusTraversalKeysEnabled() &&
>>>>            !e.isConsumed())
>>>>        {
>>>>            consumeNextKeyTyped = false;
>>>>
>>>> or maybe like so:
>>>>
>>>>       if (focusedComponent.getFocusTraversalKeysEnabled() &&
>>>>            !e.isConsumed())
>>>>        {
>>>>            if (e.getID() == KeyEvent.KEY_PRESSED) consumeNextKeyTyped =
>>>> false;
>>>>
>>>> Thoughts?
>>>> -parren
>>>>
>>> You're right, the fix was not good enough.
>>> I think that consumeNextKeyTyped should be reset even higher, out of that
>>> block:
>>>
>>>        if (e.getID() == KeyEvent.KEY_PRESSED)
>>>            consumeNextKeyTyped = false;
>>>
>>>        if (focusedComponent.getFocusTraversalKeysEnabled() &&
>>>             !e.isConsumed())
>>>        {
>>>
>>> It would fix the problem you've described above.
>>>
>>> Thanks,
>>> Anton.
>>>
>>>
>>>
>>>> ---------- Forwarded message ----------
>>>> From: IncidentDaemon at sun.com <IncidentDaemon at sun.com>
>>>> Date: Thu, Jul 23, 2009 at 5:33 PM
>>>> Subject: Your Report (Review ID: 1570033) - Shift+Tab no longer
>>>> generates a KEY_TYPED event; used to with JRE 1.5
>>>> To: peter.arrenbrecht at gmail.com
>>>>
>>>>
>>>> ************************************************
>>>> Dear Java Developer,
>>>>
>>>> Thank you for your interest in improving the quality of Java Technology.
>>>>
>>>> Your report has been assigned an internal review ID of 1570033, which
>>>> is NOT visible on the Sun Developer Network (SDN).
>>>>
>>>> Please be aware that the large volume of reports we receive sometimes
>>>> prevents us from responding individually to each message.
>>>>
>>>> If the information is determined to be a new Bug or RFE, or a
>>>> duplicate of a known Bug or RFE, you will receive a followup email
>>>> containing a seven digit bug number.  You may search for, view, or
>>>> vote for this bug in the Bug Database at http://bugs.sun.com/.
>>>>
>>>> If you just reported an issue that could have a major impact on your
>>>> project and require a timely response, please consider purchasing one
>>>> of the support offerings described at
>>>> http://developers.sun.com/services/.
>>>>
>>>> The Sun Developer Network (http://developers.sun.com) is a free
>>>> service that Sun offers. To join, visit
>>>> http://developers.sun.com/global/join_sdn.html.
>>>>
>>>> For a limited time, SDN members can obtain fully licensed Java IDEs
>>>> for web and enterprise development.  More information is at
>>>> http://developers.sun.com/prodtech/javatools/free/.
>>>>
>>>> Thank you for using our bug submit page.
>>>>
>>>> Regards,
>>>> Java Developer Bug Report Review Team
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------
>>>>
>>>>
>>>> Date Created: Thu Jul 23 09:33:33 MDT 2009
>>>> Type:        bug
>>>> Customer Name:   Peter Arrenbrecht
>>>> Customer Email:  peter.arrenbrecht at gmail.com
>>>> SDN ID:
>>>> status:      Waiting
>>>> Category:    java
>>>> Subcategory: classes_awt
>>>> Company:     codewise.ch
>>>> release:     6u10
>>>> hardware:    x64
>>>> OSversion:   ubuntu
>>>> priority:    4
>>>> Synopsis:    Shift+Tab no longer generates a KEY_TYPED event; used to
>>>> with JRE 1.5
>>>> Description:
>>>>  FULL PRODUCT VERSION :
>>>> java version "1.6.0_14"
>>>> Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
>>>> Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
>>>>
>>>>
>>>> ADDITIONAL OS VERSION INFORMATION :
>>>> Linux sapient 2.6.28-13-generic #45-Ubuntu SMP Tue Jun 30 22:12:12 UTC
>>>> 2009 x86_64 GNU/Linux
>>>>
>>>>
>>>> A DESCRIPTION OF THE PROBLEM :
>>>> If I type Shift+Tab under JRE 1.5, I get a KEY_TYPED event. I do not
>>>> get it with JRE 1.6 and OpenJDK 7.
>>>> The KEY_TYPED event is only missing for Shift+Tab. Ctrl+Tab is OK, and
>>>> Shift+Enter is OK as well.
>>>>
>>>> STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
>>>> Run the app provided below. Then press Shift+Tab and watch stdout.
>>>>
>>>> EXPECTED VERSUS ACTUAL BEHAVIOR :
>>>> EXPECTED -
>>>> This is what JRE 1.5 emits when pressing Shift+Tab:
>>>>
>>>> PRESSED: code=16, char=65535, mods=1, action=false
>>>> PRESSED: code=9, char=9, mods=1, action=false
>>>> TYPED: code=0, char=9, mods=1, action=false
>>>> RELEASED: code=9, char=9, mods=1, action=false
>>>> RELEASED: code=16, char=65535, mods=0, action=false
>>>>
>>>> ACTUAL -
>>>> Under JRE 1.6 and a preview of OpenJDK 7, I get only:
>>>>
>>>> PRESSED: code=16, char=65535, mods=1, action=false
>>>> PRESSED: code=9, char=65535, mods=1, action=false
>>>> RELEASED: code=9, char=65535, mods=1, action=false
>>>> RELEASED: code=16, char=65535, mods=0, action=false
>>>>
>>>> The TYPED event is missing.
>>>>
>>>> REPRODUCIBILITY :
>>>> This bug can be reproduced always.
>>>>
>>>> ---------- BEGIN SOURCE ----------
>>>> import java.awt.AWTEvent;
>>>> import java.awt.EventQueue;
>>>> import java.awt.Toolkit;
>>>> import java.awt.event.KeyEvent;
>>>>
>>>> import javax.swing.JFrame;
>>>> import javax.swing.JPanel;
>>>> import javax.swing.JTextField;
>>>>
>>>> public class KeyEvents
>>>> {
>>>>
>>>>       public static void main( String[] args )
>>>>       {
>>>>               EventQueue queue = new EventQueue()
>>>>               {
>>>>                       @Override
>>>>                       protected void dispatchEvent( AWTEvent _event )
>>>>                       {
>>>>                               if (_event instanceof KeyEvent)
>>>>                                       log( (KeyEvent) _event );
>>>>                               super.dispatchEvent( _event );
>>>>                       }
>>>>               };
>>>>               Toolkit.getDefaultToolkit().getSystemEventQueue().push(
>>>> queue );
>>>>
>>>>               JFrame frame = new JFrame( "KeyEvents" );
>>>>               JPanel panel = new JPanel();
>>>>               frame.add( panel );
>>>>               panel.add( new JTextField( 20 ) );
>>>>               panel.add( new JTextField( 20 ) );
>>>>               frame.pack();
>>>>               frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
>>>>               frame.setVisible( true );
>>>>       }
>>>>
>>>>       protected static void log( KeyEvent _e )
>>>>       {
>>>>               System.out.println( idText( _e.getID() ) + ": code=" +
>>>> _e.getKeyCode() + ", char=" + (int) _e.getKeyChar()
>>>>                               + ", mods=" + _e.getModifiers() + ",
>>>> action=" + _e.isActionKey() );
>>>>       }
>>>>
>>>>       private static String idText( int _id )
>>>>       {
>>>>               switch (_id) {
>>>>                       case KeyEvent.KEY_PRESSED:
>>>>                               return "PRESSED";
>>>>                       case KeyEvent.KEY_TYPED:
>>>>                               return "TYPED";
>>>>                       case KeyEvent.KEY_RELEASED:
>>>>                               return "RELEASED";
>>>>                       default:
>>>>                               return Integer.toString( _id );
>>>>               }
>>>>       }
>>>>
>>>> }
>>>>
>>>> ---------- END SOURCE ----------
>>>> workaround:
>>>> comments:    (company - codewise.ch , email -
>>>> peter.arrenbrecht at gmail.com)



More information about the awt-dev mailing list