Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
5ff1da03
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看板
提交
5ff1da03
编写于
6月 08, 2012
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
7d6cee72
9e8a7b0f
变更
39
隐藏空白更改
内联
并排
Showing
39 changed file
with
1377 addition
and
631 deletion
+1377
-631
src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java
src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java
+1
-1
src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java
src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java
+4
-0
src/macosx/classes/sun/awt/CGraphicsDevice.java
src/macosx/classes/sun/awt/CGraphicsDevice.java
+31
-1
src/macosx/classes/sun/awt/CGraphicsEnvironment.java
src/macosx/classes/sun/awt/CGraphicsEnvironment.java
+4
-0
src/macosx/classes/sun/lwawt/LWListPeer.java
src/macosx/classes/sun/lwawt/LWListPeer.java
+9
-0
src/macosx/classes/sun/lwawt/LWWindowPeer.java
src/macosx/classes/sun/lwawt/LWWindowPeer.java
+7
-17
src/macosx/classes/sun/lwawt/PlatformWindow.java
src/macosx/classes/sun/lwawt/PlatformWindow.java
+2
-2
src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java
src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java
+37
-29
src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java
...cosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java
+3
-4
src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
+7
-1
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+13
-8
src/macosx/native/sun/awt/AWTWindow.h
src/macosx/native/sun/awt/AWTWindow.h
+1
-0
src/macosx/native/sun/awt/AWTWindow.m
src/macosx/native/sun/awt/AWTWindow.m
+11
-21
src/macosx/native/sun/awt/CGraphicsDevice.m
src/macosx/native/sun/awt/CGraphicsDevice.m
+165
-1
src/share/classes/java/awt/KeyboardFocusManager.java
src/share/classes/java/awt/KeyboardFocusManager.java
+1
-1
src/share/classes/javax/swing/JPopupMenu.java
src/share/classes/javax/swing/JPopupMenu.java
+6
-1
src/share/classes/javax/swing/PopupFactory.java
src/share/classes/javax/swing/PopupFactory.java
+0
-6
src/share/demo/jfc/TransparentRuler/transparentruler/Ruler.java
...are/demo/jfc/TransparentRuler/transparentruler/Ruler.java
+3
-0
src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
+7
-5
src/solaris/classes/sun/awt/X11/XKeysym.java
src/solaris/classes/sun/awt/X11/XKeysym.java
+16
-0
src/solaris/classes/sun/awt/X11/XLabelPeer.java
src/solaris/classes/sun/awt/X11/XLabelPeer.java
+1
-1
src/solaris/classes/sun/awt/X11/XWM.java
src/solaris/classes/sun/awt/X11/XWM.java
+10
-1
src/solaris/native/java/lang/java_props_md.c
src/solaris/native/java/lang/java_props_md.c
+1
-1
src/solaris/native/sun/awt/swing_GTKEngine.c
src/solaris/native/sun/awt/swing_GTKEngine.c
+1
-2
src/solaris/native/sun/xawt/XWindow.c
src/solaris/native/sun/xawt/XWindow.c
+19
-0
src/windows/native/sun/windows/awt_Component.cpp
src/windows/native/sun/windows/awt_Component.cpp
+2
-0
src/windows/native/sun/windows/awt_TextArea.cpp
src/windows/native/sun/windows/awt_TextArea.cpp
+1
-337
src/windows/native/sun/windows/awt_TextArea.h
src/windows/native/sun/windows/awt_TextArea.h
+0
-41
src/windows/native/sun/windows/awt_TextComponent.cpp
src/windows/native/sun/windows/awt_TextComponent.cpp
+317
-1
src/windows/native/sun/windows/awt_TextComponent.h
src/windows/native/sun/windows/awt_TextComponent.h
+41
-1
src/windows/native/sun/windows/awt_TextField.cpp
src/windows/native/sun/windows/awt_TextField.cpp
+19
-112
src/windows/native/sun/windows/awt_TextField.h
src/windows/native/sun/windows/awt_TextField.h
+1
-5
test/java/awt/Frame/ResizeAfterSetFont/ResizeAfterSetFont.java
...java/awt/Frame/ResizeAfterSetFont/ResizeAfterSetFont.java
+75
-0
test/java/awt/WMSpecificTests/Mutter/MutterMaximizeTest.java
test/java/awt/WMSpecificTests/Mutter/MutterMaximizeTest.java
+160
-0
test/java/awt/regtesthelpers/Util.java
test/java/awt/regtesthelpers/Util.java
+12
-5
test/javax/swing/JPopupMenu/6694823/bug6694823.java
test/javax/swing/JPopupMenu/6694823/bug6694823.java
+21
-26
test/javax/swing/JPopupMenu/6800513/bug6800513.java
test/javax/swing/JPopupMenu/6800513/bug6800513.java
+147
-0
test/javax/swing/JPopupMenu/7156657/bug7156657.java
test/javax/swing/JPopupMenu/7156657/bug7156657.java
+157
-0
test/javax/swing/JSpinner/5012888/bug5012888.java
test/javax/swing/JSpinner/5012888/bug5012888.java
+64
-0
未找到文件。
src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java
浏览文件 @
5ff1da03
...
...
@@ -257,7 +257,7 @@ public class AquaInternalFrameUI extends BasicInternalFrameUI implements SwingCo
}
public
Dimension
getPreferredSize
(
JComponent
x
)
{
Dimension
preferredSize
=
super
.
get
Minimum
Size
(
x
);
Dimension
preferredSize
=
super
.
get
Preferred
Size
(
x
);
Dimension
minimumSize
=
frame
.
getMinimumSize
();
if
(
preferredSize
.
width
<
minimumSize
.
width
)
{
preferredSize
.
width
=
minimumSize
.
width
;
...
...
src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java
浏览文件 @
5ff1da03
...
...
@@ -60,6 +60,10 @@ public class AquaScrollPaneUI extends javax.swing.plaf.basic.BasicScrollPaneUI {
if
(
wasVisible
)
{
vScrollBar
.
setVisible
(
true
);
}
// Consume the event even when the scrollBar is invisible
// see #7124320
e
.
consume
();
}
}
}
src/macosx/classes/sun/awt/CGraphicsDevice.java
浏览文件 @
5ff1da03
/*
* Copyright (c) 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 201
2
, 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
...
...
@@ -29,6 +29,7 @@ import java.awt.GraphicsConfiguration;
import
java.awt.GraphicsDevice
;
import
java.awt.Window
;
import
java.awt.AWTPermission
;
import
java.awt.DisplayMode
;
import
sun.java2d.opengl.CGLGraphicsConfig
;
...
...
@@ -178,4 +179,33 @@ public class CGraphicsDevice extends GraphicsDevice {
peer
.
exitFullScreenMode
();
}
}
@Override
public
boolean
isDisplayChangeSupported
()
{
return
true
;
}
@Override
public
void
setDisplayMode
(
DisplayMode
dm
)
{
nativeSetDisplayMode
(
displayID
,
dm
.
getWidth
(),
dm
.
getHeight
(),
dm
.
getBitDepth
(),
dm
.
getRefreshRate
());
if
(
isFullScreenSupported
()
&&
getFullScreenWindow
()
!=
null
)
{
getFullScreenWindow
().
setSize
(
dm
.
getWidth
(),
dm
.
getHeight
());
}
}
@Override
public
DisplayMode
getDisplayMode
()
{
return
nativeGetDisplayMode
(
displayID
);
}
@Override
public
DisplayMode
[]
getDisplayModes
()
{
return
nativeGetDisplayModes
(
displayID
);
}
private
native
void
nativeSetDisplayMode
(
int
displayID
,
int
w
,
int
h
,
int
bpp
,
int
refrate
);
private
native
DisplayMode
nativeGetDisplayMode
(
int
displayID
);
private
native
DisplayMode
[]
nativeGetDisplayModes
(
int
displayID
);
}
src/macosx/classes/sun/awt/CGraphicsEnvironment.java
浏览文件 @
5ff1da03
...
...
@@ -181,6 +181,10 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
return
devices
.
values
().
toArray
(
new
CGraphicsDevice
[
devices
.
values
().
size
()]);
}
public
synchronized
GraphicsDevice
getScreenDevice
(
int
displayID
)
{
return
devices
.
get
(
displayID
);
}
@Override
protected
synchronized
int
getNumScreens
()
{
return
devices
.
size
();
...
...
src/macosx/classes/sun/lwawt/LWListPeer.java
浏览文件 @
5ff1da03
...
...
@@ -245,6 +245,15 @@ final class LWListPeer
}
}
@Override
public
void
setFont
(
Font
font
)
{
super
.
setFont
(
font
);
if
(
getView
()
!=
null
)
{
getView
().
setFont
(
font
);
LWListPeer
.
this
.
revalidate
();
}
}
private
final
class
JListDelegate
extends
JList
<
Object
>
{
JListDelegate
()
{
...
...
src/macosx/classes/sun/lwawt/LWWindowPeer.java
浏览文件 @
5ff1da03
...
...
@@ -68,7 +68,7 @@ public class LWWindowPeer
private
Insets
insets
=
new
Insets
(
0
,
0
,
0
,
0
);
private
int
screenOn
=
-
1
;
private
GraphicsDevice
graphicsDevice
;
private
GraphicsConfiguration
graphicsConfig
;
private
SurfaceData
surfaceData
;
...
...
@@ -868,17 +868,6 @@ public class LWWindowPeer
return
0
;
}
private
static
GraphicsConfiguration
getScreenGraphicsConfig
(
int
screen
)
{
GraphicsEnvironment
ge
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
();
GraphicsDevice
[]
gds
=
ge
.
getScreenDevices
();
if
(
screen
>=
gds
.
length
)
{
// This could happen during device addition/removal. Use
// the default screen device in this case
return
ge
.
getDefaultScreenDevice
().
getDefaultConfiguration
();
}
return
gds
[
screen
].
getDefaultConfiguration
();
}
/*
* This method is called when window's graphics config is changed from
* the app code (e.g. when the window is made non-opaque) or when
...
...
@@ -893,7 +882,7 @@ public class LWWindowPeer
}
// If window's graphics config is changed from the app code, the
// config correspond to the same device as before; when the window
// is moved by user,
screenOn
is updated in checkIfOnNewScreen().
// is moved by user,
graphicsDevice
is updated in checkIfOnNewScreen().
// In either case, there's nothing to do with screenOn here
graphicsConfig
=
gc
;
}
...
...
@@ -902,16 +891,17 @@ public class LWWindowPeer
}
private
void
checkIfOnNewScreen
()
{
int
windowScreen
=
platformWindow
.
getScreenImOn
();
GraphicsDevice
newGraphicsDevice
=
platformWindow
.
getGraphicsDevice
();
synchronized
(
getStateLock
())
{
if
(
windowScreen
==
screenOn
)
{
if
(
graphicsDevice
==
newGraphicsDevice
)
{
return
;
}
screenOn
=
windowScreen
;
graphicsDevice
=
newGraphicsDevice
;
}
// TODO: DisplayChangedListener stuff
final
GraphicsConfiguration
newGC
=
getScreenGraphicsConfig
(
windowScreen
);
final
GraphicsConfiguration
newGC
=
newGraphicsDevice
.
getDefaultConfiguration
();
if
(!
setGraphicsConfig
(
newGC
))
return
;
SunToolkit
.
executeOnEventHandlerThread
(
getTarget
(),
new
Runnable
()
{
...
...
src/macosx/classes/sun/lwawt/PlatformWindow.java
浏览文件 @
5ff1da03
...
...
@@ -67,9 +67,9 @@ public interface PlatformWindow {
public
void
setBounds
(
int
x
,
int
y
,
int
w
,
int
h
);
/*
* Returns the
screen number
where the window is.
* Returns the
graphics device
where the window is.
*/
public
int
getScreenImOn
();
public
GraphicsDevice
getGraphicsDevice
();
/*
* Returns the location of the window.
...
...
src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java
浏览文件 @
5ff1da03
...
...
@@ -26,6 +26,7 @@
package
sun.lwawt.macosx
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
public
class
CCustomCursor
extends
Cursor
{
static
Dimension
sMaxCursorSize
;
...
...
@@ -36,7 +37,6 @@ public class CCustomCursor extends Cursor {
}
Image
fImage
;
private
boolean
isImageOk
=
false
;
Point
fHotspot
;
public
CCustomCursor
(
final
Image
cursor
,
final
Point
hotSpot
,
final
String
name
)
throws
IndexOutOfBoundsException
,
HeadlessException
{
...
...
@@ -61,21 +61,19 @@ public class CCustomCursor extends Cursor {
// Fix for bug 4212593 The Toolkit.createCustomCursor does not
// check absence of the image of cursor
// If the image is invalid, the cursor will be hidden (made completely
// transparent). In this case, getBestCursorSize() will adjust negative w and h,
// but we need to set the hotspot inside the image here.
// transparent).
if
(
tracker
.
isErrorAny
()
||
width
<
0
||
height
<
0
)
{
fHotspot
.
x
=
fHotspot
.
y
=
0
;
isImageOk
=
false
;
width
=
height
=
1
;
fImage
=
createTransparentImage
(
width
,
height
);
}
else
{
isImageOk
=
true
;
}
// Scale image to nearest supported size
final
Dimension
nativeSize
=
toolkit
.
getBestCursorSize
(
width
,
height
);
if
(
nativeSize
.
width
!=
width
||
nativeSize
.
height
!=
height
)
{
fImage
=
fImage
.
getScaledInstance
(
nativeSize
.
width
,
nativeSize
.
height
,
Image
.
SCALE_DEFAULT
);
width
=
nativeSize
.
width
;
height
=
nativeSize
.
height
;
// Scale image to nearest supported size
final
Dimension
nativeSize
=
toolkit
.
getBestCursorSize
(
width
,
height
);
if
(
nativeSize
.
width
!=
width
||
nativeSize
.
height
!=
height
)
{
fImage
=
fImage
.
getScaledInstance
(
nativeSize
.
width
,
nativeSize
.
height
,
Image
.
SCALE_DEFAULT
);
width
=
nativeSize
.
width
;
height
=
nativeSize
.
height
;
}
}
// NOTE: this was removed for 3169146, but in 1.5 the JCK tests for an exception and fails if one isn't thrown.
...
...
@@ -98,6 +96,21 @@ public class CCustomCursor extends Cursor {
}
}
private
static
BufferedImage
createTransparentImage
(
int
w
,
int
h
)
{
GraphicsEnvironment
ge
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
();
GraphicsDevice
gs
=
ge
.
getDefaultScreenDevice
();
GraphicsConfiguration
gc
=
gs
.
getDefaultConfiguration
();
BufferedImage
img
=
gc
.
createCompatibleImage
(
w
,
h
,
Transparency
.
BITMASK
);
Graphics2D
g
=
(
Graphics2D
)
img
.
getGraphics
();
g
.
setBackground
(
new
Color
(
0
,
0
,
0
,
0
));
g
.
clearRect
(
0
,
0
,
w
,
h
);
g
.
dispose
();
return
img
;
}
public
static
Dimension
getBestCursorSize
(
final
int
preferredWidth
,
final
int
preferredHeight
)
{
// With Panther, cursors have no limit on their size. So give the client their
// preferred size, but no larger than half the dimensions of the main screen
...
...
@@ -111,31 +124,26 @@ public class CCustomCursor extends Cursor {
}
// Called from native when the cursor is set
// Returns long array of [NSImage ptr, x hotspot, y hotspot]
CImage
fCImage
;
long
getImageData
()
{
if
(
fCImage
!=
null
)
{
return
fCImage
.
ptr
;
}
if
(
isImageOk
)
{
try
{
fCImage
=
CImage
.
getCreator
().
createFromImage
(
fImage
);
if
(
fCImage
==
null
)
{
isImageOk
=
false
;
return
0L
;
}
else
{
return
fCImage
.
ptr
;
}
}
catch
(
IllegalArgumentException
iae
)
{
// Silently return null - we want to hide cursor by providing an empty
// ByteArray or just null
try
{
fCImage
=
CImage
.
getCreator
().
createFromImage
(
fImage
);
if
(
fCImage
==
null
)
{
// Something unexpected happened: CCustomCursor constructor
// takes care of invalid cursor images, yet createFromImage()
// failed to do its job. Return null to keep the cursor unchanged.
return
0L
;
}
else
{
return
fCImage
.
ptr
;
}
}
catch
(
IllegalArgumentException
iae
)
{
// see comment above
return
0L
;
}
return
0L
;
}
Point
getHotSpot
()
{
...
...
src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java
浏览文件 @
5ff1da03
...
...
@@ -86,11 +86,10 @@ public class CPlatformEmbeddedFrame implements PlatformWindow {
}
@Override
public
int
getScreenImOn
()
{
public
GraphicsDevice
getGraphicsDevice
()
{
// REMIND: return the main screen for the initial implementation
CGraphicsConfig
gc
=
(
CGraphicsConfig
)
peer
.
getGraphicsConfiguration
();
CGraphicsDevice
device
=
gc
.
getDevice
();
return
device
.
getCoreGraphicsScreen
();
GraphicsEnvironment
ge
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
();
return
ge
.
getDefaultScreenDevice
();
}
@Override
...
...
src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
浏览文件 @
5ff1da03
...
...
@@ -109,8 +109,14 @@ final class CPlatformResponder {
final
long
when
=
System
.
currentTimeMillis
();
final
int
scrollType
=
MouseWheelEvent
.
WHEEL_UNIT_SCROLL
;
final
int
scrollAmount
=
1
;
int
wheelRotation
=
(
int
)
delta
;
int
signum
=
(
int
)
Math
.
signum
(
delta
);
if
(
signum
*
delta
<
1
)
{
wheelRotation
=
signum
;
}
// invert the wheelRotation for the peer
peer
.
dispatchMouseWheelEvent
(
when
,
x
,
y
,
modifiers
,
scrollType
,
scrollAmount
,
(
int
)
-
delta
,
-
delta
,
null
);
scrollAmount
,
-
wheelRotation
,
-
delta
,
null
);
}
/**
...
...
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
浏览文件 @
5ff1da03
...
...
@@ -64,7 +64,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
private
static
native
void
nativeSetEnabled
(
long
nsWindowPtr
,
boolean
isEnabled
);
private
static
native
void
nativeSynthesizeMouseEnteredExitedEvents
(
long
nsWindowPtr
);
private
static
native
int
nativeGet
ScreenNSWindowIsOn
_AppKitThread
(
long
nsWindowPtr
);
private
static
native
int
nativeGet
NSWindowDisplayID
_AppKitThread
(
long
nsWindowPtr
);
// Loger to report issues happened during execution but that do not affect functionality
private
static
final
PlatformLogger
logger
=
PlatformLogger
.
getLogger
(
"sun.lwawt.macosx.CPlatformWindow"
);
...
...
@@ -452,13 +452,18 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
return
new
Point
(
nativeBounds
.
x
,
nativeBounds
.
y
);
}
@Override
// PlatformWindow
public
int
getScreenImOn
()
{
// REMIND: we could also acquire screenID from the
// graphicsConfig.getDevice().getCoreGraphicsScreen()
// which might look a bit less natural but don't
// require new native accessor.
return
nativeGetScreenNSWindowIsOn_AppKitThread
(
getNSWindowPtr
());
@Override
public
GraphicsDevice
getGraphicsDevice
()
{
GraphicsEnvironment
ge
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
();
CGraphicsEnvironment
cge
=
(
CGraphicsEnvironment
)
ge
;
int
displayID
=
nativeGetNSWindowDisplayID_AppKitThread
(
getNSWindowPtr
());
GraphicsDevice
gd
=
cge
.
getScreenDevice
(
displayID
);
if
(
gd
==
null
)
{
// this could possibly happen during device removal
// use the default screen device in this case
gd
=
ge
.
getDefaultScreenDevice
();
}
return
gd
;
}
@Override
// PlatformWindow
...
...
src/macosx/native/sun/awt/AWTWindow.h
浏览文件 @
5ff1da03
...
...
@@ -43,6 +43,7 @@
NSSize
javaMaxSize
;
jint
styleBits
;
BOOL
isEnabled
;
NSWindow
*
nsWindow
;
}
// An instance of either AWTWindow_Normal or AWTWindow_Panel
...
...
src/macosx/native/sun/awt/AWTWindow.m
浏览文件 @
5ff1da03
...
...
@@ -1080,38 +1080,28 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMou
/*
* Class: sun_lwawt_macosx_CPlatformWindow
* Method: nativeGet
ScreenNSWindowIsOn
_AppKitThread
* Method: nativeGet
DisplayID
_AppKitThread
* Signature: (J)I
*/
JNIEXPORT
jint
JNICALL
Java_sun_lwawt_macosx_CPlatformWindow_nativeGetScreenNSWindowIsOn_1AppKitThread
JNIEXPORT
jint
JNICALL
Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindowDisplayID_1AppKitThread
(
JNIEnv
*
env
,
jclass
clazz
,
jlong
windowPtr
)
{
jint
index
=
-
1
;
jint
ret
;
// CGDirectDisplayID
JNF_COCOA_ENTER
(
env
);
AWT_ASSERT_APPKIT_THREAD
;
NSWindow
*
nsWindow
=
OBJC
(
windowPtr
);
NSScreen
*
screen
=
[
nsWindow
screen
];
//+++gdb NOTE: This is using a linear search of the screens. If it should
// prove to be a bottleneck, this can definitely be improved. However,
// many screens should prove to be the exception, rather than the rule.
NSArray
*
screens
=
[
NSScreen
screens
];
NSUInteger
i
;
for
(
i
=
0
;
i
<
[
screens
count
];
i
++
)
{
if
([[
screens
objectAtIndex
:
i
]
isEqualTo
:
screen
])
{
index
=
i
;
break
;
}
}
NSWindow
*
window
=
OBJC
(
windowPtr
);
NSScreen
*
screen
=
[
window
screen
];
NSDictionary
*
deviceDescription
=
[
screen
deviceDescription
];
NSNumber
*
displayID
=
[
deviceDescription
objectForKey
:
@"NSScreenNumber"
];
ret
=
(
jint
)[
displayID
intValue
];
JNF_COCOA_EXIT
(
env
);
return
1
;
}
return
ret
;
}
/*
* Class: sun_lwawt_macosx_CPlatformWindow
...
...
src/macosx/native/sun/awt/CGraphicsDevice.m
浏览文件 @
5ff1da03
/*
* Copyright (c) 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 201
2
, 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
...
...
@@ -25,6 +25,84 @@
#include "LWCToolkit.h"
/*
* Convert the mode string to the more convinient bits per pixel value
*/
static
int
getBPPFromModeString
(
CFStringRef
mode
)
{
if
((
CFStringCompare
(
mode
,
CFSTR
(
kIO30BitDirectPixels
),
kCFCompareCaseInsensitive
)
==
kCFCompareEqualTo
))
{
// This is a strange mode, where we using 10 bits per RGB component and pack it into 32 bits
// Java is not ready to work with this mode but we have to specify it as supported
return
30
;
}
else
if
(
CFStringCompare
(
mode
,
CFSTR
(
IO32BitDirectPixels
),
kCFCompareCaseInsensitive
)
==
kCFCompareEqualTo
)
{
return
32
;
}
else
if
(
CFStringCompare
(
mode
,
CFSTR
(
IO16BitDirectPixels
),
kCFCompareCaseInsensitive
)
==
kCFCompareEqualTo
)
{
return
16
;
}
else
if
(
CFStringCompare
(
mode
,
CFSTR
(
IO8BitIndexedPixels
),
kCFCompareCaseInsensitive
)
==
kCFCompareEqualTo
)
{
return
8
;
}
return
0
;
}
/*
* Find the best possible match in the list of display modes that we can switch to based on
* the provided parameters.
*/
static
CGDisplayModeRef
getBestModeForParameters
(
CFArrayRef
allModes
,
int
w
,
int
h
,
int
bpp
,
int
refrate
)
{
CGDisplayModeRef
bestGuess
=
NULL
;
CFIndex
numModes
=
CFArrayGetCount
(
allModes
),
n
;
int
thisBpp
=
0
;
for
(
n
=
0
;
n
<
numModes
;
n
++
)
{
CGDisplayModeRef
cRef
=
(
CGDisplayModeRef
)
CFArrayGetValueAtIndex
(
allModes
,
n
);
if
(
cRef
==
NULL
)
{
continue
;
}
CFStringRef
modeString
=
CGDisplayModeCopyPixelEncoding
(
cRef
);
thisBpp
=
getBPPFromModeString
(
modeString
);
CFRelease
(
modeString
);
if
(
thisBpp
!=
bpp
||
(
int
)
CGDisplayModeGetHeight
(
cRef
)
!=
h
||
(
int
)
CGDisplayModeGetWidth
(
cRef
)
!=
w
)
{
// One of the key parameters does not match
continue
;
}
// Refresh rate might be 0 in display mode and we ask for specific display rate
// but if we do not find exact match then 0 refresh rate might be just Ok
if
(
CGDisplayModeGetRefreshRate
(
cRef
)
==
refrate
)
{
// Exact match
return
cRef
;
}
if
(
CGDisplayModeGetRefreshRate
(
cRef
)
==
0
)
{
// Not exactly what was asked for, but may fit our needs if we don't find an exact match
bestGuess
=
cRef
;
}
}
return
bestGuess
;
}
/*
* Create a new java.awt.DisplayMode instance based on provided CGDisplayModeRef
*/
static
jobject
createJavaDisplayMode
(
CGDisplayModeRef
mode
,
JNIEnv
*
env
,
jint
displayID
)
{
jobject
ret
=
NULL
;
jint
h
,
w
,
bpp
,
refrate
;
JNF_COCOA_ENTER
(
env
);
CFStringRef
currentBPP
=
CGDisplayModeCopyPixelEncoding
(
mode
);
bpp
=
getBPPFromModeString
(
currentBPP
);
refrate
=
CGDisplayModeGetRefreshRate
(
mode
);
h
=
CGDisplayModeGetHeight
(
mode
);
w
=
CGDisplayModeGetWidth
(
mode
);
CFRelease
(
currentBPP
);
static
JNF_CLASS_CACHE
(
jc_DisplayMode
,
"java/awt/DisplayMode"
);
static
JNF_CTOR_CACHE
(
jc_DisplayMode_ctor
,
jc_DisplayMode
,
"(IIII)V"
);
ret
=
JNFNewObject
(
env
,
jc_DisplayMode_ctor
,
w
,
h
,
bpp
,
refrate
);
JNF_COCOA_EXIT
(
env
);
return
ret
;
}
/*
* Class: sun_awt_CGraphicsDevice
* Method: nativeGetXResolution
...
...
@@ -62,3 +140,89 @@ Java_sun_awt_CGraphicsDevice_nativeGetYResolution
jfloat
dpi
=
rect
.
size
.
height
/
inches
;
return
dpi
;
}
/*
* Class: sun_awt_CGraphicsDevice
* Method: nativeSetDisplayMode
* Signature: (IIIII)V
*/
JNIEXPORT
void
JNICALL
Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode
(
JNIEnv
*
env
,
jclass
class
,
jint
displayID
,
jint
w
,
jint
h
,
jint
bpp
,
jint
refrate
)
{
JNF_COCOA_ENTER
(
env
);
CFArrayRef
allModes
=
CGDisplayCopyAllDisplayModes
(
displayID
,
NULL
);
CGDisplayModeRef
closestMatch
=
getBestModeForParameters
(
allModes
,
(
int
)
w
,
(
int
)
h
,
(
int
)
bpp
,
(
int
)
refrate
);
if
(
closestMatch
!=
NULL
)
{
[
JNFRunLoop
performOnMainThreadWaiting
:
YES
withBlock
:
^
(){
CGDisplayConfigRef
config
;
CGError
retCode
=
CGBeginDisplayConfiguration
(
&
config
);
if
(
retCode
==
kCGErrorSuccess
)
{
CGConfigureDisplayWithDisplayMode
(
config
,
displayID
,
closestMatch
,
NULL
);
CGCompleteDisplayConfiguration
(
config
,
kCGConfigureForAppOnly
);
if
(
config
!=
NULL
)
{
CFRelease
(
config
);
}
}
}];
}
CFRelease
(
allModes
);
JNF_COCOA_EXIT
(
env
);
}
/*
* Class: sun_awt_CGraphicsDevice
* Method: nativeGetDisplayMode
* Signature: (I)Ljava/awt/DisplayMode
*/
JNIEXPORT
jobject
JNICALL
Java_sun_awt_CGraphicsDevice_nativeGetDisplayMode
(
JNIEnv
*
env
,
jclass
class
,
jint
displayID
)
{
jobject
ret
=
NULL
;
CGDisplayModeRef
currentMode
=
CGDisplayCopyDisplayMode
(
displayID
);
ret
=
createJavaDisplayMode
(
currentMode
,
env
,
displayID
);
CGDisplayModeRelease
(
currentMode
);
return
ret
;
}
/*
* Class: sun_awt_CGraphicsDevice
* Method: nativeGetDisplayMode
* Signature: (I)[Ljava/awt/DisplayModes
*/
JNIEXPORT
jobjectArray
JNICALL
Java_sun_awt_CGraphicsDevice_nativeGetDisplayModes
(
JNIEnv
*
env
,
jclass
class
,
jint
displayID
)
{
jobjectArray
jreturnArray
=
NULL
;
JNF_COCOA_ENTER
(
env
);
CFArrayRef
allModes
=
CGDisplayCopyAllDisplayModes
(
displayID
,
NULL
);
CFIndex
numModes
=
CFArrayGetCount
(
allModes
);
static
JNF_CLASS_CACHE
(
jc_DisplayMode
,
"java/awt/DisplayMode"
);
jreturnArray
=
JNFNewObjectArray
(
env
,
&
jc_DisplayMode
,
(
jsize
)
numModes
);
if
(
!
jreturnArray
)
{
NSLog
(
@"CGraphicsDevice can't create java array of DisplayMode objects"
);
return
nil
;
}
CFIndex
n
;
for
(
n
=
0
;
n
<
numModes
;
n
++
)
{
CGDisplayModeRef
cRef
=
(
CGDisplayModeRef
)
CFArrayGetValueAtIndex
(
allModes
,
n
);
if
(
cRef
!=
NULL
)
{
jobject
oneMode
=
createJavaDisplayMode
(
cRef
,
env
,
displayID
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
jreturnArray
,
n
,
oneMode
);
if
((
*
env
)
->
ExceptionOccurred
(
env
))
{
(
*
env
)
->
ExceptionDescribe
(
env
);
(
*
env
)
->
ExceptionClear
(
env
);
continue
;
}
(
*
env
)
->
DeleteLocalRef
(
env
,
oneMode
);
}
}
CFRelease
(
allModes
);
JNF_COCOA_EXIT
(
env
);
return
jreturnArray
;
}
src/share/classes/java/awt/KeyboardFocusManager.java
浏览文件 @
5ff1da03
...
...
@@ -561,7 +561,7 @@ public abstract class KeyboardFocusManager
rootAncestor
=
(
Container
)
focusOwner
;
}
if
(
rootAncestor
!=
null
)
{
setGlobalCurrentFocusCycleRoot
(
rootAncestor
);
setGlobalCurrentFocusCycleRoot
Priv
(
rootAncestor
);
}
}
...
...
src/share/classes/javax/swing/JPopupMenu.java
浏览文件 @
5ff1da03
...
...
@@ -826,7 +826,7 @@ public class JPopupMenu extends JComponent implements Accessible,MenuElement {
popupFactory
.
setPopupType
(
PopupFactory
.
LIGHT_WEIGHT_POPUP
);
}
else
{
popupFactory
.
setPopupType
(
PopupFactory
.
MEDIUM
_WEIGHT_POPUP
);
popupFactory
.
setPopupType
(
PopupFactory
.
HEAVY
_WEIGHT_POPUP
);
}
// adjust the location of the popup
...
...
@@ -853,6 +853,11 @@ public class JPopupMenu extends JComponent implements Accessible,MenuElement {
/**
* Sets the location of the upper left corner of the
* popup menu using x, y coordinates.
* <p>
* The method changes the geometry-related data. Therefore,
* the native windowing system may ignore such requests, or it may modify
* the requested data, so that the {@code JPopupMenu} object is placed and sized
* in a way that corresponds closely to the desktop settings.
*
* @param x the x coordinate of the popup's new position
* in the screen's coordinate space
...
...
src/share/classes/javax/swing/PopupFactory.java
浏览文件 @
5ff1da03
...
...
@@ -203,12 +203,6 @@ public class PopupFactory {
popupType
=
HEAVY_WEIGHT_POPUP
;
break
;
}
}
else
if
(
c
instanceof
Window
)
{
Window
w
=
(
Window
)
c
;
if
(!
w
.
isOpaque
()
||
w
.
getOpacity
()
<
1
||
w
.
getShape
()
!=
null
)
{
popupType
=
HEAVY_WEIGHT_POPUP
;
break
;
}
}
c
=
c
.
getParent
();
}
...
...
src/share/demo/jfc/TransparentRuler/transparentruler/Ruler.java
浏览文件 @
5ff1da03
...
...
@@ -134,6 +134,9 @@ public class Ruler extends JFrame {
{
jPopupMenu
.
add
(
new
JMenuItem
(
exitAction
));
// To avoid popup cutting by main window shape forbid light-weight popups
jPopupMenu
.
setLightWeightPopupEnabled
(
false
);
}
/**
...
...
src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
浏览文件 @
5ff1da03
...
...
@@ -721,15 +721,17 @@ abstract class XDecoratedPeer extends XWindowPeer {
// Location, Client size + insets
newLocation
=
new
Point
(
xe
.
get_x
()
-
currentInsets
.
left
,
xe
.
get_y
()
-
currentInsets
.
top
);
}
else
{
// CDE/MWM/Metacity/Sawfish bug: if shell is resized using
// top or left border, we don't receive synthetic
// ConfigureNotify, only the one from X with zero
// coordinates. This is the workaround to get real
// location, 6261336
// ICCCM 4.1.5 states that a real ConfigureNotify will be sent when
// a window is resized but the client can not tell if the window was
// moved or not. The client should consider the position as unkown
// and use TranslateCoordinates to find the actual position.
//
// TODO this should be the default for every case.
switch
(
XWM
.
getWMID
())
{
case
XWM
.
CDE_WM
:
case
XWM
.
MOTIF_WM
:
case
XWM
.
METACITY_WM
:
case
XWM
.
MUTTER_WM
:
case
XWM
.
SAWFISH_WM
:
{
Point
xlocation
=
queryXLocation
();
...
...
src/solaris/classes/sun/awt/X11/XKeysym.java
浏览文件 @
5ff1da03
...
...
@@ -1416,6 +1416,7 @@ public class XKeysym {
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Meta_L
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_META
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_LEFT
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Meta_R
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_META
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_RIGHT
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Caps_Lock
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_CAPS_LOCK
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Shift_Lock
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_CAPS_LOCK
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
/* Misc Functions */
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Print
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_PRINTSCREEN
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
...
...
@@ -1590,6 +1591,21 @@ public class XKeysym {
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Kanji
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_CONVERT
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
/* Type 5c Japanese keyboard: nihongo */
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Henkan_Mode
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_INPUT_METHOD_ON_OFF
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Eisu_Shift
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_ALPHANUMERIC
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Eisu_toggle
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_ALPHANUMERIC
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Zenkaku
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_FULL_WIDTH
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Hankaku
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_HALF_WIDTH
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Hiragana
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_HIRAGANA
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Katakana
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_KATAKANA
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Romaji
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_JAPANESE_ROMAN
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Kana_Shift
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_KANA
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Kana_Lock
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_KANA_LOCK
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Muhenkan
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_NONCONVERT
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Zen_Koho
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_ALL_CANDIDATES
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Kanji_Bangou
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_CODE_INPUT
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
keysym2JavaKeycodeHash
.
put
(
Long
.
valueOf
(
XKeySymConstants
.
XK_Mae_Koho
),
new
Keysym2JavaKeycode
(
java
.
awt
.
event
.
KeyEvent
.
VK_PREVIOUS_CANDIDATE
,
java
.
awt
.
event
.
KeyEvent
.
KEY_LOCATION_STANDARD
));
/* VK_KANA_LOCK is handled separately because it generates the
* same keysym as ALT_GRAPH in spite of its different behavior.
*/
...
...
src/solaris/classes/sun/awt/X11/XLabelPeer.java
浏览文件 @
5ff1da03
...
...
@@ -141,7 +141,7 @@ class XLabelPeer extends XComponentPeer implements LabelPeer {
}
public
void
setFont
(
Font
f
)
{
super
.
setFont
(
f
);
target
.
repaint
();
repaint
();
}
public
void
setAlignment
(
int
align
)
{
...
...
src/solaris/classes/sun/awt/X11/XWM.java
浏览文件 @
5ff1da03
...
...
@@ -102,7 +102,8 @@ final class XWM
METACITY_WM
=
11
,
COMPIZ_WM
=
12
,
LG3D_WM
=
13
,
CWM_WM
=
14
;
CWM_WM
=
14
,
MUTTER_WM
=
15
;
public
String
toString
()
{
switch
(
WMID
)
{
case
NO_WM:
...
...
@@ -131,6 +132,8 @@ final class XWM
return
"LookingGlass"
;
case
CWM_WM:
return
"CWM"
;
case
MUTTER_WM:
return
"Mutter"
;
case
UNDETERMINED_WM:
default
:
return
"Undetermined WM"
;
...
...
@@ -573,6 +576,10 @@ final class XWM
// getIntProperty(XToolkit.getDefaultRootWindow(), XAtom.XA_CARDINAL)) == 0);
}
static
boolean
isMutter
()
{
return
isNetWMName
(
"Mutter"
);
}
static
boolean
isNonReparentingWM
()
{
return
(
XWM
.
getWMID
()
==
XWM
.
COMPIZ_WM
||
XWM
.
getWMID
()
==
XWM
.
LG3D_WM
||
XWM
.
getWMID
()
==
XWM
.
CWM_WM
);
}
...
...
@@ -742,6 +749,8 @@ final class XWM
awt_wmgr
=
XWM
.
ENLIGHTEN_WM
;
}
else
if
(
isMetacity
())
{
awt_wmgr
=
XWM
.
METACITY_WM
;
}
else
if
(
isMutter
())
{
awt_wmgr
=
XWM
.
MUTTER_WM
;
}
else
if
(
isSawfish
())
{
awt_wmgr
=
XWM
.
SAWFISH_WM
;
}
else
if
(
isKDE2
())
{
...
...
src/solaris/native/java/lang/java_props_md.c
浏览文件 @
5ff1da03
...
...
@@ -406,7 +406,7 @@ GetJavaProperties(JNIEnv *env)
#ifdef MACOSX
break
;
default:
sprops
.
graphics_env
=
"sun.
awt
.HeadlessGraphicsEnvironment"
;
sprops
.
graphics_env
=
"sun.
java2d
.HeadlessGraphicsEnvironment"
;
break
;
}
#endif
...
...
src/solaris/native/sun/awt/swing_GTKEngine.c
浏览文件 @
5ff1da03
...
...
@@ -323,9 +323,8 @@ Java_com_sun_java_swing_plaf_gtk_GTKEngine_nativeFinishPainting(
JNIEXPORT
void
JNICALL
Java_com_sun_java_swing_plaf_gtk_GTKEngine_native_1switch_1theme
(
JNIEnv
*
env
,
jobject
this
)
{
fp_gdk_threads_enter
();
// Note that flush_gtk_event_loop takes care of locks (7053002)
flush_gtk_event_loop
();
fp_gdk_threads_leave
();
}
/*
...
...
src/solaris/native/sun/xawt/XWindow.c
浏览文件 @
5ff1da03
...
...
@@ -175,6 +175,7 @@ KeymapEntry keymapTable[] =
{
java_awt_event_KeyEvent_VK_META
,
XK_Meta_L
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_LEFT
},
{
java_awt_event_KeyEvent_VK_META
,
XK_Meta_R
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_RIGHT
},
{
java_awt_event_KeyEvent_VK_CAPS_LOCK
,
XK_Caps_Lock
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_CAPS_LOCK
,
XK_Shift_Lock
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
/* Misc Functions */
{
java_awt_event_KeyEvent_VK_PRINTSCREEN
,
XK_Print
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
...
...
@@ -350,6 +351,24 @@ KeymapEntry keymapTable[] =
* same keysym as ALT_GRAPH in spite of its different behavior.
*/
{
java_awt_event_KeyEvent_VK_ALL_CANDIDATES
,
XK_Zen_Koho
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_ALPHANUMERIC
,
XK_Eisu_Shift
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_ALPHANUMERIC
,
XK_Eisu_toggle
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_CODE_INPUT
,
XK_Kanji_Bangou
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_FULL_WIDTH
,
XK_Zenkaku
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_HALF_WIDTH
,
XK_Hankaku
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_HIRAGANA
,
XK_Hiragana
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_JAPANESE_HIRAGANA
,
XK_Hiragana
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_KATAKANA
,
XK_Katakana
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_JAPANESE_KATAKANA
,
XK_Katakana
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_JAPANESE_ROMAN
,
XK_Romaji
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_KANA
,
XK_Kana_Shift
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_KANA_LOCK
,
XK_Kana_Lock
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_KANJI
,
XK_Kanji
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_NONCONVERT
,
XK_Muhenkan
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_PREVIOUS_CANDIDATE
,
XK_Mae_Koho
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_ROMAN_CHARACTERS
,
XK_Romaji
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_COMPOSE
,
XK_Multi_key
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
{
java_awt_event_KeyEvent_VK_ALT_GRAPH
,
XK_Mode_switch
,
FALSE
,
java_awt_event_KeyEvent_KEY_LOCATION_STANDARD
},
...
...
src/windows/native/sun/windows/awt_Component.cpp
浏览文件 @
5ff1da03
...
...
@@ -558,6 +558,8 @@ AwtComponent::CreateHWnd(JNIEnv *env, LPCWSTR title,
m_hwnd
=
hwnd
;
::
ImmAssociateContext
(
m_hwnd
,
NULL
);
SetDrawState
((
jint
)
JAWT_LOCK_SURFACE_CHANGED
|
(
jint
)
JAWT_LOCK_BOUNDS_CHANGED
|
(
jint
)
JAWT_LOCK_CLIP_CHANGED
);
...
...
src/windows/native/sun/windows/awt_TextArea.cpp
浏览文件 @
5ff1da03
...
...
@@ -74,135 +74,10 @@ void AwtTextArea::Dispose()
AwtTextComponent
::
Dispose
();
}
LPCTSTR
AwtTextArea
::
GetClassName
()
{
static
BOOL
richedLibraryLoaded
=
FALSE
;
if
(
!
richedLibraryLoaded
)
{
JDK_LoadSystemLibrary
(
"RICHED20.DLL"
);
richedLibraryLoaded
=
TRUE
;
}
return
RICHEDIT_CLASS
;
}
/* Create a new AwtTextArea object and window. */
AwtTextArea
*
AwtTextArea
::
Create
(
jobject
peer
,
jobject
parent
)
{
JNIEnv
*
env
=
(
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
);
jobject
target
=
NULL
;
AwtTextArea
*
c
=
NULL
;
try
{
if
(
env
->
EnsureLocalCapacity
(
1
)
<
0
)
{
return
NULL
;
}
PDATA
pData
;
AwtCanvas
*
awtParent
;
JNI_CHECK_PEER_GOTO
(
parent
,
done
);
awtParent
=
(
AwtCanvas
*
)
pData
;
JNI_CHECK_NULL_GOTO
(
awtParent
,
"null awtParent"
,
done
);
target
=
env
->
GetObjectField
(
peer
,
AwtObject
::
targetID
);
JNI_CHECK_NULL_GOTO
(
target
,
"null target"
,
done
);
c
=
new
AwtTextArea
();
{
/* Adjust style for scrollbar visibility and word wrap */
DWORD
scroll_style
;
jint
scrollbarVisibility
=
env
->
GetIntField
(
target
,
AwtTextArea
::
scrollbarVisibilityID
);
switch
(
scrollbarVisibility
)
{
case
java_awt_TextArea_SCROLLBARS_NONE
:
scroll_style
=
ES_AUTOVSCROLL
;
break
;
case
java_awt_TextArea_SCROLLBARS_VERTICAL_ONLY
:
scroll_style
=
WS_VSCROLL
|
ES_AUTOVSCROLL
;
break
;
case
java_awt_TextArea_SCROLLBARS_HORIZONTAL_ONLY
:
scroll_style
=
WS_HSCROLL
|
ES_AUTOHSCROLL
|
ES_AUTOVSCROLL
;
break
;
case
java_awt_TextArea_SCROLLBARS_BOTH
:
scroll_style
=
WS_VSCROLL
|
WS_HSCROLL
|
ES_AUTOVSCROLL
|
ES_AUTOHSCROLL
;
break
;
}
/*
* Specify ES_DISABLENOSCROLL - RichEdit control style to disable
* scrollbars instead of hiding them when not needed.
*/
DWORD
style
=
WS_CHILD
|
WS_CLIPSIBLINGS
|
ES_LEFT
|
ES_MULTILINE
|
ES_WANTRETURN
|
scroll_style
|
ES_DISABLENOSCROLL
;
DWORD
exStyle
=
WS_EX_CLIENTEDGE
;
if
(
GetRTL
())
{
exStyle
|=
WS_EX_RIGHT
|
WS_EX_LEFTSCROLLBAR
;
if
(
GetRTLReadingOrder
())
exStyle
|=
WS_EX_RTLREADING
;
}
jint
x
=
env
->
GetIntField
(
target
,
AwtComponent
::
xID
);
jint
y
=
env
->
GetIntField
(
target
,
AwtComponent
::
yID
);
jint
width
=
env
->
GetIntField
(
target
,
AwtComponent
::
widthID
);
jint
height
=
env
->
GetIntField
(
target
,
AwtComponent
::
heightID
);
c
->
CreateHWnd
(
env
,
L""
,
style
,
exStyle
,
x
,
y
,
width
,
height
,
awtParent
->
GetHWnd
(),
reinterpret_cast
<
HMENU
>
(
static_cast
<
INT_PTR
>
(
awtParent
->
CreateControlID
())),
::
GetSysColor
(
COLOR_WINDOWTEXT
),
::
GetSysColor
(
COLOR_WINDOW
),
peer
);
// Fix for 4753116.
// If it is not win95 (we are using Richedit 2.0)
// we set plain text mode, in which the control is
// similar to a standard edit control:
// - The text in a plain text control can have only
// one format.
// - The user cannot paste rich text formats, such as RTF
// or embedded objects into a plain text control.
// - Rich text mode controls always have a default
// end-of-document marker or carriage return,
// to format paragraphs.
// kdm@sparc.spb.su
c
->
SendMessage
(
EM_SETTEXTMODE
,
TM_PLAINTEXT
,
0
);
c
->
m_backgroundColorSet
=
TRUE
;
/* suppress inheriting parent's color. */
c
->
UpdateBackground
(
env
,
target
);
c
->
SendMessage
(
EM_SETMARGINS
,
EC_LEFTMARGIN
|
EC_RIGHTMARGIN
,
MAKELPARAM
(
1
,
1
));
/*
* Fix for BugTraq Id 4260109.
* Set the text limit to the maximum.
* Use EM_EXLIMITTEXT for RichEdit controls.
* For some reason RichEdit 1.0 becomes read-only if the
* specified limit is greater than 0x7FFFFFFD.
*/
c
->
SendMessage
(
EM_EXLIMITTEXT
,
0
,
0x7FFFFFFD
);
/* Unregister RichEdit built-in drop target. */
VERIFY
(
::
RevokeDragDrop
(
c
->
GetHWnd
())
!=
DRAGDROP_E_INVALIDHWND
);
/* To enforce CF_TEXT format for paste operations. */
VERIFY
(
c
->
SendMessage
(
EM_SETOLECALLBACK
,
0
,
(
LPARAM
)
&
GetOleCallback
()));
c
->
SendMessage
(
EM_SETEVENTMASK
,
0
,
ENM_CHANGE
);
}
}
catch
(...)
{
env
->
DeleteLocalRef
(
target
);
throw
;
}
done:
env
->
DeleteLocalRef
(
target
);
return
c
;
return
(
AwtTextArea
*
)
AwtTextComponent
::
Create
(
peer
,
parent
,
true
);
}
void
AwtTextArea
::
EditSetSel
(
CHARRANGE
&
cr
)
{
...
...
@@ -220,11 +95,6 @@ void AwtTextArea::EditGetSel(CHARRANGE &cr) {
SendMessage
(
EM_EXGETSEL
,
0
,
reinterpret_cast
<
LPARAM
>
(
&
cr
));
}
LONG
AwtTextArea
::
EditGetCharFromPos
(
POINT
&
pt
)
{
return
static_cast
<
LONG
>
(
SendMessage
(
EM_CHARFROMPOS
,
0
,
reinterpret_cast
<
LPARAM
>
(
&
pt
)));
}
/* Count how many '\n's are there in jStr */
size_t
AwtTextArea
::
CountNewLines
(
JNIEnv
*
env
,
jstring
jStr
,
size_t
maxlen
)
{
...
...
@@ -253,34 +123,6 @@ size_t AwtTextArea::CountNewLines(JNIEnv *env, jstring jStr, size_t maxlen)
BOOL
AwtTextArea
::
InheritsNativeMouseWheelBehavior
()
{
return
true
;}
MsgRouting
AwtTextArea
::
PreProcessMsg
(
MSG
&
msg
)
{
MsgRouting
mr
=
mrPassAlong
;
static
BOOL
bPassAlongWmLButtonUp
=
TRUE
;
if
(
msg
.
message
==
WM_LBUTTONDBLCLK
)
{
bPassAlongWmLButtonUp
=
FALSE
;
}
/*
* For some reason RichEdit 1.0 filters out WM_LBUTTONUP after
* WM_LBUTTONDBLCLK. To work around this "feature" we send WM_LBUTTONUP
* directly to the window procedure and consume instead of passing it
* to the next hook.
*/
if
(
msg
.
message
==
WM_LBUTTONUP
&&
bPassAlongWmLButtonUp
==
FALSE
)
{
SendMessage
(
WM_LBUTTONUP
,
msg
.
wParam
,
msg
.
lParam
);
bPassAlongWmLButtonUp
=
TRUE
;
mr
=
mrConsume
;
}
if
(
mr
==
mrPassAlong
)
{
mr
=
AwtComponent
::
PreProcessMsg
(
msg
);
}
return
mr
;
}
LRESULT
AwtTextArea
::
WindowProc
(
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
...
...
@@ -800,54 +642,6 @@ AwtTextArea::HandleEvent(MSG *msg, BOOL synthetic)
return
returnVal
;
}
/*
* WM_CTLCOLOR is not sent by rich edit controls.
* Use EM_SETCHARFORMAT and EM_SETBKGNDCOLOR to set
* respectively foreground and background color.
*/
void
AwtTextArea
::
SetColor
(
COLORREF
c
)
{
AwtComponent
::
SetColor
(
c
);
CHARFORMAT
cf
;
memset
(
&
cf
,
0
,
sizeof
(
cf
));
cf
.
cbSize
=
sizeof
(
cf
);
cf
.
dwMask
=
CFM_COLOR
;
cf
.
crTextColor
=
::
IsWindowEnabled
(
GetHWnd
())
?
GetColor
()
:
::
GetSysColor
(
COLOR_3DSHADOW
);
/*
* The documentation for EM_GETCHARFORMAT is not exactly
* correct. It appears that wParam has the same meaning
* as for EM_SETCHARFORMAT. Our task is to secure that
* all the characters in the control have the required
* formatting. That's why we use SCF_ALL.
*/
VERIFY
(
SendMessage
(
EM_SETCHARFORMAT
,
SCF_ALL
,
(
LPARAM
)
&
cf
));
VERIFY
(
SendMessage
(
EM_SETCHARFORMAT
,
SCF_DEFAULT
,
(
LPARAM
)
&
cf
));
}
/*
* In responce to EM_SETBKGNDCOLOR rich edit changes
* its bg color and repaints itself so we don't need
* to force repaint.
*/
void
AwtTextArea
::
SetBackgroundColor
(
COLORREF
c
)
{
AwtComponent
::
SetBackgroundColor
(
c
);
SendMessage
(
EM_SETBKGNDCOLOR
,
(
WPARAM
)
FALSE
,
(
LPARAM
)
GetBackgroundColor
());
}
/*
* Disabled edit control has grayed foreground.
* Disabled RichEdit 1.0 control has original foreground.
* Thus we have to set grayed foreground manually.
*/
void
AwtTextArea
::
Enable
(
BOOL
bEnable
)
{
AwtComponent
::
Enable
(
bEnable
);
SetColor
(
GetColor
());
}
/* Fix for 4776535, 4648702
* If width is 0 or 1 Windows hides the horizontal scroll bar even
...
...
@@ -1048,133 +842,3 @@ Java_sun_awt_windows_WTextAreaPeer_insertText(JNIEnv *env, jobject self,
}
/* extern "C" */
AwtTextArea
::
OleCallback
AwtTextArea
::
sm_oleCallback
;
/************************************************************************
* Inner class OleCallback definition.
*/
AwtTextArea
::
OleCallback
::
OleCallback
()
{
m_refs
=
0
;
AddRef
();
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
QueryInterface
(
REFIID
riid
,
LPVOID
*
ppvObj
)
{
TRY
;
if
(
::
IsEqualIID
(
riid
,
IID_IUnknown
))
{
*
ppvObj
=
(
void
__RPC_FAR
*
__RPC_FAR
)(
IUnknown
*
)
this
;
AddRef
();
return
S_OK
;
}
else
if
(
::
IsEqualIID
(
riid
,
IID_IRichEditOleCallback
))
{
*
ppvObj
=
(
void
__RPC_FAR
*
__RPC_FAR
)(
IRichEditOleCallback
*
)
this
;
AddRef
();
return
S_OK
;
}
else
{
*
ppvObj
=
NULL
;
return
E_NOINTERFACE
;
}
CATCH_BAD_ALLOC_RET
(
E_OUTOFMEMORY
);
}
STDMETHODIMP_
(
ULONG
)
AwtTextArea
::
OleCallback
::
AddRef
()
{
return
++
m_refs
;
}
STDMETHODIMP_
(
ULONG
)
AwtTextArea
::
OleCallback
::
Release
()
{
int
refs
;
if
((
refs
=
--
m_refs
)
==
0
)
delete
this
;
return
(
ULONG
)
refs
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
GetNewStorage
(
LPSTORAGE
FAR
*
ppstg
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
GetInPlaceContext
(
LPOLEINPLACEFRAME
FAR
*
ppipframe
,
LPOLEINPLACEUIWINDOW
FAR
*
ppipuiDoc
,
LPOLEINPLACEFRAMEINFO
pipfinfo
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
ShowContainerUI
(
BOOL
fShow
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
QueryInsertObject
(
LPCLSID
pclsid
,
LPSTORAGE
pstg
,
LONG
cp
)
{
return
NOERROR
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
DeleteObject
(
LPOLEOBJECT
poleobj
)
{
return
NOERROR
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
QueryAcceptData
(
LPDATAOBJECT
pdataobj
,
CLIPFORMAT
*
pcfFormat
,
DWORD
reco
,
BOOL
fReally
,
HGLOBAL
hMetaPict
)
{
if
(
reco
==
RECO_PASTE
)
{
// If CF_TEXT format is available edit controls will select it,
// otherwise if it is CF_UNICODETEXT is available it will be
// selected, otherwise if CF_OEMTEXT is available it will be selected.
if
(
::
IsClipboardFormatAvailable
(
CF_TEXT
))
{
*
pcfFormat
=
CF_TEXT
;
}
else
if
(
::
IsClipboardFormatAvailable
(
CF_UNICODETEXT
))
{
*
pcfFormat
=
CF_UNICODETEXT
;
}
else
if
(
::
IsClipboardFormatAvailable
(
CF_OEMTEXT
))
{
*
pcfFormat
=
CF_OEMTEXT
;
}
else
{
// Don't allow rich edit to paste clipboard data
// in other formats.
*
pcfFormat
=
CF_TEXT
;
}
}
return
NOERROR
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
ContextSensitiveHelp
(
BOOL
fEnterMode
)
{
return
NOERROR
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
GetClipboardData
(
CHARRANGE
*
pchrg
,
DWORD
reco
,
LPDATAOBJECT
*
ppdataobj
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
GetDragDropEffect
(
BOOL
fDrag
,
DWORD
grfKeyState
,
LPDWORD
pdwEffect
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextArea
::
OleCallback
::
GetContextMenu
(
WORD
seltype
,
LPOLEOBJECT
lpoleobj
,
CHARRANGE
FAR
*
lpchrg
,
HMENU
FAR
*
lphmenu
)
{
return
E_NOTIMPL
;
}
src/windows/native/sun/windows/awt_TextArea.h
浏览文件 @
5ff1da03
...
...
@@ -51,15 +51,11 @@ public:
virtual
void
Dispose
();
LPCTSTR
GetClassName
();
static
AwtTextArea
*
Create
(
jobject
self
,
jobject
parent
);
static
size_t
CountNewLines
(
JNIEnv
*
env
,
jstring
jStr
,
size_t
maxlen
);
static
size_t
GetALength
(
JNIEnv
*
env
,
jstring
jStr
,
size_t
maxlen
);
MsgRouting
PreProcessMsg
(
MSG
&
msg
);
LRESULT
WindowProc
(
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
);
static
LRESULT
CALLBACK
EditProc
(
HWND
hWnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
);
...
...
@@ -72,9 +68,6 @@ public:
INLINE
void
SetIgnoreEnChange
(
BOOL
b
)
{
m_bIgnoreEnChange
=
b
;
}
virtual
void
SetColor
(
COLORREF
c
);
virtual
void
SetBackgroundColor
(
COLORREF
c
);
virtual
void
Enable
(
BOOL
bEnable
);
virtual
BOOL
InheritsNativeMouseWheelBehavior
();
virtual
void
Reshape
(
int
x
,
int
y
,
int
w
,
int
h
);
...
...
@@ -87,40 +80,8 @@ public:
protected:
/*****************************************************************
* Inner class OleCallback declaration.
*/
class
OleCallback
:
public
IRichEditOleCallback
{
public:
OleCallback
();
STDMETHODIMP
QueryInterface
(
REFIID
riid
,
LPVOID
*
ppvObj
);
STDMETHODIMP_
(
ULONG
)
AddRef
();
STDMETHODIMP_
(
ULONG
)
Release
();
STDMETHODIMP
GetNewStorage
(
LPSTORAGE
FAR
*
ppstg
);
STDMETHODIMP
GetInPlaceContext
(
LPOLEINPLACEFRAME
FAR
*
ppipframe
,
LPOLEINPLACEUIWINDOW
FAR
*
ppipuiDoc
,
LPOLEINPLACEFRAMEINFO
pipfinfo
);
STDMETHODIMP
ShowContainerUI
(
BOOL
fShow
);
STDMETHODIMP
QueryInsertObject
(
LPCLSID
pclsid
,
LPSTORAGE
pstg
,
LONG
cp
);
STDMETHODIMP
DeleteObject
(
LPOLEOBJECT
poleobj
);
STDMETHODIMP
QueryAcceptData
(
LPDATAOBJECT
pdataobj
,
CLIPFORMAT
*
pcfFormat
,
DWORD
reco
,
BOOL
fReally
,
HGLOBAL
hMetaPict
);
STDMETHODIMP
ContextSensitiveHelp
(
BOOL
fEnterMode
);
STDMETHODIMP
GetClipboardData
(
CHARRANGE
*
pchrg
,
DWORD
reco
,
LPDATAOBJECT
*
ppdataobj
);
STDMETHODIMP
GetDragDropEffect
(
BOOL
fDrag
,
DWORD
grfKeyState
,
LPDWORD
pdwEffect
);
STDMETHODIMP
GetContextMenu
(
WORD
seltype
,
LPOLEOBJECT
poleobj
,
CHARRANGE
FAR
*
pchrg
,
HMENU
FAR
*
phmenu
);
private:
ULONG
m_refs
;
// Reference count
};
//OleCallback class
INLINE
static
OleCallback
&
GetOleCallback
()
{
return
sm_oleCallback
;
}
void
EditSetSel
(
CHARRANGE
&
cr
);
void
EditGetSel
(
CHARRANGE
&
cr
);
LONG
EditGetCharFromPos
(
POINT
&
pt
);
private:
// RichEdit 1.0 control generates EN_CHANGE notifications not only
// on text changes, but also on any character formatting change.
...
...
@@ -140,8 +101,6 @@ protected:
LONG
m_lVDeltaAccum
;
static
OleCallback
sm_oleCallback
;
};
#endif
/* AWT_TEXTAREA_H */
src/windows/native/sun/windows/awt_TextComponent.cpp
浏览文件 @
5ff1da03
...
...
@@ -25,6 +25,8 @@
#include "awt_Toolkit.h"
#include "awt_TextComponent.h"
#include "awt_TextArea.h"
#include "awt_TextField.h"
#include "awt_Canvas.h"
#include "jni.h"
...
...
@@ -70,7 +72,152 @@ AwtTextComponent::AwtTextComponent() {
}
LPCTSTR
AwtTextComponent
::
GetClassName
()
{
return
TEXT
(
"EDIT"
);
/* System provided edit control class */
static
BOOL
richedLibraryLoaded
=
FALSE
;
if
(
!
richedLibraryLoaded
)
{
JDK_LoadSystemLibrary
(
"RICHED20.DLL"
);
richedLibraryLoaded
=
TRUE
;
}
return
RICHEDIT_CLASS
;
}
/* Create a new AwtTextArea or AwtTextField object and window. */
AwtTextComponent
*
AwtTextComponent
::
Create
(
jobject
peer
,
jobject
parent
,
BOOL
isMultiline
)
{
JNIEnv
*
env
=
(
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
);
jobject
target
=
NULL
;
AwtTextComponent
*
c
=
NULL
;
try
{
if
(
env
->
EnsureLocalCapacity
(
1
)
<
0
)
{
return
NULL
;
}
PDATA
pData
;
AwtCanvas
*
awtParent
;
JNI_CHECK_PEER_GOTO
(
parent
,
done
);
awtParent
=
(
AwtCanvas
*
)
pData
;
JNI_CHECK_NULL_GOTO
(
awtParent
,
"null awtParent"
,
done
);
target
=
env
->
GetObjectField
(
peer
,
AwtObject
::
targetID
);
JNI_CHECK_NULL_GOTO
(
target
,
"null target"
,
done
);
if
(
isMultiline
){
c
=
new
AwtTextArea
();
}
else
{
c
=
new
AwtTextField
();
}
{
/* Adjust style for scrollbar visibility and word wrap */
DWORD
scroll_style
;
if
(
isMultiline
){
jint
scrollbarVisibility
=
env
->
GetIntField
(
target
,
AwtTextArea
::
scrollbarVisibilityID
);
switch
(
scrollbarVisibility
)
{
case
java_awt_TextArea_SCROLLBARS_NONE
:
scroll_style
=
ES_AUTOVSCROLL
;
break
;
case
java_awt_TextArea_SCROLLBARS_VERTICAL_ONLY
:
scroll_style
=
WS_VSCROLL
|
ES_AUTOVSCROLL
;
break
;
case
java_awt_TextArea_SCROLLBARS_HORIZONTAL_ONLY
:
scroll_style
=
WS_HSCROLL
|
ES_AUTOHSCROLL
|
ES_AUTOVSCROLL
;
break
;
case
java_awt_TextArea_SCROLLBARS_BOTH
:
scroll_style
=
WS_VSCROLL
|
WS_HSCROLL
|
ES_AUTOVSCROLL
|
ES_AUTOHSCROLL
;
break
;
}
}
DWORD
style
=
WS_CHILD
|
WS_CLIPSIBLINGS
|
ES_LEFT
;
/*
* Specify ES_DISABLENOSCROLL - RichEdit control style to disable
* scrollbars instead of hiding them when not needed.
*/
style
|=
isMultiline
?
ES_MULTILINE
|
ES_WANTRETURN
|
scroll_style
|
ES_DISABLENOSCROLL
:
ES_AUTOHSCROLL
;
DWORD
exStyle
=
WS_EX_CLIENTEDGE
;
if
(
GetRTL
())
{
exStyle
|=
WS_EX_RIGHT
|
WS_EX_LEFTSCROLLBAR
;
if
(
GetRTLReadingOrder
())
exStyle
|=
WS_EX_RTLREADING
;
}
jint
x
=
env
->
GetIntField
(
target
,
AwtComponent
::
xID
);
jint
y
=
env
->
GetIntField
(
target
,
AwtComponent
::
yID
);
jint
width
=
env
->
GetIntField
(
target
,
AwtComponent
::
widthID
);
jint
height
=
env
->
GetIntField
(
target
,
AwtComponent
::
heightID
);
c
->
CreateHWnd
(
env
,
L""
,
style
,
exStyle
,
x
,
y
,
width
,
height
,
awtParent
->
GetHWnd
(),
reinterpret_cast
<
HMENU
>
(
static_cast
<
INT_PTR
>
(
awtParent
->
CreateControlID
())),
::
GetSysColor
(
COLOR_WINDOWTEXT
),
::
GetSysColor
(
COLOR_WINDOW
),
peer
);
// Fix for 4753116.
// If it is not win95 (we are using Richedit 2.0)
// we set plain text mode, in which the control is
// similar to a standard edit control:
// - The text in a plain text control can have only
// one format.
// - The user cannot paste rich text formats, such as RTF
// or embedded objects into a plain text control.
// - Rich text mode controls always have a default
// end-of-document marker or carriage return,
// to format paragraphs.
// kdm@sparc.spb.su
c
->
SendMessage
(
EM_SETTEXTMODE
,
TM_PLAINTEXT
,
0
);
c
->
m_backgroundColorSet
=
TRUE
;
/* suppress inheriting parent's color. */
c
->
UpdateBackground
(
env
,
target
);
c
->
SendMessage
(
EM_SETMARGINS
,
EC_LEFTMARGIN
|
EC_RIGHTMARGIN
,
MAKELPARAM
(
1
,
1
));
/*
* Fix for BugTraq Id 4260109.
* Set the text limit to the maximum.
* Use EM_EXLIMITTEXT for RichEdit controls.
* For some reason RichEdit 1.0 becomes read-only if the
* specified limit is greater than 0x7FFFFFFD.
*/
c
->
SendMessage
(
EM_EXLIMITTEXT
,
0
,
0x7FFFFFFD
);
/* Unregister RichEdit built-in drop target. */
VERIFY
(
::
RevokeDragDrop
(
c
->
GetHWnd
())
!=
DRAGDROP_E_INVALIDHWND
);
/* To enforce CF_TEXT format for paste operations. */
VERIFY
(
c
->
SendMessage
(
EM_SETOLECALLBACK
,
0
,
(
LPARAM
)
&
GetOleCallback
()));
c
->
SendMessage
(
EM_SETEVENTMASK
,
0
,
ENM_CHANGE
);
}
}
catch
(...)
{
env
->
DeleteLocalRef
(
target
);
throw
;
}
done:
env
->
DeleteLocalRef
(
target
);
return
c
;
}
LONG
AwtTextComponent
::
EditGetCharFromPos
(
POINT
&
pt
)
{
return
static_cast
<
LONG
>
(
SendMessage
(
EM_CHARFROMPOS
,
0
,
reinterpret_cast
<
LPARAM
>
(
&
pt
)));
}
/* Set a suitable font to IME against the component font. */
...
...
@@ -463,6 +610,54 @@ ret:
delete
ees
;
}
/*
* Disabled edit control has grayed foreground.
* Disabled RichEdit 1.0 control has original foreground.
* Thus we have to set grayed foreground manually.
*/
void
AwtTextComponent
::
Enable
(
BOOL
bEnable
)
{
AwtComponent
::
Enable
(
bEnable
);
SetColor
(
GetColor
());
}
/*
* WM_CTLCOLOR is not sent by rich edit controls.
* Use EM_SETCHARFORMAT and EM_SETBKGNDCOLOR to set
* respectively foreground and background color.
*/
void
AwtTextComponent
::
SetColor
(
COLORREF
c
)
{
AwtComponent
::
SetColor
(
c
);
CHARFORMAT
cf
;
memset
(
&
cf
,
0
,
sizeof
(
cf
));
cf
.
cbSize
=
sizeof
(
cf
);
cf
.
dwMask
=
CFM_COLOR
;
cf
.
crTextColor
=
::
IsWindowEnabled
(
GetHWnd
())
?
GetColor
()
:
::
GetSysColor
(
COLOR_3DSHADOW
);
/*
* The documentation for EM_GETCHARFORMAT is not exactly
* correct. It appears that wParam has the same meaning
* as for EM_SETCHARFORMAT. Our task is to secure that
* all the characters in the control have the required
* formatting. That's why we use SCF_ALL.
*/
VERIFY
(
SendMessage
(
EM_SETCHARFORMAT
,
SCF_ALL
,
(
LPARAM
)
&
cf
));
VERIFY
(
SendMessage
(
EM_SETCHARFORMAT
,
SCF_DEFAULT
,
(
LPARAM
)
&
cf
));
}
/*
* In responce to EM_SETBKGNDCOLOR rich edit changes
* its bg color and repaints itself so we don't need
* to force repaint.
*/
void
AwtTextComponent
::
SetBackgroundColor
(
COLORREF
c
)
{
AwtComponent
::
SetBackgroundColor
(
c
);
SendMessage
(
EM_SETBKGNDCOLOR
,
(
WPARAM
)
FALSE
,
(
LPARAM
)
GetBackgroundColor
());
}
/************************************************************************
* WTextComponentPeer native methods
...
...
@@ -623,6 +818,127 @@ Java_sun_awt_windows_WTextComponentPeer_initIDs(JNIEnv *env, jclass cls)
CATCH_BAD_ALLOC
;
}
AwtTextComponent
::
OleCallback
AwtTextComponent
::
sm_oleCallback
;
/************************************************************************
* Inner class OleCallback definition.
*/
AwtTextComponent
::
OleCallback
::
OleCallback
()
{
m_refs
=
0
;
AddRef
();
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
QueryInterface
(
REFIID
riid
,
LPVOID
*
ppvObj
)
{
if
(
::
IsEqualIID
(
riid
,
IID_IUnknown
)
||::
IsEqualIID
(
riid
,
IID_IRichEditOleCallback
)
)
{
*
ppvObj
=
static_cast
<
IRichEditOleCallback
*>
(
this
);
AddRef
();
return
S_OK
;
}
*
ppvObj
=
NULL
;
return
E_NOINTERFACE
;
}
STDMETHODIMP_
(
ULONG
)
AwtTextComponent
::
OleCallback
::
AddRef
()
{
return
++
m_refs
;
}
STDMETHODIMP_
(
ULONG
)
AwtTextComponent
::
OleCallback
::
Release
()
{
return
(
ULONG
)
--
m_refs
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
GetNewStorage
(
LPSTORAGE
FAR
*
ppstg
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
GetInPlaceContext
(
LPOLEINPLACEFRAME
FAR
*
ppipframe
,
LPOLEINPLACEUIWINDOW
FAR
*
ppipuiDoc
,
LPOLEINPLACEFRAMEINFO
pipfinfo
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
ShowContainerUI
(
BOOL
fShow
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
QueryInsertObject
(
LPCLSID
pclsid
,
LPSTORAGE
pstg
,
LONG
cp
)
{
return
S_OK
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
DeleteObject
(
LPOLEOBJECT
poleobj
)
{
return
S_OK
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
QueryAcceptData
(
LPDATAOBJECT
pdataobj
,
CLIPFORMAT
*
pcfFormat
,
DWORD
reco
,
BOOL
fReally
,
HGLOBAL
hMetaPict
)
{
if
(
reco
==
RECO_PASTE
)
{
// If CF_TEXT format is available edit controls will select it,
// otherwise if it is CF_UNICODETEXT is available it will be
// selected, otherwise if CF_OEMTEXT is available it will be selected.
if
(
::
IsClipboardFormatAvailable
(
CF_TEXT
))
{
*
pcfFormat
=
CF_TEXT
;
}
else
if
(
::
IsClipboardFormatAvailable
(
CF_UNICODETEXT
))
{
*
pcfFormat
=
CF_UNICODETEXT
;
}
else
if
(
::
IsClipboardFormatAvailable
(
CF_OEMTEXT
))
{
*
pcfFormat
=
CF_OEMTEXT
;
}
else
{
// Don't allow rich edit to paste clipboard data
// in other formats.
*
pcfFormat
=
CF_TEXT
;
}
}
return
S_OK
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
ContextSensitiveHelp
(
BOOL
fEnterMode
)
{
return
S_OK
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
GetClipboardData
(
CHARRANGE
*
pchrg
,
DWORD
reco
,
LPDATAOBJECT
*
ppdataobj
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
GetDragDropEffect
(
BOOL
fDrag
,
DWORD
grfKeyState
,
LPDWORD
pdwEffect
)
{
return
E_NOTIMPL
;
}
STDMETHODIMP
AwtTextComponent
::
OleCallback
::
GetContextMenu
(
WORD
seltype
,
LPOLEOBJECT
lpoleobj
,
CHARRANGE
FAR
*
lpchrg
,
HMENU
FAR
*
lphmenu
)
{
return
E_NOTIMPL
;
}
//
// Accessibility support
//
...
...
src/windows/native/sun/windows/awt_TextComponent.h
浏览文件 @
5ff1da03
...
...
@@ -47,6 +47,8 @@ public:
AwtTextComponent
();
static
AwtTextComponent
*
Create
(
jobject
self
,
jobject
parent
,
BOOL
isMultiline
);
virtual
LPCTSTR
GetClassName
();
int
RemoveCR
(
WCHAR
*
pStr
);
...
...
@@ -71,6 +73,10 @@ public:
void
SetFont
(
AwtFont
*
font
);
virtual
void
Enable
(
BOOL
bEnable
);
virtual
void
SetColor
(
COLORREF
c
);
virtual
void
SetBackgroundColor
(
COLORREF
c
);
/*
* Windows message handler functions
*/
...
...
@@ -113,7 +119,40 @@ public:
// Used to prevent untrusted code from synthesizing a WM_PASTE message
// by posting a <CTRL>-V KeyEvent
BOOL
m_synthetic
;
virtual
LONG
EditGetCharFromPos
(
POINT
&
pt
)
=
0
;
LONG
EditGetCharFromPos
(
POINT
&
pt
);
/*****************************************************************
* Inner class OleCallback declaration.
*/
class
OleCallback
:
public
IRichEditOleCallback
{
public:
OleCallback
();
STDMETHODIMP
QueryInterface
(
REFIID
riid
,
LPVOID
*
ppvObj
);
STDMETHODIMP_
(
ULONG
)
AddRef
();
STDMETHODIMP_
(
ULONG
)
Release
();
STDMETHODIMP
GetNewStorage
(
LPSTORAGE
FAR
*
ppstg
);
STDMETHODIMP
GetInPlaceContext
(
LPOLEINPLACEFRAME
FAR
*
ppipframe
,
LPOLEINPLACEUIWINDOW
FAR
*
ppipuiDoc
,
LPOLEINPLACEFRAMEINFO
pipfinfo
);
STDMETHODIMP
ShowContainerUI
(
BOOL
fShow
);
STDMETHODIMP
QueryInsertObject
(
LPCLSID
pclsid
,
LPSTORAGE
pstg
,
LONG
cp
);
STDMETHODIMP
DeleteObject
(
LPOLEOBJECT
poleobj
);
STDMETHODIMP
QueryAcceptData
(
LPDATAOBJECT
pdataobj
,
CLIPFORMAT
*
pcfFormat
,
DWORD
reco
,
BOOL
fReally
,
HGLOBAL
hMetaPict
);
STDMETHODIMP
ContextSensitiveHelp
(
BOOL
fEnterMode
);
STDMETHODIMP
GetClipboardData
(
CHARRANGE
*
pchrg
,
DWORD
reco
,
LPDATAOBJECT
*
ppdataobj
);
STDMETHODIMP
GetDragDropEffect
(
BOOL
fDrag
,
DWORD
grfKeyState
,
LPDWORD
pdwEffect
);
STDMETHODIMP
GetContextMenu
(
WORD
seltype
,
LPOLEOBJECT
poleobj
,
CHARRANGE
FAR
*
pchrg
,
HMENU
FAR
*
phmenu
);
private:
ULONG
m_refs
;
// Reference count
};
//OleCallback class
INLINE
static
OleCallback
&
GetOleCallback
()
{
return
sm_oleCallback
;
}
private:
...
...
@@ -126,6 +165,7 @@ private:
HFONT
m_hFont
;
//im --- end
static
OleCallback
sm_oleCallback
;
//
// Accessibility support
...
...
src/windows/native/sun/windows/awt_TextField.cpp
浏览文件 @
5ff1da03
...
...
@@ -42,84 +42,23 @@ struct SetEchoCharStruct {
*/
AwtTextField
::
AwtTextField
()
:
m_initialRescrollFlag
(
true
)
{
}
/* Create a new AwtTextField object and window. */
AwtTextField
*
AwtTextField
::
Create
(
jobject
peer
,
jobject
parent
)
{
JNIEnv
*
env
=
(
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
);
jobject
target
=
NULL
;
AwtTextField
*
c
=
NULL
;
try
{
PDATA
pData
;
AwtCanvas
*
awtParent
;
JNI_CHECK_PEER_GOTO
(
parent
,
done
);
awtParent
=
(
AwtCanvas
*
)
pData
;
JNI_CHECK_NULL_GOTO
(
awtParent
,
"null awtParent"
,
done
);
target
=
env
->
GetObjectField
(
peer
,
AwtObject
::
targetID
);
JNI_CHECK_NULL_GOTO
(
target
,
"null target"
,
done
);
c
=
new
AwtTextField
();
{
DWORD
style
=
WS_CHILD
|
WS_CLIPSIBLINGS
|
ES_LEFT
|
ES_AUTOHSCROLL
;
DWORD
exStyle
=
WS_EX_CLIENTEDGE
;
if
(
GetRTL
())
{
exStyle
|=
WS_EX_RIGHT
|
WS_EX_LEFTSCROLLBAR
;
if
(
GetRTLReadingOrder
())
exStyle
|=
WS_EX_RTLREADING
;
}
jint
x
=
env
->
GetIntField
(
target
,
AwtComponent
::
xID
);
jint
y
=
env
->
GetIntField
(
target
,
AwtComponent
::
yID
);
jint
width
=
env
->
GetIntField
(
target
,
AwtComponent
::
widthID
);
jint
height
=
env
->
GetIntField
(
target
,
AwtComponent
::
heightID
);
c
->
CreateHWnd
(
env
,
L""
,
style
,
exStyle
,
x
,
y
,
width
,
height
,
awtParent
->
GetHWnd
(),
reinterpret_cast
<
HMENU
>
(
static_cast
<
INT_PTR
>
(
awtParent
->
CreateControlID
())),
::
GetSysColor
(
COLOR_WINDOWTEXT
),
::
GetSysColor
(
COLOR_WINDOW
),
peer
);
c
->
m_backgroundColorSet
=
TRUE
;
/* suppress inheriting parent's color. */
c
->
UpdateBackground
(
env
,
target
);
c
->
SendMessage
(
EM_SETMARGINS
,
EC_LEFTMARGIN
|
EC_RIGHTMARGIN
,
MAKELPARAM
(
1
,
1
));
/*
* Fix for BugTraq Id 4260109.
* Set the text limit to the maximum.
*/
c
->
SendMessage
(
EM_SETLIMITTEXT
);
}
}
catch
(...)
{
env
->
DeleteLocalRef
(
target
);
throw
;
}
done:
env
->
DeleteLocalRef
(
target
);
return
c
;
return
(
AwtTextField
*
)
AwtTextComponent
::
Create
(
peer
,
parent
,
false
);
}
void
AwtTextField
::
EditSetSel
(
CHARRANGE
&
cr
)
{
SendMessage
(
EM_SETSEL
,
cr
.
cpMin
,
cr
.
cpMax
);
}
SendMessage
(
EM_EXSETSEL
,
0
,
reinterpret_cast
<
LPARAM
>
(
&
cr
));
// 6417581: force expected drawing
if
(
IS_WINVISTA
&&
cr
.
cpMin
==
cr
.
cpMax
)
{
::
InvalidateRect
(
GetHWnd
(),
NULL
,
TRUE
);
}
LONG
AwtTextField
::
EditGetCharFromPos
(
POINT
&
pt
)
{
return
static_cast
<
LONG
>
(
SendMessage
(
EM_CHARFROMPOS
,
0
,
MAKELPARAM
(
pt
.
x
,
pt
.
y
)));
}
LRESULT
AwtTextField
::
WindowProc
(
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
...
...
@@ -162,10 +101,18 @@ AwtTextField::HandleEvent(MSG *msg, BOOL synthetic)
* to allow dnd of the current selection.
*/
if
(
msg
->
message
==
WM_LBUTTONDBLCLK
)
{
SetStartSelectionPos
(
static_cast
<
LONG
>
(
SendMessage
(
EM_FINDWORDBREAK
,
WB_MOVEWORDLEFT
,
lCurPos
)));
SetEndSelectionPos
(
static_cast
<
LONG
>
(
SendMessage
(
EM_FINDWORDBREAK
,
WB_MOVEWORDRIGHT
,
lCurPos
)));
jchar
echo
=
SendMessage
(
EM_GETPASSWORDCHAR
);
if
(
echo
==
0
){
SetStartSelectionPos
(
static_cast
<
LONG
>
(
SendMessage
(
EM_FINDWORDBREAK
,
WB_MOVEWORDLEFT
,
lCurPos
)));
SetEndSelectionPos
(
static_cast
<
LONG
>
(
SendMessage
(
EM_FINDWORDBREAK
,
WB_MOVEWORDRIGHT
,
lCurPos
)));
}
else
{
SetStartSelectionPos
(
0
);
SetEndSelectionPos
(
GetTextLength
());
}
}
else
{
SetStartSelectionPos
(
lCurPos
);
SetEndSelectionPos
(
lCurPos
);
...
...
@@ -307,46 +254,6 @@ ret:
delete
secs
;
}
void
AwtTextField
::
Reshape
(
int
x
,
int
y
,
int
w
,
int
h
)
{
AwtTextComponent
::
Reshape
(
x
,
y
,
w
,
h
);
// Another option would be to call this
// after WM_SIZE notification is handled
initialRescroll
();
}
// Windows' Edit control features:
// (i) if text selection is set while control's width or height is 0,
// text is scrolled oddly.
// (ii) if control's size is changed, text seems never be automatically
// rescrolled.
//
// This method is designed for the following scenario: AWT spawns Edit
// control with 0x0 dimensions, then sets text selection, then resizes the
// control (couple of times). This might cause text appear undesirably scrolled.
// So we reset/set selection again to rescroll text. (see also CR 6480547)
void
AwtTextField
::
initialRescroll
()
{
if
(
!
m_initialRescrollFlag
)
{
return
;
}
::
RECT
r
;
BOOL
ok
=
::
GetClientRect
(
GetHWnd
(),
&
r
);
if
(
!
ok
||
r
.
right
==
0
||
r
.
bottom
==
0
)
{
return
;
}
m_initialRescrollFlag
=
false
;
DWORD
start
,
end
;
SendMessage
(
EM_GETSEL
,
(
WPARAM
)
&
start
,
(
LPARAM
)
&
end
);
SendMessage
(
EM_SETSEL
,
(
WPARAM
)
0
,
(
LPARAM
)
0
);
SendMessage
(
EM_SETSEL
,
(
WPARAM
)
start
,
(
LPARAM
)
end
);
}
/************************************************************************
* WTextFieldPeer native methods
...
...
src/windows/native/sun/windows/awt_TextField.h
浏览文件 @
5ff1da03
...
...
@@ -54,15 +54,11 @@ public:
// invoked on Toolkit thread
static
void
_SetEchoChar
(
void
*
param
);
protected:
LONG
EditGetCharFromPos
(
POINT
&
pt
);
virtual
void
Reshape
(
int
x
,
int
y
,
int
w
,
int
h
);
protected:
private:
void
EditSetSel
(
CHARRANGE
&
cr
);
void
initialRescroll
();
bool
m_initialRescrollFlag
;
};
#endif
/* AWT_TEXTFIELD_H */
test/java/awt/Frame/ResizeAfterSetFont/ResizeAfterSetFont.java
0 → 100644
浏览文件 @
5ff1da03
/*
* 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.
*/
/*
* Portions Copyright (c) 2012 IBM Corporation
*/
/*
@test
@bug 7170655
@summary Frame size does not change after changing font
@author Jonathan Lu
@library ../../regtesthelpers
@build Util
@run main ResizeAfterSetFont
*/
import
java.awt.*
;
import
test.java.awt.regtesthelpers.Util
;
public
class
ResizeAfterSetFont
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Frame
frame
=
new
Frame
(
"bug7170655"
);
frame
.
setLayout
(
new
BorderLayout
());
frame
.
setBackground
(
Color
.
LIGHT_GRAY
);
Panel
panel
=
new
Panel
();
panel
.
setLayout
(
new
GridLayout
(
0
,
1
,
1
,
1
));
Label
label
=
new
Label
(
"Test Label"
);
label
.
setBackground
(
Color
.
white
);
label
.
setForeground
(
Color
.
RED
);
label
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
PLAIN
,
12
));
panel
.
add
(
label
);
frame
.
add
(
panel
,
"South"
);
frame
.
pack
();
frame
.
setVisible
(
true
);
Util
.
waitForIdle
(
null
);
Dimension
dimBefore
=
frame
.
getSize
();
label
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
PLAIN
,
24
));
frame
.
validate
();
frame
.
pack
();
Dimension
dimAfter
=
frame
.
getSize
();
if
(
dimBefore
.
equals
(
dimAfter
))
{
throw
new
Exception
(
"Frame size does not change after Label.setFont()!"
);
}
}
}
test/java/awt/WMSpecificTests/Mutter/MutterMaximizeTest.java
0 → 100644
浏览文件 @
5ff1da03
/*
* Copyright 2012 Red Hat, Inc. All Rights Reserved.
* 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 7043963
@summary Tests that the screen location of windows is
updated properly after a maximize.
@author Denis Lila
@library ../../regtesthelpers
@build Util
@run main MutterMaximizeTest
*/
import
java.awt.AWTException
;
import
java.awt.Dimension
;
import
java.awt.Frame
;
import
java.awt.Point
;
import
java.awt.Robot
;
import
java.awt.Window
;
import
java.awt.event.InputEvent
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
import
test.java.awt.regtesthelpers.Util
;
@SuppressWarnings
(
"serial"
)
public
class
MutterMaximizeTest
extends
Frame
{
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
if
(
Util
.
getWMID
()
!=
Util
.
MUTTER_WM
)
{
System
.
out
.
println
(
"This test is only useful on Mutter"
);
return
;
}
MutterMaximizeTest
frame
=
new
MutterMaximizeTest
();
frame
.
addWindowListener
(
Util
.
getClosingWindowAdapter
());
//Display the window.
frame
.
setSize
(
500
,
500
);
Util
.
showWindowWait
(
frame
);
runRobotTest
(
frame
);
}
private
static
void
runRobotTest
(
Frame
frame
)
{
try
{
Thread
robotThread
=
startRegTest
(
frame
);
robotThread
.
start
();
waitForThread
(
robotThread
);
}
finally
{
frame
.
dispose
();
}
}
private
static
void
waitForThread
(
Thread
t
)
{
while
(
t
.
isAlive
())
{
try
{
t
.
join
();
}
catch
(
InterruptedException
e
)
{
}
}
}
private
static
void
sleepFor
(
long
millis
)
{
long
dT
=
0
;
long
start
=
System
.
nanoTime
();
while
(
dT
<
millis
)
{
try
{
long
toSleep
=
millis
-
dT
/
1000000
;
if
(
toSleep
>
0
)
{
Thread
.
sleep
(
toSleep
);
}
// if this ends without an interrupted exception,
// that's good enough.
break
;
}
catch
(
InterruptedException
e
)
{
long
now
=
System
.
nanoTime
();
dT
=
now
-
start
;
}
}
}
private
static
void
rmove
(
Robot
robot
,
Point
p
)
{
robot
.
mouseMove
(
p
.
x
,
p
.
y
);
}
private
static
void
rdown
(
Robot
robot
)
{
robot
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
robot
.
delay
(
50
);
}
private
static
void
rup
(
Robot
robot
)
{
robot
.
mouseRelease
(
InputEvent
.
BUTTON1_MASK
);
robot
.
delay
(
50
);
}
public
static
void
click
(
Robot
robot
)
{
rdown
(
robot
);
rup
(
robot
);
}
public
static
void
doubleClick
(
Robot
robot
)
{
click
(
robot
);
click
(
robot
);
}
private
static
void
dragWindow
(
Window
w
,
int
dx
,
int
dy
,
Robot
robot
)
{
Point
p
=
Util
.
getTitlePoint
(
w
);
rmove
(
robot
,
p
);
rdown
(
robot
);
p
.
translate
(
dx
,
dy
);
rmove
(
robot
,
p
);
rup
(
robot
);
}
// f must be visible
private
static
Thread
startRegTest
(
final
Frame
f
)
{
Thread
robot
=
new
Thread
(
new
Runnable
()
{
public
void
run
()
{
Robot
r
=
Util
.
createRobot
();
dragWindow
(
f
,
100
,
100
,
r
);
// wait for the location to be set.
sleepFor
(
2000
);
final
Point
l2
=
f
.
getLocationOnScreen
();
// double click should maximize the frame
doubleClick
(
r
);
// wait for location again.
sleepFor
(
2000
);
final
Point
l3
=
f
.
getLocationOnScreen
();
if
(
l3
.
equals
(
l2
))
{
throw
new
RuntimeException
(
"Bad location after maximize. Window location has not moved"
);
}
}
});
return
robot
;
}
}
test/java/awt/regtesthelpers/Util.java
浏览文件 @
5ff1da03
...
...
@@ -162,16 +162,21 @@ public final class Util {
clickOnComp
(
comp
,
robot
,
50
);
}
public
static
Point
getTitlePoint
(
Window
decoratedWindow
)
{
Point
p
=
decoratedWindow
.
getLocationOnScreen
();
Dimension
d
=
decoratedWindow
.
getSize
();
return
new
Point
(
p
.
x
+
(
int
)(
d
.
getWidth
()/
2
),
p
.
y
+
(
int
)(
decoratedWindow
.
getInsets
().
top
/
2
));
}
/*
* Clicks on a title of Frame/Dialog.
* WARNING: it may fail on some platforms when the window is not wide enough.
*/
public
static
void
clickOnTitle
(
final
Window
decoratedWindow
,
final
Robot
robot
)
{
Point
p
=
decoratedWindow
.
getLocationOnScreen
();
Dimension
d
=
decoratedWindow
.
getSize
();
if
(
decoratedWindow
instanceof
Frame
||
decoratedWindow
instanceof
Dialog
)
{
robot
.
mouseMove
(
p
.
x
+
(
int
)(
d
.
getWidth
()/
2
),
p
.
y
+
(
int
)
decoratedWindow
.
getInsets
().
top
/
2
);
Point
p
=
getTitlePoint
(
decoratedWindow
);
robot
.
mouseMove
(
p
.
x
,
p
.
y
);
robot
.
delay
(
50
);
robot
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
robot
.
delay
(
50
);
...
...
@@ -409,7 +414,9 @@ public final class Util {
ICE_WM
=
10
,
METACITY_WM
=
11
,
COMPIZ_WM
=
12
,
LG3D_WM
=
13
;
LG3D_WM
=
13
,
CWM_WM
=
14
,
MUTTER_WM
=
15
;
/*
* Returns -1 in case of not X Window or any problems.
...
...
test/javax/swing/JPopupMenu/6694823/bug6694823.java
浏览文件 @
5ff1da03
...
...
@@ -33,6 +33,8 @@
import
javax.swing.*
;
import
java.awt.*
;
import
sun.awt.SunToolkit
;
import
java.security.Permission
;
import
sun.security.util.SecurityConstants
;
public
class
bug6694823
{
private
static
JFrame
frame
;
...
...
@@ -48,6 +50,8 @@ public class bug6694823 {
}
});
toolkit
.
realSync
();
// Get screen insets
screenInsets
=
toolkit
.
getScreenInsets
(
frame
.
getGraphicsConfiguration
());
if
(
screenInsets
.
bottom
==
0
)
{
...
...
@@ -55,26 +59,23 @@ public class bug6694823 {
return
;
}
// Show popup as if from a standalone application
// The popup should be able to overlap the task bar
showPopup
(
false
);
System
.
setSecurityManager
(
new
SecurityManager
(){
// Emulate applet security restrictions
toolkit
.
realSync
();
System
.
setSecurityManager
(
new
SecurityManager
());
private
String
allowsAlwaysOnTopPermission
=
SecurityConstants
.
AWT
.
SET_WINDOW_ALWAYS_ON_TOP_PERMISSION
.
getName
();
@Override
public
void
checkPermission
(
Permission
perm
)
{
if
(
allowsAlwaysOnTopPermission
.
equals
(
perm
.
getName
()))
{
throw
new
SecurityException
();
}
}
});
// Show popup as if from an applet
// The popup shouldn't overlap the task bar. It should be shifted up.
showPopup
(
true
);
checkPopup
(
);
toolkit
.
realSync
();
System
.
out
.
println
(
"Test passed!"
);
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
frame
.
dispose
();
}
});
}
private
static
void
createGui
()
{
...
...
@@ -93,7 +94,7 @@ public class bug6694823 {
frame
.
setSize
(
200
,
200
);
}
private
static
void
showPopup
(
final
boolean
shouldBeShifted
)
throws
Exception
{
private
static
void
checkPopup
(
)
throws
Exception
{
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
// Place frame just above the task bar
...
...
@@ -121,20 +122,14 @@ public class bug6694823 {
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
Point
frameLoc
=
frame
.
getLocationOnScreen
();
if
(
shouldBeShifted
)
{
if
(
popup
.
getLocationOnScreen
()
.
equals
(
new
Point
(
frameLoc
.
x
,
frameLoc
.
y
+
point
.
y
)))
{
throw
new
RuntimeException
(
"Popup is not shifted"
);
}
}
else
{
if
(!
popup
.
getLocationOnScreen
()
.
equals
(
new
Point
(
frameLoc
.
x
,
frameLoc
.
y
+
point
.
y
)))
{
throw
new
RuntimeException
(
"Popup is unexpectedly shifted"
);
}
if
(
popup
.
getLocationOnScreen
().
equals
(
new
Point
(
frameLoc
.
x
,
frameLoc
.
y
+
point
.
y
)))
{
throw
new
RuntimeException
(
"Popup is not shifted"
);
}
popup
.
setVisible
(
false
);
frame
.
dispose
();
}
});
}
...
...
test/javax/swing/JPopupMenu/6800513/bug6800513.java
0 → 100644
浏览文件 @
5ff1da03
/*
* Copyright 2012 Red Hat, Inc. All Rights Reserved.
* 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 6800513
* @summary GTK-LaF renders menus incompletely
* @author Mario Torre
* @library ../../regtesthelpers/
* @build Util
* @run main bug6800513
*/
import
sun.awt.SunToolkit
;
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.event.InputEvent
;
import
java.beans.PropertyChangeEvent
;
import
java.beans.PropertyChangeListener
;
import
java.lang.reflect.Field
;
import
java.util.concurrent.Callable
;
public
class
bug6800513
{
private
static
JPopupMenu
popupMenu
;
private
static
JMenu
menu
;
private
static
JFrame
frame
;
public
static
void
testFrame
(
final
boolean
defaultLightWeightPopupEnabled
,
String
expectedPopupClass
)
throws
Exception
{
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
JPopupMenu
.
setDefaultLightWeightPopupEnabled
(
defaultLightWeightPopupEnabled
);
createAndShowUI
();
}
});
toolkit
.
realSync
();
clickOnMenu
();
toolkit
.
realSync
();
Field
getPopup
=
JPopupMenu
.
class
.
getDeclaredField
(
"popup"
);
getPopup
.
setAccessible
(
true
);
Popup
popup
=
(
Popup
)
getPopup
.
get
(
popupMenu
);
if
(
popup
==
null
)
{
throw
new
Exception
(
"popup is null!"
);
}
String
className
=
popup
.
getClass
().
getName
();
if
(!
className
.
equals
(
expectedPopupClass
))
{
throw
new
Exception
(
"popup class is: "
+
className
+
", expected: "
+
expectedPopupClass
);
}
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
frame
.
dispose
();
popupMenu
=
null
;
}
});
toolkit
.
realSync
();
}
public
static
void
clickOnMenu
()
throws
Exception
{
Rectangle
bounds
=
Util
.
invokeOnEDT
(
new
Callable
<
Rectangle
>()
{
@Override
public
Rectangle
call
()
throws
Exception
{
return
new
Rectangle
(
menu
.
getLocationOnScreen
(),
menu
.
getSize
());
}
});
Robot
robot
=
new
Robot
();
robot
.
setAutoDelay
(
100
);
robot
.
mouseMove
(
bounds
.
x
+
bounds
.
width
/
2
,
bounds
.
y
+
bounds
.
height
/
2
);
robot
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
robot
.
mouseRelease
(
InputEvent
.
BUTTON1_MASK
);
}
private
static
class
PopupListener
implements
PropertyChangeListener
{
@Override
public
void
propertyChange
(
PropertyChangeEvent
evt
)
{
if
(
evt
.
toString
().
contains
(
"visible"
)
&&
((
Boolean
)
evt
.
getNewValue
()
==
true
))
{
popupMenu
=
(
JPopupMenu
)
evt
.
getSource
();
}
}
}
public
static
void
createAndShowUI
()
{
frame
=
new
JFrame
();
JMenuBar
menuBar
=
new
JMenuBar
();
menu
=
new
JMenu
(
"Menu"
);
menu
.
add
(
new
JMenuItem
(
"Menu Item #1"
));
menu
.
add
(
new
JMenuItem
(
"Menu Item #2"
));
menu
.
add
(
new
JMenuItem
(
"Menu Item #3"
));
menuBar
.
add
(
menu
);
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
frame
.
setJMenuBar
(
menuBar
);
frame
.
setSize
(
500
,
500
);
PopupListener
listener
=
new
PopupListener
();
menu
.
getPopupMenu
().
addPropertyChangeListener
(
listener
);
frame
.
setVisible
(
true
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
testFrame
(
false
,
"javax.swing.PopupFactory$HeavyWeightPopup"
);
testFrame
(
true
,
"javax.swing.PopupFactory$LightWeightPopup"
);
}
}
test/javax/swing/JPopupMenu/7156657/bug7156657.java
0 → 100644
浏览文件 @
5ff1da03
/*
* 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.
*/
import
com.sun.awt.AWTUtilities
;
import
sun.awt.SunToolkit
;
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
import
java.util.concurrent.Callable
;
/* @test
@bug 7156657
@summary Version 7 doesn't support translucent popup menus against a translucent window
@library ../../regtesthelpers
@author Pavel Porvatov
*/
public
class
bug7156657
{
private
static
JFrame
lowerFrame
;
private
static
JFrame
frame
;
private
static
JPopupMenu
popupMenu
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
final
Robot
robot
=
new
Robot
();
final
SunToolkit
toolkit
=
((
SunToolkit
)
Toolkit
.
getDefaultToolkit
());
Boolean
skipTest
=
Util
.
invokeOnEDT
(
new
Callable
<
Boolean
>()
{
@Override
public
Boolean
call
()
throws
Exception
{
frame
=
createFrame
();
if
(!
AWTUtilities
.
isTranslucencyCapable
(
frame
.
getGraphicsConfiguration
()))
{
System
.
out
.
println
(
"Translucency is not supported, the test skipped"
);
return
true
;
}
lowerFrame
=
createFrame
();
lowerFrame
.
getContentPane
().
setBackground
(
Color
.
RED
);
lowerFrame
.
setVisible
(
true
);
popupMenu
=
new
JPopupMenu
();
popupMenu
.
setOpaque
(
false
);
popupMenu
.
add
(
new
TransparentMenuItem
(
"1111"
));
popupMenu
.
add
(
new
TransparentMenuItem
(
"2222"
));
popupMenu
.
add
(
new
TransparentMenuItem
(
"3333"
));
AWTUtilities
.
setWindowOpaque
(
frame
,
false
);
JPanel
pnContent
=
new
JPanel
();
pnContent
.
setBackground
(
new
Color
(
255
,
255
,
255
,
128
));
frame
.
add
(
pnContent
);
frame
.
setVisible
(
true
);
return
false
;
}
});
if
(
skipTest
)
{
return
;
}
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
popupMenu
.
show
(
frame
,
0
,
0
);
}
});
toolkit
.
realSync
();
Rectangle
popupRectangle
=
Util
.
invokeOnEDT
(
new
Callable
<
Rectangle
>()
{
@Override
public
Rectangle
call
()
throws
Exception
{
return
popupMenu
.
getBounds
();
}
});
BufferedImage
redBackgroundCapture
=
robot
.
createScreenCapture
(
popupRectangle
);
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
lowerFrame
.
getContentPane
().
setBackground
(
Color
.
GREEN
);
}
});
toolkit
.
realSync
();
BufferedImage
greenBackgroundCapture
=
robot
.
createScreenCapture
(
popupRectangle
);
if
(
Util
.
compareBufferedImages
(
redBackgroundCapture
,
greenBackgroundCapture
))
{
throw
new
RuntimeException
(
"The test failed"
);
}
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
popupMenu
.
setVisible
(
false
);
frame
.
dispose
();
lowerFrame
.
dispose
();
}
});
System
.
out
.
println
(
"The test passed"
);
}
private
static
JFrame
createFrame
()
{
JFrame
result
=
new
JFrame
();
result
.
setLocation
(
0
,
0
);
result
.
setSize
(
400
,
300
);
result
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
result
.
setUndecorated
(
true
);
return
result
;
}
private
static
class
TransparentMenuItem
extends
JMenuItem
{
public
TransparentMenuItem
(
String
text
)
{
super
(
text
);
setOpaque
(
false
);
}
@Override
public
void
paint
(
Graphics
g
)
{
Graphics2D
g2
=
(
Graphics2D
)
g
.
create
();
g2
.
setComposite
(
AlphaComposite
.
getInstance
(
AlphaComposite
.
SRC_OVER
,
0.5f
));
super
.
paint
(
g2
);
g2
.
dispose
();
}
}
}
test/javax/swing/JSpinner/5012888/bug5012888.java
0 → 100644
浏览文件 @
5ff1da03
/*
* 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 1.0 04/04/23
@bug 5012888
@summary REGRESSION: Click & hold on arrow of JSpinner only transfers focus
@author Konstantin Eremin
@run main bug5012888
*/
import
javax.swing.*
;
import
javax.swing.event.*
;
import
java.awt.*
;
import
java.awt.event.*
;
public
class
bug5012888
extends
JFrame
{
JSpinner
spinner1
,
spinner2
;
public
bug5012888
()
{
spinner1
=
new
JSpinner
(
new
SpinnerNumberModel
(
0
,
-
1000
,
1000
,
1
));
spinner2
=
new
JSpinner
(
new
SpinnerNumberModel
(
1
,
-
1000
,
1000
,
1
));
Container
pane
=
getContentPane
();
pane
.
setLayout
(
new
BorderLayout
());
pane
.
add
(
spinner1
,
BorderLayout
.
NORTH
);
pane
.
add
(
spinner2
,
BorderLayout
.
SOUTH
);
}
public
void
doTest
()
throws
Exception
{
((
sun
.
awt
.
SunToolkit
)
Toolkit
.
getDefaultToolkit
()).
realSync
();
Point
p
=
spinner2
.
getLocationOnScreen
();
Rectangle
rect
=
spinner2
.
getBounds
();
Robot
robot
=
new
Robot
();
robot
.
mouseMove
(
p
.
x
+
rect
.
width
-
5
,
p
.
y
+
5
);
robot
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
Thread
.
sleep
(
1000
);
robot
.
mouseRelease
(
InputEvent
.
BUTTON1_MASK
);
if
(
((
Integer
)
spinner2
.
getValue
()).
intValue
()
==
1
)
{
throw
new
Error
(
"Spinner value should be more than 1"
);
}
}
public
static
void
main
(
String
[]
argv
)
throws
Exception
{
bug5012888
b
=
new
bug5012888
();
b
.
setBounds
(
0
,
0
,
100
,
100
);
b
.
setVisible
(
true
);
b
.
doTest
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录