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

Peter Arrenbrecht peter.arrenbrecht at gmail.com
Mon Aug 24 01:07:06 PDT 2009


On Mon, Aug 24, 2009 at 8:53 AM, Anton V. Tarasov<Anton.Tarasov at sun.com> wrote:
> 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.

Anton, thanks. But I notice the bug is only about Shift+Tab causing
the dropped key. It's not about Shift+Tab not generating the
KEY_PRESSED event in the first place. I think that's another, separate
bug. And the one the system said it had entered for me I still cannot
see:

<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>

Can you help with this one, too? Thanks,
-parren

>
> 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