Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
f1c800fa
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看板
提交
f1c800fa
编写于
8月 29, 2012
作者:
L
leonidr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7124375: [macosx] Focus isn't transfered as expected between components
Reviewed-by: art, ant, serb
上级
50732c42
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
135 addition
and
186 deletion
+135
-186
src/macosx/classes/sun/lwawt/LWComponentPeer.java
src/macosx/classes/sun/lwawt/LWComponentPeer.java
+12
-12
src/macosx/classes/sun/lwawt/LWKeyboardFocusManagerPeer.java
src/macosx/classes/sun/lwawt/LWKeyboardFocusManagerPeer.java
+17
-55
src/macosx/classes/sun/lwawt/LWToolkit.java
src/macosx/classes/sun/lwawt/LWToolkit.java
+2
-2
src/macosx/classes/sun/lwawt/LWWindowPeer.java
src/macosx/classes/sun/lwawt/LWWindowPeer.java
+10
-13
src/share/classes/java/awt/KeyboardFocusManager.java
src/share/classes/java/awt/KeyboardFocusManager.java
+1
-2
src/share/classes/java/awt/peer/KeyboardFocusManagerPeer.java
...share/classes/java/awt/peer/KeyboardFocusManagerPeer.java
+8
-0
src/share/classes/sun/awt/HToolkit.java
src/share/classes/sun/awt/HToolkit.java
+10
-8
src/share/classes/sun/awt/HeadlessToolkit.java
src/share/classes/sun/awt/HeadlessToolkit.java
+10
-13
src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java
src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java
+0
-6
src/share/classes/sun/awt/KeyboardFocusManagerPeerProvider.java
...are/classes/sun/awt/KeyboardFocusManagerPeerProvider.java
+4
-5
src/share/classes/sun/awt/SunToolkit.java
src/share/classes/sun/awt/SunToolkit.java
+1
-2
src/solaris/classes/sun/awt/X11/XComponentPeer.java
src/solaris/classes/sun/awt/X11/XComponentPeer.java
+1
-1
src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
+2
-2
src/solaris/classes/sun/awt/X11/XDialogPeer.java
src/solaris/classes/sun/awt/X11/XDialogPeer.java
+1
-1
src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java
src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java
+5
-4
src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java
src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java
+1
-1
src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java
...olaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java
+22
-39
src/solaris/classes/sun/awt/X11/XToolkit.java
src/solaris/classes/sun/awt/X11/XToolkit.java
+3
-5
src/solaris/classes/sun/awt/X11/XWindowPeer.java
src/solaris/classes/sun/awt/X11/XWindowPeer.java
+10
-10
src/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java
...ws/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java
+13
-3
src/windows/classes/sun/awt/windows/WToolkit.java
src/windows/classes/sun/awt/windows/WToolkit.java
+2
-2
未找到文件。
src/macosx/classes/sun/lwawt/LWComponentPeer.java
浏览文件 @
f1c800fa
...
...
@@ -40,6 +40,7 @@ import java.awt.image.VolatileImage;
import
java.awt.peer.ComponentPeer
;
import
java.awt.peer.ContainerPeer
;
import
java.awt.peer.KeyboardFocusManagerPeer
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.lang.reflect.Field
;
import
java.security.AccessController
;
...
...
@@ -894,15 +895,15 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
", focusedWindowChangeAllowed="
+
focusedWindowChangeAllowed
+
", time= "
+
time
+
", cause="
+
cause
);
}
if
(
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
()).
processSynchronousLightweightTransfer
(
getTarget
(),
lightweightChild
,
temporary
,
focusedWindowChangeAllowed
,
time
))
{
if
(
LWKeyboardFocusManagerPeer
.
processSynchronousLightweightTransfer
(
getTarget
(),
lightweightChild
,
temporary
,
focusedWindowChangeAllowed
,
time
))
{
return
true
;
}
int
result
=
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
()).
shouldNativelyFocusHeavyweight
(
getTarget
(),
lightweightChild
,
temporary
,
focusedWindowChangeAllowed
,
time
,
cause
);
int
result
=
LWKeyboardFocusManagerPeer
.
shouldNativelyFocusHeavyweight
(
getTarget
(),
lightweightChild
,
temporary
,
focusedWindowChangeAllowed
,
time
,
cause
);
switch
(
result
)
{
case
LWKeyboardFocusManagerPeer
.
SNFH_FAILURE
:
return
false
;
...
...
@@ -951,14 +952,13 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
return
false
;
}
LWComponentPeer
focusOwnerPeer
=
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
()).
getFocusOwner
();
Component
focusOwner
=
(
focusOwnerPeer
!=
null
)
?
focusOwnerPeer
.
getTarget
()
:
null
;
KeyboardFocusManagerPeer
kfmPeer
=
LWKeyboardFocusManagerPeer
.
getInstance
();
Component
focusOwner
=
kfmPeer
.
getCurrentFocusOwner
();
return
LWKeyboardFocusManagerPeer
.
deliverFocus
(
lightweightChild
,
getTarget
(),
temporary
,
focusedWindowChangeAllowed
,
time
,
cause
,
focusOwner
);
case
LWKeyboardFocusManagerPeer
.
SNFH_SUCCESS_HANDLED
:
return
true
;
}
...
...
@@ -1263,8 +1263,8 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
protected
void
handleJavaFocusEvent
(
FocusEvent
e
)
{
// Note that the peer receives all the FocusEvents from
// its lightweight children as well
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
()).
setFocusOwner
(
e
.
getID
()
==
FocusEvent
.
FOCUS_GAINED
?
this
:
null
);
KeyboardFocusManagerPeer
kfmPeer
=
LWKeyboardFocusManagerPeer
.
getInstance
();
kfmPeer
.
setCurrentFocusOwner
(
e
.
getID
()
==
FocusEvent
.
FOCUS_GAINED
?
getTarget
()
:
null
);
}
/**
...
...
src/macosx/classes/sun/lwawt/LWKeyboardFocusManagerPeer.java
浏览文件 @
f1c800fa
...
...
@@ -26,85 +26,47 @@
package
sun.lwawt
;
import
java.awt.Component
;
import
java.awt.KeyboardFocusManager
;
import
java.awt.Window
;
import
java.util.Map
;
import
java.util.HashMap
;
import
sun.awt.AWTAccessor
;
import
sun.awt.AppContext
;
import
sun.awt.KeyboardFocusManagerPeerImpl
;
public
class
LWKeyboardFocusManagerPeer
extends
KeyboardFocusManagerPeerImpl
{
private
static
final
LWKeyboardFocusManagerPeer
inst
=
new
LWKeyboardFocusManagerPeer
();
private
Object
lock
=
new
Object
();
private
LWWindowPeer
focusedWindow
;
private
LWComponentPeer
focusOwner
;
private
static
Map
<
KeyboardFocusManager
,
LWKeyboardFocusManagerPeer
>
instances
=
new
HashMap
<
KeyboardFocusManager
,
LWKeyboardFocusManagerPeer
>();
private
Window
focusedWindow
;
private
Component
focusOwner
;
public
static
synchronized
LWKeyboardFocusManagerPeer
getInstance
(
AppContext
ctx
)
{
return
getInstance
(
AWTAccessor
.
getKeyboardFocusManagerAccessor
().
getCurrentKeyboardFocusManager
(
ctx
));
public
static
LWKeyboardFocusManagerPeer
getInstance
()
{
return
inst
;
}
public
static
synchronized
LWKeyboardFocusManagerPeer
getInstance
(
KeyboardFocusManager
manager
)
{
LWKeyboardFocusManagerPeer
instance
=
instances
.
get
(
manager
);
if
(
instance
==
null
)
{
instance
=
new
LWKeyboardFocusManagerPeer
(
manager
);
instances
.
put
(
manager
,
instance
);
}
return
instance
;
private
LWKeyboardFocusManagerPeer
()
{
}
public
LWKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
{
super
(
manager
);
@Override
public
void
setCurrentFocusedWindow
(
Window
win
)
{
synchronized
(
this
)
{
focusedWindow
=
win
;
}
}
@Override
public
Window
getCurrentFocusedWindow
()
{
synchronized
(
lock
)
{
return
(
focusedWindow
!=
null
)
?
(
Window
)
focusedWindow
.
getTarget
()
:
null
;
synchronized
(
this
)
{
return
focusedWindow
;
}
}
@Override
public
Component
getCurrentFocusOwner
()
{
synchronized
(
lock
)
{
return
(
focusOwner
!=
null
)
?
focusOwner
.
getTarget
()
:
null
;
synchronized
(
this
)
{
return
focusOwner
;
}
}
@Override
public
void
setCurrentFocusOwner
(
Component
comp
)
{
synchronized
(
lock
)
{
focusOwner
=
(
comp
!=
null
)
?
(
LWComponentPeer
)
comp
.
getPeer
()
:
null
;
}
}
void
setFocusedWindow
(
LWWindowPeer
peer
)
{
synchronized
(
lock
)
{
focusedWindow
=
peer
;
}
}
LWWindowPeer
getFocusedWindow
()
{
synchronized
(
lock
)
{
return
focusedWindow
;
}
}
void
setFocusOwner
(
LWComponentPeer
peer
)
{
synchronized
(
lock
)
{
focusOwner
=
peer
;
}
}
LWComponentPeer
getFocusOwner
()
{
synchronized
(
lock
)
{
return
focusOwner
;
synchronized
(
this
)
{
focusOwner
=
comp
;
}
}
}
src/macosx/classes/sun/lwawt/LWToolkit.java
浏览文件 @
f1c800fa
...
...
@@ -415,8 +415,8 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
}
@Override
public
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
{
return
LWKeyboardFocusManagerPeer
.
getInstance
(
manager
);
public
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
(
)
{
return
LWKeyboardFocusManagerPeer
.
getInstance
();
}
@Override
...
...
src/macosx/classes/sun/lwawt/LWWindowPeer.java
浏览文件 @
f1c800fa
...
...
@@ -238,8 +238,7 @@ public class LWWindowPeer
// TODO: update graphicsConfig, see 4868278
platformWindow
.
setVisible
(
visible
);
if
(
isSimpleWindow
())
{
LWKeyboardFocusManagerPeer
manager
=
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
());
KeyboardFocusManagerPeer
kfmPeer
=
LWKeyboardFocusManagerPeer
.
getInstance
();
if
(
visible
)
{
if
(!
getTarget
().
isAutoRequestFocus
())
{
...
...
@@ -248,7 +247,7 @@ public class LWWindowPeer
requestWindowFocus
(
CausedFocusEvent
.
Cause
.
ACTIVATION
);
}
// Focus the owner in case this window is focused.
}
else
if
(
manag
er
.
getCurrentFocusedWindow
()
==
getTarget
())
{
}
else
if
(
kfmPe
er
.
getCurrentFocusedWindow
()
==
getTarget
())
{
// Transfer focus to the owner.
LWWindowPeer
owner
=
getOwnerFrameDialog
(
LWWindowPeer
.
this
);
if
(
owner
!=
null
)
{
...
...
@@ -915,9 +914,8 @@ public class LWWindowPeer
public
void
dispatchKeyEvent
(
int
id
,
long
when
,
int
modifiers
,
int
keyCode
,
char
keyChar
,
int
keyLocation
)
{
LWComponentPeer
focusOwner
=
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
()).
getFocusOwner
();
KeyboardFocusManagerPeer
kfmPeer
=
LWKeyboardFocusManagerPeer
.
getInstance
();
Component
focusOwner
=
kfmPeer
.
getCurrentFocusOwner
();
// Null focus owner may receive key event when
// application hides the focused window upon ESC press
...
...
@@ -925,9 +923,10 @@ public class LWWindowPeer
// may come to already hidden window. This check eliminates NPE.
if
(
focusOwner
!=
null
)
{
KeyEvent
event
=
new
KeyEvent
(
focusOwner
.
getTarget
()
,
id
,
when
,
modifiers
,
new
KeyEvent
(
focusOwner
,
id
,
when
,
modifiers
,
keyCode
,
keyChar
,
keyLocation
);
focusOwner
.
postEvent
(
event
);
LWComponentPeer
peer
=
(
LWComponentPeer
)
focusOwner
.
getPeer
();
peer
.
postEvent
(
event
);
}
}
...
...
@@ -1244,10 +1243,8 @@ public class LWWindowPeer
}
}
LWKeyboardFocusManagerPeer
manager
=
LWKeyboardFocusManagerPeer
.
getInstance
(
getAppContext
());
Window
oppositeWindow
=
becomesFocused
?
manager
.
getCurrentFocusedWindow
()
:
null
;
KeyboardFocusManagerPeer
kfmPeer
=
LWKeyboardFocusManagerPeer
.
getInstance
();
Window
oppositeWindow
=
becomesFocused
?
kfmPeer
.
getCurrentFocusedWindow
()
:
null
;
// Note, the method is not called:
// - when the opposite (gaining focus) window is an owned/owner window.
...
...
@@ -1260,7 +1257,7 @@ public class LWWindowPeer
grabbingWindow
.
ungrab
();
}
manager
.
setFocusedWindow
(
becomesFocused
?
LWWindowPeer
.
this
:
null
);
kfmPeer
.
setCurrentFocusedWindow
(
becomesFocused
?
getTarget
()
:
null
);
int
eventID
=
becomesFocused
?
WindowEvent
.
WINDOW_GAINED_FOCUS
:
WindowEvent
.
WINDOW_LOST_FOCUS
;
WindowEvent
windowEvent
=
new
WindowEvent
(
getTarget
(),
eventID
,
oppositeWindow
);
...
...
src/share/classes/java/awt/KeyboardFocusManager.java
浏览文件 @
f1c800fa
...
...
@@ -56,7 +56,6 @@ import java.util.WeakHashMap;
import
sun.util.logging.PlatformLogger
;
import
sun.awt.AppContext
;
import
sun.awt.HeadlessToolkit
;
import
sun.awt.SunToolkit
;
import
sun.awt.CausedFocusEvent
;
import
sun.awt.KeyboardFocusManagerPeerProvider
;
...
...
@@ -443,7 +442,7 @@ public abstract class KeyboardFocusManager
private
void
initPeer
()
{
Toolkit
tk
=
Toolkit
.
getDefaultToolkit
();
KeyboardFocusManagerPeerProvider
peerProvider
=
(
KeyboardFocusManagerPeerProvider
)
tk
;
peer
=
peerProvider
.
createKeyboardFocusManagerPeer
(
this
);
peer
=
peerProvider
.
getKeyboardFocusManagerPeer
(
);
}
/**
...
...
src/share/classes/java/awt/peer/KeyboardFocusManagerPeer.java
浏览文件 @
f1c800fa
...
...
@@ -33,6 +33,14 @@ import java.awt.Window;
*/
public
interface
KeyboardFocusManagerPeer
{
/**
* Sets the window that should become the focused window.
*
* @param win the window that should become the focused window
*
*/
void
setCurrentFocusedWindow
(
Window
win
);
/**
* Returns the currently focused window.
*
...
...
src/share/classes/sun/awt/HToolkit.java
浏览文件 @
f1c800fa
...
...
@@ -44,6 +44,14 @@ import java.util.Properties;
public
class
HToolkit
extends
SunToolkit
implements
ComponentFactory
{
private
static
final
KeyboardFocusManagerPeer
kfmPeer
=
new
KeyboardFocusManagerPeer
()
{
public
void
setCurrentFocusedWindow
(
Window
win
)
{}
public
Window
getCurrentFocusedWindow
()
{
return
null
;
}
public
void
setCurrentFocusOwner
(
Component
comp
)
{}
public
Component
getCurrentFocusOwner
()
{
return
null
;
}
public
void
clearGlobalFocusOwner
(
Window
activeWindow
)
{}
};
public
HToolkit
()
{
}
...
...
@@ -152,15 +160,9 @@ public class HToolkit extends SunToolkit
throw
new
HeadlessException
();
}
public
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
{
public
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
(
)
{
// See 6833019.
return
new
KeyboardFocusManagerPeer
()
{
public
Window
getCurrentFocusedWindow
()
{
return
null
;
}
public
void
setCurrentFocusOwner
(
Component
comp
)
{}
public
Component
getCurrentFocusOwner
()
{
return
null
;
}
public
void
clearGlobalFocusOwner
(
Window
activeWindow
)
{}
};
return
kfmPeer
;
}
public
TrayIconPeer
createTrayIcon
(
TrayIcon
target
)
...
...
src/share/classes/sun/awt/HeadlessToolkit.java
浏览文件 @
f1c800fa
...
...
@@ -30,22 +30,25 @@ import java.awt.dnd.*;
import
java.awt.dnd.peer.DragSourceContextPeer
;
import
java.awt.event.*
;
import
java.awt.im.InputMethodHighlight
;
import
java.awt.im.spi.InputMethodDescriptor
;
import
java.awt.image.*
;
import
java.awt.datatransfer.Clipboard
;
import
java.awt.peer.*
;
import
java.beans.PropertyChangeListener
;
import
java.lang.reflect.Constructor
;
import
java.lang.reflect.InvocationTargetException
;
import
java.net.URL
;
import
java.util.Map
;
import
java.util.Properties
;
import
sun.awt.im.InputContext
;
import
sun.awt.image.ImageRepresentation
;
public
class
HeadlessToolkit
extends
Toolkit
implements
ComponentFactory
,
KeyboardFocusManagerPeerProvider
{
private
static
final
KeyboardFocusManagerPeer
kfmPeer
=
new
KeyboardFocusManagerPeer
()
{
public
void
setCurrentFocusedWindow
(
Window
win
)
{}
public
Window
getCurrentFocusedWindow
()
{
return
null
;
}
public
void
setCurrentFocusOwner
(
Component
comp
)
{}
public
Component
getCurrentFocusOwner
()
{
return
null
;
}
public
void
clearGlobalFocusOwner
(
Window
activeWindow
)
{}
};
private
Toolkit
tk
;
private
ComponentFactory
componentFactory
;
...
...
@@ -179,15 +182,9 @@ public class HeadlessToolkit extends Toolkit
throw
new
HeadlessException
();
}
public
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
{
public
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
(
)
{
// See 6833019.
return
new
KeyboardFocusManagerPeer
()
{
public
Window
getCurrentFocusedWindow
()
{
return
null
;
}
public
void
setCurrentFocusOwner
(
Component
comp
)
{}
public
Component
getCurrentFocusOwner
()
{
return
null
;
}
public
void
clearGlobalFocusOwner
(
Window
activeWindow
)
{}
};
return
kfmPeer
;
}
public
TrayIconPeer
createTrayIcon
(
TrayIcon
target
)
...
...
src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java
浏览文件 @
f1c800fa
...
...
@@ -53,12 +53,6 @@ public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManag
public
static
final
int
SNFH_SUCCESS_HANDLED
=
1
;
public
static
final
int
SNFH_SUCCESS_PROCEED
=
2
;
protected
KeyboardFocusManager
manager
;
public
KeyboardFocusManagerPeerImpl
(
KeyboardFocusManager
manager
)
{
this
.
manager
=
manager
;
}
@Override
public
void
clearGlobalFocusOwner
(
Window
activeWindow
)
{
if
(
activeWindow
!=
null
)
{
...
...
src/share/classes/sun/awt/KeyboardFocusManagerPeerProvider.java
浏览文件 @
f1c800fa
...
...
@@ -25,20 +25,19 @@
package
sun.awt
;
import
java.awt.KeyboardFocusManager
;
import
java.awt.peer.KeyboardFocusManagerPeer
;
/**
* {@link KeyboardFocusManagerPeerProvider} is required to be implemented by
* the currently used {@link java.awt.Toolkit} instance. In order to initialize
* {@link java.awt.KeyboardFocusManager}, an instance of {@link KeyboardFocusManagerPeer}
* is needed. To
create that instance, the {@link #create
KeyboardFocusManagerPeer}
* {@link java.awt.KeyboardFocusManager}, a
singleto
n instance of {@link KeyboardFocusManagerPeer}
* is needed. To
obtain that instance, the {@link #get
KeyboardFocusManagerPeer}
* method of the current toolkit is called.
*/
public
interface
KeyboardFocusManagerPeerProvider
{
/**
*
Creates a KeyboardFocusManagerPeer for the specified KeyboardFocusManager
.
*
Gets a singleton KeyboardFocusManagerPeer instance
.
*/
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
);
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
(
);
}
src/share/classes/sun/awt/SunToolkit.java
浏览文件 @
f1c800fa
...
...
@@ -53,7 +53,6 @@ import sun.security.action.GetPropertyAction;
import
sun.security.action.GetBooleanAction
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Constructor
;
import
java.lang.reflect.InvocationTargetException
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
...
...
@@ -204,7 +203,7 @@ public abstract class SunToolkit extends Toolkit
public
abstract
RobotPeer
createRobot
(
Robot
target
,
GraphicsDevice
screen
)
throws
AWTException
;
public
abstract
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
public
abstract
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
(
)
throws
HeadlessException
;
/**
...
...
src/solaris/classes/sun/awt/X11/XComponentPeer.java
浏览文件 @
f1c800fa
...
...
@@ -601,7 +601,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget
final
XWindowPeer
parentXWindow
=
getParentTopLevel
();
Window
parentWindow
=
(
Window
)
parentXWindow
.
getTarget
();
if
(
parentXWindow
.
isFocusableWindow
()
&&
parentXWindow
.
isSimpleWindow
()
&&
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
()
!=
parentWindow
)
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
()
!=
parentWindow
)
{
postEvent
(
new
InvocationEvent
(
parentWindow
,
new
Runnable
()
{
public
void
run
()
{
...
...
src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
浏览文件 @
f1c800fa
...
...
@@ -1108,7 +1108,7 @@ abstract class XDecoratedPeer extends XWindowPeer {
focusLog
.
fine
(
"Request for decorated window focus"
);
// If this is Frame or Dialog we can't assure focus request success - but we still can try
// If this is Window and its owner Frame is active we can be sure request succedded.
Window
focusedWindow
=
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
();
Window
focusedWindow
=
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
();
Window
activeWindow
=
XWindowPeer
.
getDecoratedOwner
(
focusedWindow
);
focusLog
.
finer
(
"Current window is: active={0}, focused={1}"
,
...
...
@@ -1201,7 +1201,7 @@ abstract class XDecoratedPeer extends XWindowPeer {
}
public
void
handleWindowFocusOut
(
Window
oppositeWindow
,
long
serial
)
{
Window
actualFocusedWindow
=
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
();
Window
actualFocusedWindow
=
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
();
// If the actual focused window is not this decorated window then retain it.
if
(
actualFocusedWindow
!=
null
&&
actualFocusedWindow
!=
target
)
{
...
...
src/solaris/classes/sun/awt/X11/XDialogPeer.java
浏览文件 @
f1c800fa
...
...
@@ -135,7 +135,7 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer {
* Thus we don't have to perform any transitive (a blocker of a blocker) checks.
*/
boolean
isFocusedWindowModalBlocker
()
{
Window
focusedWindow
=
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
();
Window
focusedWindow
=
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
();
XWindowPeer
focusedWindowPeer
=
null
;
if
(
focusedWindow
!=
null
)
{
...
...
src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java
浏览文件 @
f1c800fa
...
...
@@ -96,11 +96,11 @@ public class XEmbedChildProxyPeer implements ComponentPeer, XEventDispatcher{
public
void
handleEvent
(
AWTEvent
e
)
{
switch
(
e
.
getID
())
{
case
FocusEvent
.
FOCUS_GAINED
:
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusOwner
(
proxy
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusOwner
(
proxy
);
container
.
focusGained
(
handle
);
break
;
case
FocusEvent
.
FOCUS_LOST
:
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusOwner
(
null
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusOwner
(
null
);
container
.
focusLost
(
handle
);
break
;
case
KeyEvent
.
KEY_PRESSED
:
...
...
@@ -172,7 +172,7 @@ public class XEmbedChildProxyPeer implements ComponentPeer, XEventDispatcher{
if
(
lightweightChild
==
null
)
{
lightweightChild
=
(
Component
)
proxy
;
}
Component
currentOwner
=
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusOwner
();
Component
currentOwner
=
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusOwner
();
if
(
currentOwner
!=
null
&&
currentOwner
.
getPeer
()
==
null
)
{
currentOwner
=
null
;
}
...
...
@@ -224,7 +224,8 @@ public class XEmbedChildProxyPeer implements ComponentPeer, XEventDispatcher{
if
(
parent
!=
null
)
{
Window
parentWindow
=
(
Window
)
parent
;
// and check that it is focused
if
(!
parentWindow
.
isFocused
()
&&
XKeyboardFocusManagerPeer
.
getCurrentNativeFocusedWindow
()
==
parentWindow
)
{
if
(!
parentWindow
.
isFocused
()
&&
XKeyboardFocusManagerPeer
.
getInstance
().
getCurrentFocusedWindow
()
==
parentWindow
)
{
// if it is not - skip requesting focus on Solaris
// but return true for compatibility.
return
true
;
...
...
src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java
浏览文件 @
f1c800fa
...
...
@@ -204,7 +204,7 @@ public class XEmbedClientHelper extends XEmbedHelper implements XEventDispatcher
// XEMBED_FOCUS_OUT client messages), so we first need to check if
// embedded is an active window before sending WINDOW_LOST_FOCUS
// to shared code
if
(
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
()
==
embedded
.
target
)
{
if
(
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
()
==
embedded
.
target
)
{
embedded
.
handleWindowFocusOut
(
null
,
0
);
}
}
...
...
src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java
浏览文件 @
f1c800fa
...
...
@@ -25,66 +25,48 @@
package
sun.awt.X11
;
import
java.awt.Component
;
import
java.awt.KeyboardFocusManager
;
import
java.awt.Window
;
import
java.awt.event.FocusEvent
;
import
java.awt.peer.KeyboardFocusManagerPeer
;
import
java.awt.peer.ComponentPeer
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
sun.util.logging.PlatformLogger
;
import
sun.awt.CausedFocusEvent
;
import
sun.awt.SunToolkit
;
import
sun.awt.KeyboardFocusManagerPeerImpl
;
public
class
XKeyboardFocusManagerPeer
extends
KeyboardFocusManagerPeerImpl
{
private
static
final
PlatformLogger
focusLog
=
PlatformLogger
.
getLogger
(
"sun.awt.X11.focus.XKeyboardFocusManagerPeer"
);
private
static
final
XKeyboardFocusManagerPeer
inst
=
new
XKeyboardFocusManagerPeer
();
private
static
Object
lock
=
new
Object
()
{};
private
static
Component
currentFocusOwner
;
private
static
Window
currentFocusedWindow
;
private
Component
currentFocusOwner
;
private
Window
currentFocusedWindow
;
XKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
{
super
(
manager
)
;
public
static
XKeyboardFocusManagerPeer
getInstance
(
)
{
return
inst
;
}
@Override
public
void
setCurrentFocusOwner
(
Component
comp
)
{
setCurrentNativeFocusOwner
(
comp
);
}
@Override
public
Component
getCurrentFocusOwner
()
{
return
getCurrentNativeFocusOwner
();
private
XKeyboardFocusManagerPeer
()
{
}
@Override
public
Window
getCurrentFocusedWindow
()
{
return
getCurrentNativeFocusedWindow
();
}
public
static
void
setCurrentNativeFocusOwner
(
Component
comp
)
{
synchronized
(
lock
)
{
public
void
setCurrentFocusOwner
(
Component
comp
)
{
synchronized
(
this
)
{
currentFocusOwner
=
comp
;
}
}
public
static
Component
getCurrentNativeFocusOwner
()
{
synchronized
(
lock
)
{
@Override
public
Component
getCurrentFocusOwner
()
{
synchronized
(
this
)
{
return
currentFocusOwner
;
}
}
public
static
void
setCurrentNativeFocusedWindow
(
Window
win
)
{
if
(
focusLog
.
isLoggable
(
PlatformLogger
.
FINER
))
focusLog
.
finer
(
"Setting current native focused window "
+
win
);
@Override
public
void
setCurrentFocusedWindow
(
Window
win
)
{
if
(
focusLog
.
isLoggable
(
PlatformLogger
.
FINER
))
{
focusLog
.
finer
(
"Setting current focused window "
+
win
);
}
XWindowPeer
from
=
null
,
to
=
null
;
synchronized
(
lock
)
{
synchronized
(
this
)
{
if
(
currentFocusedWindow
!=
null
)
{
from
=
(
XWindowPeer
)
currentFocusedWindow
.
getPeer
();
}
...
...
@@ -104,8 +86,9 @@ public class XKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
}
}
public
static
Window
getCurrentNativeFocusedWindow
()
{
synchronized
(
lock
)
{
@Override
public
Window
getCurrentFocusedWindow
()
{
synchronized
(
this
)
{
return
currentFocusedWindow
;
}
}
...
...
@@ -124,6 +107,6 @@ public class XKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
focusedWindowChangeAllowed
,
time
,
cause
,
get
CurrentNative
FocusOwner
());
get
Instance
().
getCurrent
FocusOwner
());
}
}
src/solaris/classes/sun/awt/X11/XToolkit.java
浏览文件 @
f1c800fa
...
...
@@ -50,7 +50,6 @@ import javax.swing.LookAndFeel;
import
javax.swing.UIDefaults
;
import
sun.awt.*
;
import
sun.font.FontConfigManager
;
import
sun.font.FontManager
;
import
sun.java2d.SunGraphicsEnvironment
;
import
sun.misc.PerformanceLogger
;
import
sun.print.PrintJob2D
;
...
...
@@ -667,7 +666,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
long
w
=
0
;
if
(
windowToXWindow
(
ev
.
get_xany
().
get_window
())
!=
null
)
{
Component
owner
=
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusOwner
();
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusOwner
();
if
(
owner
!=
null
)
{
XWindow
ownerWindow
=
(
XWindow
)
AWTAccessor
.
getComponentAccessor
().
getPeer
(
owner
);
if
(
ownerWindow
!=
null
)
{
...
...
@@ -1159,9 +1158,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
return
peer
;
}
public
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
throws
HeadlessException
{
XKeyboardFocusManagerPeer
peer
=
new
XKeyboardFocusManagerPeer
(
manager
);
return
peer
;
public
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
()
throws
HeadlessException
{
return
XKeyboardFocusManagerPeer
.
getInstance
();
}
/**
...
...
src/solaris/classes/sun/awt/X11/XWindowPeer.java
浏览文件 @
f1c800fa
...
...
@@ -617,7 +617,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
public
void
handleWindowFocusIn_Dispatch
()
{
if
(
EventQueue
.
isDispatchThread
())
{
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusedWindow
((
Window
)
target
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusedWindow
((
Window
)
target
);
WindowEvent
we
=
new
WindowEvent
((
Window
)
target
,
WindowEvent
.
WINDOW_GAINED_FOCUS
);
SunToolkit
.
setSystemGenerated
(
we
);
target
.
dispatchEvent
(
we
);
...
...
@@ -626,7 +626,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
public
void
handleWindowFocusInSync
(
long
serial
)
{
WindowEvent
we
=
new
WindowEvent
((
Window
)
target
,
WindowEvent
.
WINDOW_GAINED_FOCUS
);
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusedWindow
((
Window
)
target
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusedWindow
((
Window
)
target
);
sendEvent
(
we
);
}
// NOTE: This method may be called by privileged threads.
...
...
@@ -634,7 +634,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
public
void
handleWindowFocusIn
(
long
serial
)
{
WindowEvent
we
=
new
WindowEvent
((
Window
)
target
,
WindowEvent
.
WINDOW_GAINED_FOCUS
);
/* wrap in Sequenced, then post*/
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusedWindow
((
Window
)
target
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusedWindow
((
Window
)
target
);
postEvent
(
wrapInSequenced
((
AWTEvent
)
we
));
}
...
...
@@ -642,15 +642,15 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
// DO NOT INVOKE CLIENT CODE ON THIS THREAD!
public
void
handleWindowFocusOut
(
Window
oppositeWindow
,
long
serial
)
{
WindowEvent
we
=
new
WindowEvent
((
Window
)
target
,
WindowEvent
.
WINDOW_LOST_FOCUS
,
oppositeWindow
);
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusedWindow
(
null
);
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusOwner
(
null
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusedWindow
(
null
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusOwner
(
null
);
/* wrap in Sequenced, then post*/
postEvent
(
wrapInSequenced
((
AWTEvent
)
we
));
}
public
void
handleWindowFocusOutSync
(
Window
oppositeWindow
,
long
serial
)
{
WindowEvent
we
=
new
WindowEvent
((
Window
)
target
,
WindowEvent
.
WINDOW_LOST_FOCUS
,
oppositeWindow
);
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusedWindow
(
null
);
XKeyboardFocusManagerPeer
.
setCurrentNative
FocusOwner
(
null
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusedWindow
(
null
);
XKeyboardFocusManagerPeer
.
getInstance
().
setCurrent
FocusOwner
(
null
);
sendEvent
(
we
);
}
...
...
@@ -1138,7 +1138,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
// getWMState() always returns 0 (Withdrawn) for simple windows. Hence
// we ignore the state for such windows.
if
(
isVisible
()
&&
(
state
==
XUtilConstants
.
NormalState
||
isSimpleWindow
()))
{
if
(
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
()
==
if
(
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
()
==
getTarget
())
{
show
=
true
;
...
...
@@ -1185,7 +1185,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
* receive WM_TAKE_FOCUS.
*/
if
(
isSimpleWindow
())
{
if
(
target
==
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
())
{
if
(
target
==
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
())
{
Window
owner
=
getDecoratedOwner
((
Window
)
target
);
((
XWindowPeer
)
AWTAccessor
.
getComponentAccessor
().
getPeer
(
owner
)).
requestWindowFocus
();
}
...
...
@@ -1825,7 +1825,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
// If this is Frame or Dialog we can't assure focus request success - but we still can try
// If this is Window and its owner Frame is active we can be sure request succedded.
Window
ownerWindow
=
XWindowPeer
.
getDecoratedOwner
((
Window
)
target
);
Window
focusedWindow
=
XKeyboardFocusManagerPeer
.
get
CurrentNative
FocusedWindow
();
Window
focusedWindow
=
XKeyboardFocusManagerPeer
.
get
Instance
().
getCurrent
FocusedWindow
();
Window
activeWindow
=
XWindowPeer
.
getDecoratedOwner
(
focusedWindow
);
if
(
isWMStateNetHidden
())
{
...
...
src/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java
浏览文件 @
f1c800fa
...
...
@@ -25,7 +25,6 @@
package
sun.awt.windows
;
import
java.awt.KeyboardFocusManager
;
import
java.awt.Window
;
import
java.awt.Component
;
import
java.awt.peer.ComponentPeer
;
...
...
@@ -37,8 +36,13 @@ class WKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
static
native
Component
getNativeFocusOwner
();
static
native
Window
getNativeFocusedWindow
();
WKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
{
super
(
manager
);
private
static
final
WKeyboardFocusManagerPeer
inst
=
new
WKeyboardFocusManagerPeer
();
public
static
WKeyboardFocusManagerPeer
getInstance
()
{
return
inst
;
}
private
WKeyboardFocusManagerPeer
()
{
}
@Override
...
...
@@ -51,6 +55,12 @@ class WKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
return
getNativeFocusOwner
();
}
@Override
public
void
setCurrentFocusedWindow
(
Window
win
)
{
// Not used on Windows
throw
new
RuntimeException
(
"not implemented"
);
}
@Override
public
Window
getCurrentFocusedWindow
()
{
return
getNativeFocusedWindow
();
...
...
src/windows/classes/sun/awt/windows/WToolkit.java
浏览文件 @
f1c800fa
...
...
@@ -506,10 +506,10 @@ public class WToolkit extends SunToolkit implements Runnable {
return
true
;
}
public
KeyboardFocusManagerPeer
createKeyboardFocusManagerPeer
(
KeyboardFocusManager
manager
)
public
KeyboardFocusManagerPeer
getKeyboardFocusManagerPeer
(
)
throws
HeadlessException
{
return
new
WKeyboardFocusManagerPeer
(
manager
);
return
WKeyboardFocusManagerPeer
.
getInstance
(
);
}
protected
native
void
setDynamicLayoutNative
(
boolean
b
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录