Anton, when we switch to Applet Viewer and press the 'alt' key
AltProcessor.postProcessKeyEvent executes the following lines(173-175):
root = SwingUtilities.getRootPane(ev.getComponent());
winAncestor = (root == null ? null :
SwingUtilities.getWindowAncestor(root));
SwingUtilities.getRootPane(ev.getComponent()); returns null for Applet
Viewer.
So when AltProcessor tries to process 'alt' release event the following
code throws NPE:
ev.getWhen() <= ((SunToolkit)
tk).getWindowDeactivationTime(winAncestor); (~145 line)
If new check goes first, the check with NPE will not be executed, but
it's no explicit way to fix this.
May be better to add explicit check at the beginning of
AltProcessor.altPressed method:
if (winAncestor == null ) {
return; // nothing to do here because we have no window.
} ?
On 10/30/2012 3:35 PM, Anton V. Tarasov wrote:
Mikhail,
If SunToolkit.getContainingWindow just forces AppContext
initialization (?), than I'd prefer to fix it in some direct way,
or if that is impossible or hard to do, make appropriate comments.
Thanks,
Anton.
On 30.10.2012 15:28, Mikhail Cherkasov wrote:
Leonid, you're right, reversing fix NPE.
Please find new patch and webrev in attachments.
On 10/29/2012 11:40 PM, Leonid Romanov wrote:
Hi,
I've found that reversing the check order in WindowsRootPaneUI.java
like
this
skip = SunToolkit.getContainingWindow(originalSource) != winAncestor
|| ev.getWhen() <= ((SunToolkit)
tk).getWindowDeactivationTime(winAncestor);
also fixes the alt-tab exception regression. Could you check please
that
this change indeed fixes the exception bug and if it does,
incorporate it
into your patch.
-----Original Message-----
From: [email protected] [mailto:awt-dev-
[email protected]] On Behalf Of Mikhail Cherkasov
Sent: Monday, October 29, 2012 8:18 PM
To: Anton V. Tarasov; [email protected]
Subject: Re: <AWT Dev> [8] [PATCH] Review request for 8001633:
Wrong alt
processing during switching between windows.
Please review the second version:
http://cr.openjdk.java.net/~alexp/8001633/webrev.01/
<http://cr.openjdk.java.net/%7Ealexp/8001633/webrev.01/>
All remarks was corrected.
On 10/29/2012 4:32 PM, Anton V. Tarasov wrote:
Hi Mikhail,
* KeyEvent.java
- No need to initialize 'originalSource' in constructors which
call to
this(...) where you already initialized it.
-950 * we need to able to obtain original source.
"be" is omitted ("we need to be able")
* WindowsRootPaneUI.java
I think there's no need to put another 'skip' setting into a separate
if-block (skip will be equal 'false' in majority of cases).
Why don't you write it simply as follows?
Component originalSource =
AWTAccessor.getKeyEventAccessor().getOriginalSource(ev);
skip = (ev.getWhen()<=
((SunToolkit)tk).getWindowDeactivationTime(winAncestor)) ||
SwingUtilities.getWindowAncestor(originalSource) !=
winAncestor);
Thanks,
Anton.
On 29.10.2012 14:23, Mikhail Cherkasov wrote:
Hi all,
Could you please review a fix for 8001633
<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8001633>:
Wrong
alt processing during switching between windows.
Bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8001633
<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8001633>
Webrev:
http://cr.openjdk.java.net/~bagiras/8/7082294.1/
To prevent wrong focus traversing to menu was added additional check
to AltProcessor.
It checks that original source of 'alt' event belongs to
AltProcessor.winAncestor
or its component.
Patch is attached.
Thanks,
Mikhail.