Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
8fe1caaf
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
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看板
提交
8fe1caaf
编写于
4月 24, 2018
作者:
A
alitvinov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8199748: Touch keyboard is not shown, if text component gets focus from other text component
Reviewed-by: serb, aivanov
上级
747082a6
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
36 addition
and
24 deletion
+36
-24
src/windows/classes/sun/awt/windows/WToolkit.java
src/windows/classes/sun/awt/windows/WToolkit.java
+36
-24
未找到文件。
src/windows/classes/sun/awt/windows/WToolkit.java
浏览文件 @
8fe1caaf
...
...
@@ -37,6 +37,7 @@ import java.awt.datatransfer.Clipboard;
import
java.awt.TextComponent
;
import
java.awt.TrayIcon
;
import
java.beans.PropertyChangeListener
;
import
java.lang.ref.WeakReference
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
import
javax.swing.text.JTextComponent
;
...
...
@@ -1111,51 +1112,62 @@ public final class WToolkit extends SunToolkit implements Runnable {
// The following code is used for support of automatic showing of the touch
// keyboard for text components and is accessed only from EDT.
///////////////////////////////////////////////////////////////////////////
private
volatile
Component
compOnTouchDownEvent
;
private
volatile
Component
compOnMousePressedEvent
;
private
static
final
WeakReference
<
Component
>
NULL_COMPONENT_WR
=
new
WeakReference
<>(
null
);
private
volatile
WeakReference
<
Component
>
compOnTouchDownEvent
=
NULL_COMPONENT_WR
;
private
volatile
WeakReference
<
Component
>
compOnMousePressedEvent
=
NULL_COMPONENT_WR
;
private
boolean
isComponentValidForTouchKeyboard
(
Component
comp
)
{
if
((
comp
!=
null
)
&&
comp
.
isEnabled
()
&&
comp
.
isFocusable
()
&&
(((
comp
instanceof
TextComponent
)
&&
((
TextComponent
)
comp
).
isEditable
())
||
((
comp
instanceof
JTextComponent
)
&&
((
JTextComponent
)
comp
).
isEditable
())))
{
return
true
;
}
return
false
;
}
@Override
public
void
showOrHideTouchKeyboard
(
Component
comp
,
AWTEvent
e
)
{
if
((
comp
==
null
)
||
(
e
==
null
)
||
(!(
comp
instanceof
TextComponent
)
&&
!(
comp
instanceof
JTextComponent
)))
{
if
(!(
comp
instanceof
TextComponent
)
&&
!(
comp
instanceof
JTextComponent
))
{
return
;
}
if
((
e
instanceof
MouseEvent
)
&&
comp
.
isEnabled
()
&&
comp
.
isFocusable
()
&&
(((
comp
instanceof
TextComponent
)
&&
((
TextComponent
)
comp
).
isEditable
())
||
((
comp
instanceof
JTextComponent
)
&&
((
JTextComponent
)
comp
).
isEditable
())))
{
MouseEvent
me
=
(
MouseEvent
)
e
;
if
((
e
instanceof
MouseEvent
)
&&
isComponentValidForTouchKeyboard
(
comp
))
{
MouseEvent
me
=
(
MouseEvent
)
e
;
if
(
me
.
getID
()
==
MouseEvent
.
MOUSE_PRESSED
)
{
if
(
AWTAccessor
.
getMouseEventAccessor
()
.
isCausedByTouchEvent
(
me
))
{
compOnTouchDownEvent
=
comp
;
if
(
AWTAccessor
.
getMouseEventAccessor
().
isCausedByTouchEvent
(
me
))
{
compOnTouchDownEvent
=
new
WeakReference
<>(
comp
);
}
else
{
compOnMousePressedEvent
=
comp
;
compOnMousePressedEvent
=
new
WeakReference
<>(
comp
)
;
}
}
else
if
(
me
.
getID
()
==
MouseEvent
.
MOUSE_RELEASED
)
{
if
(
AWTAccessor
.
getMouseEventAccessor
()
.
isCausedByTouchEvent
(
me
))
{
if
(
compOnTouchDownEvent
==
comp
)
{
if
(
AWTAccessor
.
getMouseEventAccessor
().
isCausedByTouchEvent
(
me
))
{
if
(
compOnTouchDownEvent
.
get
()
==
comp
)
{
showTouchKeyboard
(
true
);
}
compOnTouchDownEvent
=
null
;
compOnTouchDownEvent
=
NULL_COMPONENT_WR
;
}
else
{
if
(
compOnMousePressedEvent
==
comp
)
{
if
(
compOnMousePressedEvent
.
get
()
==
comp
)
{
showTouchKeyboard
(
false
);
}
compOnMousePressedEvent
=
null
;
compOnMousePressedEvent
=
NULL_COMPONENT_WR
;
}
}
}
else
if
(
e
instanceof
FocusEvent
)
{
if
(
e
.
getID
()
==
FocusEvent
.
FOCUS_LOST
)
{
FocusEvent
fe
=
(
FocusEvent
)
e
;
if
(
fe
.
getID
()
==
FocusEvent
.
FOCUS_LOST
)
{
// Hide the touch keyboard, if not a text component gains focus.
if
(!
isComponentValidForTouchKeyboard
(
fe
.
getOppositeComponent
()))
{
hideTouchKeyboard
();
}
}
}
}
private
native
void
showTouchKeyboard
(
boolean
causedByTouchEvent
);
private
native
void
hideTouchKeyboard
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录