mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-25 22:30:48 +00:00
8139189: Review request for 8139189: VK_OEM_102 dead key detected as VK_UNDEFINED
Reviewed-by: alexsch
This commit is contained in:
parent
c5d53536bd
commit
1357181c55
@ -257,6 +257,8 @@ AwtComponent::AwtComponent()
|
||||
AwtComponent::BuildPrimaryDynamicTable();
|
||||
sm_PrimaryDynamicTableBuilt = TRUE;
|
||||
}
|
||||
|
||||
deadKeyActive = FALSE;
|
||||
}
|
||||
|
||||
AwtComponent::~AwtComponent()
|
||||
@ -2952,6 +2954,7 @@ static const CharToVKEntry charToDeadVKTable[] = {
|
||||
{0x037A, java_awt_event_KeyEvent_VK_DEAD_IOTA}, // ASCII ???
|
||||
{0x309B, java_awt_event_KeyEvent_VK_DEAD_VOICED_SOUND},
|
||||
{0x309C, java_awt_event_KeyEvent_VK_DEAD_SEMIVOICED_SOUND},
|
||||
{0x0004, java_awt_event_KeyEvent_VK_COMPOSE},
|
||||
{0,0}
|
||||
};
|
||||
|
||||
@ -3444,8 +3447,9 @@ UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops,
|
||||
AwtToolkit::GetKeyboardState(keyboardState);
|
||||
|
||||
// apply modifiers to keyboard state if necessary
|
||||
BOOL shiftIsDown = FALSE;
|
||||
if (modifiers) {
|
||||
BOOL shiftIsDown = modifiers & java_awt_event_InputEvent_SHIFT_DOWN_MASK;
|
||||
shiftIsDown = modifiers & java_awt_event_InputEvent_SHIFT_DOWN_MASK;
|
||||
BOOL altIsDown = modifiers & java_awt_event_InputEvent_ALT_DOWN_MASK;
|
||||
BOOL ctrlIsDown = modifiers & java_awt_event_InputEvent_CTRL_DOWN_MASK;
|
||||
|
||||
@ -3517,18 +3521,27 @@ UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops,
|
||||
} // ctrlIsDown
|
||||
} // modifiers
|
||||
|
||||
// instead of creating our own conversion tables, I'll let Win32
|
||||
// convert the character for me.
|
||||
WORD wChar[2];
|
||||
UINT scancode = ::MapVirtualKey(wkey, 0);
|
||||
int converted = ::ToUnicodeEx(wkey, scancode, keyboardState,
|
||||
wChar, 2, 0, GetKeyboardLayout());
|
||||
int converted = 1;
|
||||
UINT ch = ::MapVirtualKey(wkey, 2);
|
||||
if (ch & 0x80000000) {
|
||||
// Dead key which is handled as a normal key
|
||||
isDeadKey = deadKeyActive = TRUE;
|
||||
} else if (deadKeyActive) {
|
||||
// We cannot use ::ToUnicodeEx if dead key is active because this will
|
||||
// break dead key function
|
||||
wChar[0] = shiftIsDown ? ch : tolower(ch);
|
||||
} else {
|
||||
UINT scancode = ::MapVirtualKey(wkey, 0);
|
||||
converted = ::ToUnicodeEx(wkey, scancode, keyboardState,
|
||||
wChar, 2, 0, GetKeyboardLayout());
|
||||
}
|
||||
|
||||
UINT translation;
|
||||
BOOL deadKeyFlag = (converted == 2);
|
||||
|
||||
// Dead Key
|
||||
if (converted < 0) {
|
||||
if (converted < 0 || wChar[0] == 0 || isDeadKey) {
|
||||
translation = java_awt_event_KeyEvent_CHAR_UNDEFINED;
|
||||
} else
|
||||
// No translation available -- try known conversions or else punt.
|
||||
@ -3682,6 +3695,8 @@ MsgRouting AwtComponent::WmIMEChar(UINT character, UINT repCnt, UINT flags, BOOL
|
||||
MsgRouting AwtComponent::WmChar(UINT character, UINT repCnt, UINT flags,
|
||||
BOOL system)
|
||||
{
|
||||
deadKeyActive = FALSE;
|
||||
|
||||
// Will only get WmChar messages with DBCS if we create them for
|
||||
// an Edit class in the WmForwardChar method. These synthesized
|
||||
// DBCS chars are ok to pass on directly to the default window
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -826,6 +826,8 @@ private:
|
||||
// 6524352: support finer-resolution
|
||||
int m_wheelRotationAmount;
|
||||
|
||||
BOOL deadKeyActive;
|
||||
|
||||
/*
|
||||
* The association list of children's IDs and corresponding components.
|
||||
* Some components like Choice or List are required their sizes while
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,6 +31,8 @@ questions.
|
||||
Test run requires the following keyboard layouts to be installed:
|
||||
Linux OS: English (US, alternative international)
|
||||
Windows OS: Hungarian
|
||||
A keyboard layout having compose function or compose-like key. Programmer
|
||||
Dvorak (http://www.kaufmann.no/roland/dvorak/) is suggested to use.
|
||||
|
||||
To test JDK-8000423 fix (Linux only!):
|
||||
please switch to US alternative international layout and try to type diacritics
|
||||
@ -40,6 +42,12 @@ To test JDK-7197619 fix (Windows only!):
|
||||
please switch to Hungarian keyboard layout and try to type diacritics
|
||||
(Ctrl+Alt+2 e; Ctrl+Alt+2 E)
|
||||
|
||||
To test JDK-8139189 fix:
|
||||
please switch to Programmer Dvorak keyboard layout try to type diacritics
|
||||
using compose combinations (Compose+z+d, Compose+z+Shift+d). The Compose key
|
||||
in Programmer Dvorak layout is OEM102 the key which is located between
|
||||
Left Shift and Z keys on the standard 102-key keyboard.
|
||||
|
||||
If you can do that then the test is passed; otherwise failed.
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user