Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
3347495c
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3347495c
编写于
9月 21, 2012
作者:
A
alexsch
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7199180: [macosx] Dead keys handling for input methods
Reviewed-by: kizune, anthony
上级
5194ee07
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
142 addition
and
4 deletion
+142
-4
src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
+3
-0
src/macosx/native/sun/awt/AWTEvent.m
src/macosx/native/sun/awt/AWTEvent.m
+4
-3
src/macosx/native/sun/awt/AWTView.m
src/macosx/native/sun/awt/AWTView.m
+4
-1
test/java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java
...va/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java
+131
-0
未找到文件。
src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
浏览文件 @
3347495c
...
...
@@ -160,6 +160,9 @@ final class CPlatformResponder {
if
(
isDeadChar
){
testChar
=
(
char
)
out
[
2
];
if
(
testChar
==
0
){
return
;
}
}
jkeyCode
=
out
[
0
];
...
...
src/macosx/native/sun/awt/AWTEvent.m
浏览文件 @
3347495c
...
...
@@ -383,6 +383,7 @@ static unichar NsGetDeadKeyChar(unsigned short keyCode)
{
TISInputSourceRef
currentKeyboard
=
TISCopyCurrentKeyboardInputSource
()
;
CFDataRef
uchr
=
(
CFDataRef
)
TISGetInputSourceProperty
(
currentKeyboard
,
kTISPropertyUnicodeKeyLayoutData
)
;
if
(
uchr
==
nil
)
{
return
;
}
const
UCKeyboardLayout
*
keyboardLayout
=
(
const
UCKeyboardLayout
*
)
CFDataGetBytePtr
(
uchr
)
;
//
Carbon
modifiers
should
be
used
instead
of
NSEvent
modifiers
UInt32
modifierKeyState
=
(
GetCurrentEventKeyModifiers
()
>>
8
)
&
0
xFF
;
...
...
@@ -563,18 +564,18 @@ NSUInteger JavaModifiersToNsKeyModifiers(jint javaModifiers, BOOL isExtMods)
const
struct
_
nsKeyToJavaModifier
*
cur
;
for
(
cur
=
nsKeyToJavaModifierTable
;
cur
->
nsMask
!=
0
;
++
cur
)
{
jint
mask
=
isExtMods
?
cur
->
javaExtMask
:
cur
->
javaMask
;
jint
mask
=
isExtMods
?
cur
->
javaExtMask
:
cur
->
javaMask
;
if
((
mask
&
javaModifiers
)
!=
0
)
{
nsFlags
|=
cur
->
nsMask
;
}
}
//
special
case
jint
mask
=
isExtMods
?
java
_
awt
_
event
_
InputEvent
_
ALT
_
GRAPH
_
DOWN
_
MASK
:
jint
mask
=
isExtMods
?
java
_
awt
_
event
_
InputEvent
_
ALT
_
GRAPH
_
DOWN
_
MASK
:
java
_
awt
_
event
_
InputEvent
_
ALT
_
GRAPH
_
MASK
;
if
((
mask
&
javaModifiers
)
!=
0
)
{
nsFlags
|=
NSAlternateKeyMask
;
nsFlags
|=
NSAlternateKeyMask
;
}
return
nsFlags
;
...
...
src/macosx/native/sun/awt/AWTView.m
浏览文件 @
3347495c
...
...
@@ -279,7 +279,10 @@ AWT_ASSERT_APPKIT_THREAD;
return
;
}
if
(
!
[
self
hasMarkedText
]
&&
fKeyEventsNeeded
)
{
NSString
*
eventCharacters
=
[
event
characters
];
BOOL
isDeadKey
=
(
eventCharacters
!=
nil
&&
[
eventCharacters
length
]
==
0
);
if
((
!
[
self
hasMarkedText
]
&&
fKeyEventsNeeded
)
||
isDeadKey
)
{
[
self
deliverJavaKeyEventHelper
:
event
];
}
...
...
test/java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java
0 → 100644
浏览文件 @
3347495c
/*
* Copyright (c) 2012, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7199180
* @summary [macosx] Dead keys handling for input methods
* @author alexandr.scherbatiy area=awt.event
* @run main DeadKeyMacOSXInputText
*/
import
java.awt.*
;
import
java.awt.event.*
;
import
java.awt.event.KeyEvent
;
import
javax.swing.JTextField
;
import
sun.awt.OSInfo
;
import
sun.awt.SunToolkit
;
public
class
DeadKeyMacOSXInputText
{
private
static
SunToolkit
toolkit
;
private
static
volatile
int
state
=
0
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
if
(
OSInfo
.
getOSType
()
!=
OSInfo
.
OSType
.
MACOSX
)
{
return
;
}
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
Robot
robot
=
new
Robot
();
robot
.
setAutoDelay
(
50
);
createAndShowGUI
();
// Pressed keys: Alt + E + A
// Results: ALT + VK_DEAD_ACUTE + a with accute accent
robot
.
keyPress
(
KeyEvent
.
VK_ALT
);
robot
.
keyPress
(
KeyEvent
.
VK_E
);
robot
.
keyRelease
(
KeyEvent
.
VK_E
);
robot
.
keyRelease
(
KeyEvent
.
VK_ALT
);
robot
.
keyPress
(
KeyEvent
.
VK_A
);
robot
.
keyRelease
(
KeyEvent
.
VK_A
);
toolkit
.
realSync
();
if
(
state
!=
3
)
{
throw
new
RuntimeException
(
"Wrong number of key events."
);
}
}
static
void
createAndShowGUI
()
{
Frame
frame
=
new
Frame
();
frame
.
setSize
(
300
,
300
);
Panel
panel
=
new
Panel
(
new
BorderLayout
());
JTextField
textField
=
new
JTextField
();
textField
.
addKeyListener
(
new
DeadKeyListener
());
panel
.
add
(
textField
,
BorderLayout
.
CENTER
);
frame
.
add
(
panel
);
frame
.
setVisible
(
true
);
toolkit
.
realSync
();
textField
.
requestFocusInWindow
();
toolkit
.
realSync
();
}
static
class
DeadKeyListener
extends
KeyAdapter
{
@Override
public
void
keyPressed
(
KeyEvent
e
)
{
int
keyCode
=
e
.
getKeyCode
();
char
keyChar
=
e
.
getKeyChar
();
switch
(
state
)
{
case
0
:
if
(
keyCode
!=
KeyEvent
.
VK_ALT
)
{
throw
new
RuntimeException
(
"Alt is not pressed."
);
}
state
++;
break
;
case
1
:
if
(
keyCode
!=
KeyEvent
.
VK_DEAD_ACUTE
)
{
throw
new
RuntimeException
(
"Dead ACUTE is not pressed."
);
}
if
(
keyChar
!=
0xB4
)
{
throw
new
RuntimeException
(
"Pressed char is not dead acute."
);
}
state
++;
break
;
}
}
@Override
public
void
keyTyped
(
KeyEvent
e
)
{
int
keyCode
=
e
.
getKeyCode
();
char
keyChar
=
e
.
getKeyChar
();
if
(
state
==
2
)
{
if
(
keyCode
!=
0
)
{
throw
new
RuntimeException
(
"Key code should be undefined."
);
}
if
(
keyChar
!=
0xE1
)
{
throw
new
RuntimeException
(
"A char does not have ACCUTE accent"
);
}
state
++;
}
else
{
throw
new
RuntimeException
(
"Wron number of keyTyped events."
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录