Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
33d7f099
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看板
提交
33d7f099
编写于
4月 17, 2013
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
b315e54c
77e0a7f8
变更
35
展开全部
隐藏空白更改
内联
并排
Showing
35 changed file
with
1788 addition
and
763 deletion
+1788
-763
src/macosx/classes/sun/lwawt/LWComponentPeer.java
src/macosx/classes/sun/lwawt/LWComponentPeer.java
+1
-1
src/macosx/classes/sun/lwawt/macosx/CClipboard.java
src/macosx/classes/sun/lwawt/macosx/CClipboard.java
+8
-0
src/macosx/classes/sun/lwawt/macosx/CCursorManager.java
src/macosx/classes/sun/lwawt/macosx/CCursorManager.java
+0
-36
src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
+6
-9
src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java
...cosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java
+58
-42
src/macosx/classes/sun/lwawt/macosx/CDropTarget.java
src/macosx/classes/sun/lwawt/macosx/CDropTarget.java
+6
-15
src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java
src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java
+8
-0
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+15
-0
src/macosx/native/sun/awt/CClipboard.m
src/macosx/native/sun/awt/CClipboard.m
+22
-5
src/macosx/native/sun/awt/CDragSource.h
src/macosx/native/sun/awt/CDragSource.h
+16
-9
src/macosx/native/sun/awt/CDragSource.m
src/macosx/native/sun/awt/CDragSource.m
+28
-36
src/macosx/native/sun/awt/CDragSourceContextPeer.m
src/macosx/native/sun/awt/CDragSourceContextPeer.m
+20
-25
src/macosx/native/sun/awt/CDropTarget.m
src/macosx/native/sun/awt/CDropTarget.m
+13
-14
src/macosx/native/sun/awt/CTextPipe.m
src/macosx/native/sun/awt/CTextPipe.m
+13
-1
src/share/classes/java/awt/datatransfer/DataFlavor.java
src/share/classes/java/awt/datatransfer/DataFlavor.java
+80
-18
src/share/classes/java/awt/datatransfer/SystemFlavorMap.java
src/share/classes/java/awt/datatransfer/SystemFlavorMap.java
+147
-117
src/share/classes/java/awt/dnd/InvalidDnDOperationException.java
...re/classes/java/awt/dnd/InvalidDnDOperationException.java
+1
-1
src/share/classes/sun/awt/datatransfer/DataTransferer.java
src/share/classes/sun/awt/datatransfer/DataTransferer.java
+234
-238
src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java
src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java
+1
-5
src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java
src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java
+5
-2
src/share/classes/sun/swing/JLightweightFrame.java
src/share/classes/sun/swing/JLightweightFrame.java
+3
-1
src/solaris/classes/sun/awt/X11/XDataTransferer.java
src/solaris/classes/sun/awt/X11/XDataTransferer.java
+9
-15
src/solaris/classes/sun/awt/X11/XFramePeer.java
src/solaris/classes/sun/awt/X11/XFramePeer.java
+7
-1
src/solaris/classes/sun/awt/X11/XLightweightFramePeer.java
src/solaris/classes/sun/awt/X11/XLightweightFramePeer.java
+65
-0
src/solaris/classes/sun/awt/X11/XToolkit.java
src/solaris/classes/sun/awt/X11/XToolkit.java
+3
-1
src/windows/classes/sun/awt/windows/WDataTransferer.java
src/windows/classes/sun/awt/windows/WDataTransferer.java
+200
-169
test/java/awt/datatransfer/HTMLDataFlavors/HTMLDataFlavorTest.java
.../awt/datatransfer/HTMLDataFlavors/HTMLDataFlavorTest.java
+188
-0
test/java/awt/datatransfer/HTMLDataFlavors/HtmlTransferable.java
...va/awt/datatransfer/HTMLDataFlavors/HtmlTransferable.java
+113
-0
test/java/awt/datatransfer/HTMLDataFlavors/ManualHTMLDataFlavorTest.html
...atatransfer/HTMLDataFlavors/ManualHTMLDataFlavorTest.html
+20
-0
test/java/awt/datatransfer/HTMLDataFlavors/ManualHTMLDataFlavorTest.java
...atatransfer/HTMLDataFlavors/ManualHTMLDataFlavorTest.java
+292
-0
test/java/awt/datatransfer/HTMLDataFlavors/PutAllHtmlFlavorsOnClipboard.java
...ransfer/HTMLDataFlavors/PutAllHtmlFlavorsOnClipboard.java
+34
-0
test/java/awt/datatransfer/HTMLDataFlavors/PutOnlyAllHtmlFlavorOnClipboard.java
...sfer/HTMLDataFlavors/PutOnlyAllHtmlFlavorOnClipboard.java
+35
-0
test/java/awt/datatransfer/HTMLDataFlavors/PutSelectionAndFragmentHtmlFlavorsOnClipboard.java
...lavors/PutSelectionAndFragmentHtmlFlavorsOnClipboard.java
+34
-0
test/java/awt/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java
...t/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java
+97
-0
test/javax/swing/JPopupMenu/6827786/bug6827786.java
test/javax/swing/JPopupMenu/6827786/bug6827786.java
+6
-2
未找到文件。
src/macosx/classes/sun/lwawt/LWComponentPeer.java
浏览文件 @
33d7f099
...
...
@@ -336,7 +336,7 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
return
peerTreeLock
;
}
final
T
getTarget
()
{
public
final
T
getTarget
()
{
return
target
;
}
...
...
src/macosx/classes/sun/lwawt/macosx/CClipboard.java
浏览文件 @
33d7f099
...
...
@@ -110,4 +110,12 @@ public class CClipboard extends SunClipboard {
public
native
void
declareTypes
(
long
[]
formats
,
SunClipboard
newOwner
);
public
native
void
setData
(
byte
[]
data
,
long
format
);
/**
* Invokes native check whether a change count on the general pasteboard is different
* than when we set it. The different count value means the current owner lost
* pasteboard ownership and someone else put data on the clipboard.
* @since 1.7
*/
public
native
void
checkPasteboard
();
}
src/macosx/classes/sun/lwawt/macosx/CCursorManager.java
浏览文件 @
33d7f099
...
...
@@ -51,15 +51,6 @@ final class CCursorManager extends LWCursorManager {
@Override
protected
Point
getCursorPosition
()
{
synchronized
(
this
)
{
if
(
isDragging
)
{
// during the drag operation, the appkit thread is blocked,
// so nativeGetCursorPosition invocation may cause a deadlock.
// In order to avoid this, we returns last know cursor position.
return
new
Point
(
dragPos
);
}
}
final
Point2D
nativePosition
=
nativeGetCursorPosition
();
return
new
Point
((
int
)
nativePosition
.
getX
(),
(
int
)
nativePosition
.
getY
());
}
...
...
@@ -101,31 +92,4 @@ final class CCursorManager extends LWCursorManager {
// do something special
throw
new
RuntimeException
(
"Unimplemented"
);
}
// package private methods to handle cursor change during drag-and-drop
private
boolean
isDragging
=
false
;
private
Point
dragPos
=
null
;
synchronized
void
startDrag
(
int
x
,
int
y
)
{
if
(
isDragging
)
{
throw
new
RuntimeException
(
"Invalid Drag state in CCursorManager!"
);
}
isDragging
=
true
;
dragPos
=
new
Point
(
x
,
y
);
}
synchronized
void
updateDragPosition
(
int
x
,
int
y
)
{
if
(!
isDragging
)
{
throw
new
RuntimeException
(
"Invalid Drag state in CCursorManager!"
);
}
dragPos
.
move
(
x
,
y
);
}
synchronized
void
stopDrag
()
{
if
(!
isDragging
)
{
throw
new
RuntimeException
(
"Invalid Drag state in CCursorManager!"
);
}
isDragging
=
false
;
dragPos
=
null
;
}
}
src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
浏览文件 @
33d7f099
...
...
@@ -174,7 +174,7 @@ public class CDataTransferer extends DataTransferer {
bytes
=
Normalizer
.
normalize
(
new
String
(
bytes
,
"UTF8"
),
Form
.
NFC
).
getBytes
(
"UTF8"
);
}
return
super
.
translateBytes
OrStream
(
stream
,
bytes
,
flavor
,
format
,
transferable
);
return
super
.
translateBytes
(
bytes
,
flavor
,
format
,
transferable
);
}
...
...
@@ -257,16 +257,13 @@ public class CDataTransferer extends DataTransferer {
private
native
byte
[]
imageDataToPlatformImageBytes
(
int
[]
rData
,
int
nW
,
int
nH
);
/**
* Translates either a byte array or an input stream which contain
* Translates a byte array which contains
* platform-specific image data in the given format into an Image.
*/
protected
Image
platformImageBytesOrStreamToImage
(
InputStream
stream
,
byte
[]
bytes
,
long
format
)
throws
IOException
{
byte
[]
imageData
=
bytes
;
if
(
imageData
==
null
)
imageData
=
inputStreamToByteArray
(
stream
);
return
getImageForByteStream
(
imageData
);
protected
Image
platformImageBytesToImage
(
byte
[]
bytes
,
long
format
)
throws
IOException
{
return
getImageForByteStream
(
bytes
);
}
private
native
Image
getImageForByteStream
(
byte
[]
bytes
);
...
...
src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java
浏览文件 @
33d7f099
...
...
@@ -38,8 +38,12 @@ import javax.swing.text.*;
import
javax.accessibility.*
;
import
java.util.Map
;
import
java.util.concurrent.Callable
;
import
sun.awt.dnd.*
;
import
sun.lwawt.LWComponentPeer
;
import
sun.lwawt.LWWindowPeer
;
import
sun.lwawt.PlatformWindow
;
public
final
class
CDragSourceContextPeer
extends
SunDragSourceContextPeer
{
...
...
@@ -104,13 +108,8 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
}
//It sure will be LWComponentPeer instance as rootComponent is a Window
LWComponentPeer
peer
=
(
LWComponentPeer
)
rootComponent
.
getPeer
();
//Get a pointer to a native window
CPlatformWindow
platformWindow
=
(
CPlatformWindow
)
peer
.
getPlatformWindow
();
long
nativeWindowPtr
=
platformWindow
.
getNSWindowPtr
();
// Get drag cursor:
Cursor
cursor
=
this
.
getCursor
();
PlatformWindow
platformWindow
=
((
LWComponentPeer
)
rootComponent
.
getPeer
()).
getPlatformWindow
();
long
nativeViewPtr
=
CPlatformWindow
.
getNativeViewPtr
(
platformWindow
);
// If there isn't any drag image make one of default appearance:
if
(
fDragImage
==
null
)
...
...
@@ -139,19 +138,15 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
try
{
// Create native dragging source:
final
long
nativeDragSource
=
createNativeDragSource
(
component
,
peer
,
nativeWindo
wPtr
,
transferable
,
triggerEvent
,
final
long
nativeDragSource
=
createNativeDragSource
(
component
,
nativeVie
wPtr
,
transferable
,
triggerEvent
,
(
int
)
(
dragOrigin
.
getX
()),
(
int
)
(
dragOrigin
.
getY
()),
extModifiers
,
clickCount
,
timestamp
,
cursor
,
fDragCImage
,
dragImageOffset
.
x
,
dragImageOffset
.
y
,
clickCount
,
timestamp
,
fDragCImage
,
dragImageOffset
.
x
,
dragImageOffset
.
y
,
getDragSourceContext
().
getSourceActions
(),
formats
,
formatMap
);
if
(
nativeDragSource
==
0
)
throw
new
InvalidDnDOperationException
(
""
);
setNativeContext
(
nativeDragSource
);
CCursorManager
.
getInstance
().
startDrag
(
(
int
)
(
dragOrigin
.
getX
()),
(
int
)
(
dragOrigin
.
getY
()));
}
catch
(
Exception
e
)
{
...
...
@@ -160,6 +155,8 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
SunDropTargetContextPeer
.
setCurrentJVMLocalSourceTransferable
(
transferable
);
CCursorManager
.
getInstance
().
setCursor
(
getCursor
());
// Create a new thread to run the dragging operation since it's synchronous, only coming back
// after dragging is finished. This leaves the AWT event thread free to handle AWT events which
// are posted during dragging by native event handlers.
...
...
@@ -173,8 +170,6 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
CCursorManager
.
getInstance
().
stopDrag
();
releaseNativeDragSource
(
nativeDragSource
);
fDragImage
=
null
;
if
(
fDragCImage
!=
null
)
{
...
...
@@ -189,8 +184,6 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
}
catch
(
Exception
e
)
{
CCursorManager
.
getInstance
().
stopDrag
();
final
long
nativeDragSource
=
getNativeContext
();
setNativeContext
(
0
);
releaseNativeDragSource
(
nativeDragSource
);
...
...
@@ -416,13 +409,24 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
final
int
modifiers
,
final
int
x
,
final
int
y
)
{
CCursorManager
.
getInstance
().
updateDragPosition
(
x
,
y
);
try
{
Component
componentAt
=
LWCToolkit
.
invokeAndWait
(
new
Callable
<
Component
>()
{
@Override
public
Component
call
()
{
LWWindowPeer
mouseEventComponent
=
LWWindowPeer
.
getWindowUnderCursor
();
if
(
mouseEventComponent
==
null
)
{
return
null
;
}
Component
root
=
SwingUtilities
.
getRoot
(
mouseEventComponent
.
getTarget
());
if
(
root
==
null
)
{
return
null
;
}
Point
rootLocation
=
root
.
getLocationOnScreen
();
return
getDropTargetAt
(
root
,
x
-
rootLocation
.
x
,
y
-
rootLocation
.
y
);
}
},
getComponent
());
Component
rootComponent
=
SwingUtilities
.
getRoot
(
getComponent
());
if
(
rootComponent
!=
null
)
{
Point
componentPoint
=
new
Point
(
x
,
y
);
SwingUtilities
.
convertPointFromScreen
(
componentPoint
,
rootComponent
);
Component
componentAt
=
SwingUtilities
.
getDeepestComponentAt
(
rootComponent
,
componentPoint
.
x
,
componentPoint
.
y
);
if
(
componentAt
!=
hoveringComponent
)
{
if
(
hoveringComponent
!=
null
)
{
dragExit
(
x
,
y
);
...
...
@@ -432,20 +436,36 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
}
hoveringComponent
=
componentAt
;
}
postDragSourceDragEvent
(
targetActions
,
modifiers
,
x
,
y
,
DISPATCH_MOUSE_MOVED
);
}
catch
(
Exception
e
)
{
throw
new
InvalidDnDOperationException
(
"Failed to handle DragMouseMoved event"
);
}
postDragSourceDragEvent
(
targetActions
,
modifiers
,
x
,
y
,
DISPATCH_MOUSE_MOVED
);
}
/**
* upcall from native code
*/
private
void
dragEnter
(
final
int
targetActions
,
final
int
modifiers
,
final
int
x
,
final
int
y
)
{
CCursorManager
.
getInstance
().
updateDragPosition
(
x
,
y
);
//Returns the first lightweight or heavyweight Component which has a dropTarget ready to accept the drag
//Should be called from the EventDispatchThread
private
static
Component
getDropTargetAt
(
Component
root
,
int
x
,
int
y
)
{
if
(!
root
.
contains
(
x
,
y
)
||
!
root
.
isEnabled
()
||
!
root
.
isVisible
())
{
return
null
;
}
if
(
root
.
getDropTarget
()
!=
null
&&
root
.
getDropTarget
().
isActive
())
{
return
root
;
}
postDragSourceDragEvent
(
targetActions
,
modifiers
,
x
,
y
,
DISPATCH_ENTER
);
if
(
root
instanceof
Container
)
{
for
(
Component
comp
:
((
Container
)
root
).
getComponents
())
{
Point
loc
=
comp
.
getLocation
();
Component
dropTarget
=
getDropTargetAt
(
comp
,
x
-
loc
.
x
,
y
-
loc
.
y
);
if
(
dropTarget
!=
null
)
{
return
dropTarget
;
}
}
}
return
null
;
}
/**
...
...
@@ -455,19 +475,15 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
hoveringComponent
=
null
;
}
public
void
setCursor
(
Cursor
c
)
throws
InvalidDnDOperationException
{
// TODO : BG
//AWTLockAccess.awtLock();
super
.
setCursor
(
c
);
//AWTLockAccess.awtUnlock();
@Override
protected
void
setNativeCursor
(
long
nativeCtxt
,
Cursor
c
,
int
cType
)
{
CCursorManager
.
getInstance
().
setCursor
(
c
);
}
protected
native
void
setNativeCursor
(
long
nativeCtxt
,
Cursor
c
,
int
cType
);
// Native support:
private
native
long
createNativeDragSource
(
Component
component
,
ComponentPeer
peer
,
long
nativePeer
,
Transferable
transferable
,
private
native
long
createNativeDragSource
(
Component
component
,
long
nativePeer
,
Transferable
transferable
,
InputEvent
triggerEvent
,
int
dragPosX
,
int
dragPosY
,
int
extModifiers
,
int
clickCount
,
long
timestamp
,
C
ursor
cursor
,
C
Image
nsDragImage
,
int
dragImageOffsetX
,
int
dragImageOffsetY
,
CImage
nsDragImage
,
int
dragImageOffsetX
,
int
dragImageOffsetY
,
int
sourceActions
,
long
[]
formats
,
Map
formatMap
);
private
native
void
doDragging
(
long
nativeDragSource
);
...
...
src/macosx/classes/sun/lwawt/macosx/CDropTarget.java
浏览文件 @
33d7f099
...
...
@@ -30,6 +30,7 @@ import java.awt.peer.ComponentPeer;
import
java.awt.dnd.DropTarget
;
import
sun.lwawt.LWComponentPeer
;
import
sun.lwawt.PlatformWindow
;
public
final
class
CDropTarget
{
...
...
@@ -50,21 +51,11 @@ public final class CDropTarget {
fComponent
=
component
;
fPeer
=
peer
;
// Make sure the drop target is a ComponentModel:
if
(!(
peer
instanceof
LWComponentPeer
))
throw
new
IllegalArgumentException
(
"CDropTarget's peer must be a LWComponentPeer."
);
// Get model pointer (CButton.m and such) and its native peer:
LWComponentPeer
model
=
(
LWComponentPeer
)
peer
;
if
(
model
.
getPlatformWindow
()
instanceof
CPlatformWindow
)
{
CPlatformWindow
platformWindow
=
(
CPlatformWindow
)
model
.
getPlatformWindow
();
long
nativePeer
=
platformWindow
.
getNSWindowPtr
();
// Create native dragging destination:
fNativeDropTarget
=
this
.
createNativeDropTarget
(
dropTarget
,
component
,
peer
,
nativePeer
);
if
(
fNativeDropTarget
==
0
)
{
throw
new
IllegalStateException
(
"CDropTarget.createNativeDropTarget() failed."
);
}
long
nativePeer
=
CPlatformWindow
.
getNativeViewPtr
(((
LWComponentPeer
)
peer
).
getPlatformWindow
());
// Create native dragging destination:
fNativeDropTarget
=
this
.
createNativeDropTarget
(
dropTarget
,
component
,
peer
,
nativePeer
);
if
(
fNativeDropTarget
==
0
)
{
throw
new
IllegalStateException
(
"CDropTarget.createNativeDropTarget() failed."
);
}
}
...
...
src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java
浏览文件 @
33d7f099
...
...
@@ -112,6 +112,14 @@ public class CEmbeddedFrame extends EmbeddedFrame {
public
void
handleFocusEvent
(
boolean
focused
)
{
this
.
focused
=
focused
;
if
(
focused
)
{
// see bug 8010925
// we can't put this to handleWindowFocusEvent because
// it won't be invoced if focuse is moved to a html element
// on the same page.
CClipboard
clipboard
=
(
CClipboard
)
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
();
clipboard
.
checkPasteboard
();
}
if
(
parentWindowActive
)
{
responder
.
handleWindowFocusEvent
(
focused
,
null
);
}
...
...
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
浏览文件 @
33d7f099
...
...
@@ -875,6 +875,21 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
}
}
/**
* Helper method to get a pointer to the native view from the PlatformWindow.
*/
static
long
getNativeViewPtr
(
PlatformWindow
platformWindow
)
{
long
nativePeer
=
0L
;
if
(
platformWindow
instanceof
CPlatformWindow
)
{
nativePeer
=
((
CPlatformWindow
)
platformWindow
).
getContentView
().
getAWTView
();
}
else
if
(
platformWindow
instanceof
CViewPlatformEmbeddedFrame
){
nativePeer
=
((
CViewPlatformEmbeddedFrame
)
platformWindow
).
getNSViewPtr
();
}
else
{
throw
new
IllegalArgumentException
(
"Unsupported platformWindow implementation"
);
}
return
nativePeer
;
}
/*************************************************************
* Callbacks from the AWTWindow and AWTView objc classes.
*************************************************************/
...
...
src/macosx/native/sun/awt/CClipboard.m
浏览文件 @
33d7f099
...
...
@@ -189,18 +189,18 @@ static CClipboard *sClipboard = nil;
-
(
void
)
checkPasteboard
:(
id
)
application
{
AWT_ASSERT_APPKIT_THREAD
;
//NSLog(@"CClipboard checkPasteboard oldCount %d newCount %d newTypes %@", fChangeCount, [[NSPasteboard generalPasteboard] changeCount], [[NSPasteboard generalPasteboard] types]);
// This is called via NSApplicationDidBecomeActiveNotification.
// If the change count on the general pasteboard is different than when we set it
// someone else put data on the clipboard. That means the current owner lost ownership.
NSInteger
newChangeCount
=
[[
NSPasteboard
generalPasteboard
]
changeCount
];
if
(
fChangeCount
!=
newChangeCount
)
{
fChangeCount
=
newChangeCount
;
[
self
pasteboardChangedOwner
:[
NSPasteboard
generalPasteboard
]];
}
}
...
...
@@ -371,4 +371,21 @@ JNF_COCOA_EXIT(env);
return
returnValue
;
}
/*
* Class: sun_lwawt_macosx_CClipboard
* Method: checkPasteboard
* Signature: ()V
*/
JNIEXPORT
void
JNICALL
Java_sun_lwawt_macosx_CClipboard_checkPasteboard
(
JNIEnv
*
env
,
jobject
inObject
)
{
JNF_COCOA_ENTER
(
env
);
[
ThreadUtilities
performOnMainThreadWaiting
:
YES
block
:
^
(){
[[
CClipboard
sharedClipboard
]
checkPasteboard
:
nil
];
}];
JNF_COCOA_EXIT
(
env
);
}
src/macosx/native/sun/awt/CDragSource.h
浏览文件 @
33d7f099
...
...
@@ -33,7 +33,6 @@
@private
NSView
*
fView
;
jobject
fComponent
;
jobject
fComponentPeer
;
jobject
fDragSourceContextPeer
;
jobject
fTransferable
;
...
...
@@ -43,8 +42,6 @@
jint
fClickCount
;
jint
fModifiers
;
jobject
fCursor
;
NSImage
*
fDragImage
;
NSPoint
fDragImageOffset
;
...
...
@@ -59,12 +56,22 @@
+
(
CDragSource
*
)
currentDragSource
;
// Common methods:
-
(
id
)
init
:(
jobject
)
jdragsourcecontextpeer
component
:(
jobject
)
jcomponent
peer
:(
jobject
)
jpeer
control
:(
id
)
control
transferable
:(
jobject
)
jtransferable
triggerEvent
:(
jobject
)
jtrigger
dragPosX
:(
jint
)
dragPosX
dragPosY
:(
jint
)
dragPosY
modifiers
:(
jint
)
extModifiers
clickCount
:(
jint
)
clickCount
timeStamp
:(
jlong
)
timeStamp
cursor
:(
jobject
)
jcursor
dragImage
:(
jobject
)
jnsdragimage
dragImageOffsetX
:(
jint
)
jdragimageoffsetx
dragImageOffsetY
:(
jint
)
jdragimageoffsety
sourceActions
:(
jint
)
jsourceactions
formats
:(
jlongArray
)
jformats
formatMap
:(
jobject
)
jformatmap
;
-
(
id
)
init
:(
jobject
)
jDragSourceContextPeer
component
:(
jobject
)
jComponent
control
:(
id
)
control
transferable
:(
jobject
)
jTransferable
triggerEvent
:(
jobject
)
jTrigger
dragPosX
:(
jint
)
dragPosX
dragPosY
:(
jint
)
dragPosY
modifiers
:(
jint
)
extModifiers
clickCount
:(
jint
)
clickCount
timeStamp
:(
jlong
)
timeStamp
dragImage
:(
jobject
)
jDragImage
dragImageOffsetX
:(
jint
)
jDragImageOffsetX
dragImageOffsetY
:(
jint
)
jDragImageOffsetY
sourceActions
:(
jint
)
jSourceActions
formats
:(
jlongArray
)
jFormats
formatMap
:(
jobject
)
jFormatMap
;
-
(
void
)
removeFromView
:(
JNIEnv
*
)
env
;
...
...
src/macosx/native/sun/awt/CDragSource.m
浏览文件 @
33d7f099
...
...
@@ -84,12 +84,22 @@ static BOOL sNeedsEnter;
return
sCurrentDragSource
;
}
-
(
id
)
init
:(
jobject
)
jdragsourcecontextpeer
component
:(
jobject
)
jcomponent
peer
:(
jobject
)
jpeer
control
:(
id
)
control
transferable
:(
jobject
)
jtransferable
triggerEvent
:(
jobject
)
jtrigger
dragPosX
:(
jint
)
dragPosX
dragPosY
:(
jint
)
dragPosY
modifiers
:(
jint
)
extModifiers
clickCount
:(
jint
)
clickCount
timeStamp
:(
jlong
)
timeStamp
cursor
:(
jobject
)
jcursor
dragImage
:(
jobject
)
jnsdragimage
dragImageOffsetX
:(
jint
)
jdragimageoffsetx
dragImageOffsetY
:(
jint
)
jdragimageoffsety
sourceActions
:(
jint
)
jsourceactions
formats
:(
jlongArray
)
jformats
formatMap
:(
jobject
)
jformatmap
-
(
id
)
init
:(
jobject
)
jDragSourceContextPeer
component
:(
jobject
)
jComponent
control
:(
id
)
control
transferable
:(
jobject
)
jTransferable
triggerEvent
:(
jobject
)
jTrigger
dragPosX
:(
jint
)
dragPosX
dragPosY
:(
jint
)
dragPosY
modifiers
:(
jint
)
extModifiers
clickCount
:(
jint
)
clickCount
timeStamp
:(
jlong
)
timeStamp
dragImage
:(
jobject
)
jDragImage
dragImageOffsetX
:(
jint
)
jDragImageOffsetX
dragImageOffsetY
:(
jint
)
jDragImageOffsetY
sourceActions
:(
jint
)
jSourceActions
formats
:(
jlongArray
)
jFormats
formatMap
:(
jobject
)
jFormatMap
{
self
=
[
super
init
];
DLog2
(
@"[CDragSource init]: %@
\n
"
,
self
);
...
...
@@ -100,27 +110,25 @@ static BOOL sNeedsEnter;
// Construct the object if we have a valid model for it:
if
(
control
!=
nil
)
{
JNIEnv
*
env
=
[
ThreadUtilities
getJNIEnv
];
fComponent
=
JNFNewGlobalRef
(
env
,
jcomponent
);
fComponentPeer
=
JNFNewGlobalRef
(
env
,
jpeer
);
fDragSourceContextPeer
=
JNFNewGlobalRef
(
env
,
jdragsourcecontextpeer
);
fComponent
=
JNFNewGlobalRef
(
env
,
jComponent
);
fDragSourceContextPeer
=
JNFNewGlobalRef
(
env
,
jDragSourceContextPeer
);
fTransferable
=
JNFNewGlobalRef
(
env
,
jtransferable
);
fTriggerEvent
=
JNFNewGlobalRef
(
env
,
jtrigger
);
fCursor
=
JNFNewGlobalRef
(
env
,
jcursor
);
fTransferable
=
JNFNewGlobalRef
(
env
,
jTransferable
);
fTriggerEvent
=
JNFNewGlobalRef
(
env
,
jTrigger
);
if
(
j
nsdragi
mage
)
{
if
(
j
DragI
mage
)
{
JNF_MEMBER_CACHE
(
nsImagePtr
,
CImageClass
,
"ptr"
,
"J"
);
jlong
imgPtr
=
JNFGetLongField
(
env
,
j
nsdragi
mage
,
nsImagePtr
);
jlong
imgPtr
=
JNFGetLongField
(
env
,
j
DragI
mage
,
nsImagePtr
);
fDragImage
=
(
NSImage
*
)
jlong_to_ptr
(
imgPtr
);
// Double-casting prevents compiler 'd$|//
[
fDragImage
retain
];
}
fDragImageOffset
=
NSMakePoint
(
j
dragimageoffsetx
,
jdragimageoffsety
);
fDragImageOffset
=
NSMakePoint
(
j
DragImageOffsetX
,
jDragImageOffsetY
);
fSourceActions
=
j
sourcea
ctions
;
fFormats
=
JNFNewGlobalRef
(
env
,
j
f
ormats
);
fFormatMap
=
JNFNewGlobalRef
(
env
,
j
formatm
ap
);
fSourceActions
=
j
SourceA
ctions
;
fFormats
=
JNFNewGlobalRef
(
env
,
j
F
ormats
);
fFormatMap
=
JNFNewGlobalRef
(
env
,
j
FormatM
ap
);
fTriggerEventTimeStamp
=
timeStamp
;
fDragPos
=
NSMakePoint
(
dragPosX
,
dragPosY
);
...
...
@@ -129,9 +137,8 @@ static BOOL sNeedsEnter;
// Set this object as a dragging source:
AWTView
*
awtView
=
[((
NSWindow
*
)
control
)
contentView
];
fView
=
[
awtView
retain
];
[
awtView
setDragSource
:
self
];
fView
=
[(
AWTView
*
)
control
retain
];
[
fView
setDragSource
:
self
];
// Let AWTEvent know Java drag is getting underway:
[
NSEvent
javaDraggingBegin
];
...
...
@@ -158,11 +165,6 @@ static BOOL sNeedsEnter;
fComponent
=
NULL
;
}
if
(
fComponentPeer
!=
NULL
)
{
JNFDeleteGlobalRef
(
env
,
fComponentPeer
);
fComponentPeer
=
NULL
;
}
if
(
fDragSourceContextPeer
!=
NULL
)
{
JNFDeleteGlobalRef
(
env
,
fDragSourceContextPeer
);
fDragSourceContextPeer
=
NULL
;
...
...
@@ -178,11 +180,6 @@ static BOOL sNeedsEnter;
fTriggerEvent
=
NULL
;
}
if
(
fCursor
!=
NULL
)
{
JNFDeleteGlobalRef
(
env
,
fCursor
);
fCursor
=
NULL
;
}
if
(
fFormats
!=
NULL
)
{
JNFDeleteGlobalRef
(
env
,
fFormats
);
fFormats
=
NULL
;
...
...
@@ -586,11 +583,6 @@ static BOOL sNeedsEnter;
{
AWT_ASSERT_NOT_APPKIT_THREAD
;
// Set the drag cursor (or not 3839999)
//JNIEnv *env = [ThreadUtilities getJNIEnv];
//jobject gCursor = JNFNewGlobalRef(env, fCursor);
//[EventFactory setJavaCursor:gCursor withEnv:env];
[
self
performSelectorOnMainThread
:
@selector
(
doDrag
)
withObject
:
nil
waitUntilDone
:
YES
];
// AWT_THREADING Safe (called from unique asynchronous thread)
}
...
...
src/macosx/native/sun/awt/CDragSourceContextPeer.m
浏览文件 @
33d7f099
...
...
@@ -34,12 +34,13 @@
/*
* Class: sun_lwawt_macosx_CDragSourceContextPeer
* Method: createNativeDragSource
* Signature: (Ljava/awt/Component;Ljava/awt/peer/ComponentPeer;JLjava/awt/datatransfer/Transferable;Ljava/awt/event/InputEvent;IIIIJLjava/awt/Cursor;IJIII[JLjava/util/Map;)J
* Signature: (Ljava/awt/Component;JLjava/awt/datatransfer/Transferable;
Ljava/awt/event/InputEvent;IIIIJIJIII[JLjava/util/Map;)J
*/
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativeDragSource
(JNIEnv *env, jobject jthis, jobject jcomponent, j
object jpeer, j
long jnativepeer, jobject jtransferable,
(JNIEnv *env, jobject jthis, jobject jcomponent, jlong jnativepeer, jobject jtransferable,
jobject jtrigger, jint jdragposx, jint jdragposy, jint jextmodifiers, jint jclickcount, jlong jtimestamp,
jobject j
cursor, jobject j
nsdragimage, jint jdragimageoffsetx, jint jdragimageoffsety,
jobject jnsdragimage, jint jdragimageoffsetx, jint jdragimageoffsety,
jint jsourceactions, jlongArray jformats, jobject jformatmap)
{
id controlObj = (id) jlong_to_ptr(jnativepeer);
...
...
@@ -47,12 +48,22 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativ
JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
dragSource = [[CDragSource alloc] init:jthis component:jcomponent peer:jpeer control:controlObj
transferable:jtransferable triggerEvent:jtrigger dragPosX:jdragposx
dragPosY:jdragposy modifiers:jextmodifiers clickCount:jclickcount timeStamp:jtimestamp
cursor:jcursor dragImage:jnsdragimage dragImageOffsetX:jdragimageoffsetx
dragImageOffsetY:jdragimageoffsety sourceActions:jsourceactions
formats:jformats formatMap:jformatmap];
dragSource = [[CDragSource alloc] init:jthis
component:jcomponent
control:controlObj
transferable:jtransferable
triggerEvent:jtrigger
dragPosX:jdragposx
dragPosY:jdragposy
modifiers:jextmodifiers
clickCount:jclickcount
timeStamp:jtimestamp
dragImage:jnsdragimage
dragImageOffsetX:jdragimageoffsetx
dragImageOffsetY:jdragimageoffsety
sourceActions:jsourceactions
formats:jformats
formatMap:jformatmap];
}];
JNF_COCOA_EXIT(env);
...
...
@@ -94,19 +105,3 @@ JNF_COCOA_ENTER(env);
[dragSource removeFromView:env];
JNF_COCOA_EXIT(env);
}
/*
* Class: sun_lwawt_macosx_CDragSourceContextPeer
* Method: setNativeCursor
* Signature: (JLjava/awt/Cursor;I)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_setNativeCursor
(JNIEnv *env, jobject jthis, jlong nativeDragSourceVal, jobject jcursor, jint jcursortype)
{
//AWT_ASSERT_NOT_APPKIT_THREAD;
//JNF_COCOA_ENTER(env);
// jobject gCursor = JNFNewGlobalRef(env, jcursor);
// [EventFactory setJavaCursor:gCursor withEnv:env];
//JNF_COCOA_EXIT(env);
}
src/macosx/native/sun/awt/CDropTarget.m
浏览文件 @
33d7f099
...
...
@@ -81,9 +81,8 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
fComponent
=
JNFNewGlobalRef
(
env
,
jcomponent
);
fDropTarget
=
JNFNewGlobalRef
(
env
,
jdropTarget
);
AWTView
*
awtView
=
[((
NSWindow
*
)
control
)
contentView
];
fView
=
[
awtView
retain
];
[
awtView
setDropTarget
:
self
];
fView
=
[((
AWTView
*
)
control
)
retain
];
[
fView
setDropTarget
:
self
];
}
else
{
...
...
@@ -177,6 +176,10 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
{
DLog2
(
@"[CDropTarget dealloc]: %@
\n
"
,
self
);
if
(
sCurrentDropTarget
==
self
)
{
sCurrentDropTarget
=
nil
;
}
[
fView
release
];
fView
=
nil
;
...
...
@@ -490,7 +493,10 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
JNF_MEMBER_CACHE
(
handleEnterMessageMethod
,
jc_CDropTargetContextPeer
,
"handleEnterMessage"
,
"(Ljava/awt/Component;IIII[JJ)I"
);
if
(
sDraggingError
==
FALSE
)
{
// Double-casting self gets rid of 'different size' compiler warning:
actions
=
JNFCallIntMethod
(
env
,
fDropTargetContextPeer
,
handleEnterMessageMethod
,
fComponent
,
(
jint
)
javaLocation
.
x
,
(
jint
)
javaLocation
.
y
,
dropAction
,
actions
,
formats
,
ptr_to_jlong
(
self
));
// AWT_THREADING Safe (CToolkitThreadBlockedHandler)
// AWT_THREADING Safe (CToolkitThreadBlockedHandler)
actions
=
JNFCallIntMethod
(
env
,
fDropTargetContextPeer
,
handleEnterMessageMethod
,
fComponent
,
(
jint
)
javaLocation
.
x
,
(
jint
)
javaLocation
.
y
,
dropAction
,
actions
,
formats
,
ptr_to_jlong
(
self
));
}
if
(
sDraggingError
==
FALSE
)
{
...
...
@@ -510,11 +516,6 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
// Remember the dragOp for no-op'd update messages:
sUpdateOperation
=
dragOp
;
}
// If we are in the same process as the sender, make the sender post the appropriate message
if
(
sender
)
{
[[
CDragSource
currentDragSource
]
postDragEnter
];
}
}
// 9-11-02 Note: the native event thread would not handle an exception gracefully:
...
...
@@ -608,11 +609,9 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
JNF_MEMBER_CACHE
(
handleExitMessageMethod
,
jc_CDropTargetContextPeer
,
"handleExitMessage"
,
"(Ljava/awt/Component;J)V"
);
if
(
sDraggingError
==
FALSE
)
{
DLog3
(
@" - dragExit: loc native %f, %f
\n
"
,
sDraggingLocation
.
x
,
sDraggingLocation
.
y
);
JNFCallVoidMethod
(
env
,
fDropTargetContextPeer
,
handleExitMessageMethod
,
fComponent
,
ptr_to_jlong
(
self
));
// AWT_THREADING Safe (CToolkitThreadBlockedHandler)
// If we are in the same process as the sender, make the sender post the appropriate message
if
(
sender
)
{
[[
CDragSource
currentDragSource
]
postDragExit
];
}
// AWT_THREADING Safe (CToolkitThreadBlockedHandler)
JNFCallVoidMethod
(
env
,
fDropTargetContextPeer
,
handleExitMessageMethod
,
fComponent
,
ptr_to_jlong
(
self
));
}
// 5-27-03 Note: [Radar 3270455]
...
...
src/macosx/native/sun/awt/CTextPipe.m
浏览文件 @
33d7f099
...
...
@@ -501,10 +501,22 @@ static inline void doDrawGlyphsPipe_getGlyphVectorLengthAndAlloc
int
*
uniChars
=
(
int
*
)
malloc
(
sizeof
(
int
)
*
length
);
CGSize
*
advances
=
(
CGSize
*
)
malloc
(
sizeof
(
CGSize
)
*
length
);
if
(
glyphs
==
NULL
||
advances
==
NULL
)
if
(
glyphs
==
NULL
||
uniChars
==
NULL
||
advances
==
NULL
)
{
(
*
env
)
->
DeleteLocalRef
(
env
,
glyphsArray
);
[
NSException
raise
:
NSMallocException
format
:
@"%s-%s:%d"
,
THIS_FILE
,
__FUNCTION__
,
__LINE__
];
if
(
glyphs
)
{
free
(
glyphs
);
}
if
(
uniChars
)
{
free
(
uniChars
);
}
if
(
advances
)
{
free
(
advances
);
}
return
;
}
...
...
src/share/classes/java/awt/datatransfer/DataFlavor.java
浏览文件 @
33d7f099
...
...
@@ -25,7 +25,6 @@
package
java.awt.datatransfer
;
import
java.awt.Toolkit
;
import
java.io.*
;
import
java.nio.*
;
import
java.util.*
;
...
...
@@ -162,6 +161,18 @@ public class DataFlavor implements Externalizable, Cloneable {
}
}
/*
* private initializer
*/
static
private
DataFlavor
initHtmlDataFlavor
(
String
htmlFlavorType
)
{
try
{
return
new
DataFlavor
(
"text/html; class=java.lang.String;document="
+
htmlFlavorType
+
";charset=Unicode"
);
}
catch
(
Exception
e
)
{
return
null
;
}
}
/**
* The <code>DataFlavor</code> representing a Java Unicode String class,
* where:
...
...
@@ -245,6 +256,46 @@ public class DataFlavor implements Externalizable, Cloneable {
*/
public
static
final
String
javaRemoteObjectMimeType
=
"application/x-java-remote-object"
;
/**
* Represents a piece of an HTML markup. The markup consists of the part
* selected on the source side. Therefore some tags in the markup may be
* unpaired. If the flavor is used to represent the data in
* a {@link Transferable} instance, no additional changes will be made.
* This DataFlavor instance represents the same HTML markup as DataFlavor
* instances which content MIME type does not contain document parameter
* and representation class is the String class.
* <pre>
* representationClass = String
* mimeType = "text/html"
* </pre>
*/
public
static
DataFlavor
selectionHtmlFlavor
=
initHtmlDataFlavor
(
"selection"
);
/**
* Represents a piece of an HTML markup. If possible, the markup received
* from a native system is supplemented with pair tags to be
* a well-formed HTML markup. If the flavor is used to represent the data in
* a {@link Transferable} instance, no additional changes will be made.
* <pre>
* representationClass = String
* mimeType = "text/html"
* </pre>
*/
public
static
DataFlavor
fragmentHtmlFlavor
=
initHtmlDataFlavor
(
"fragment"
);
/**
* Represents a piece of an HTML markup. If possible, the markup
* received from a native system is supplemented with additional
* tags to make up a well-formed HTML document. If the flavor is used to
* represent the data in a {@link Transferable} instance,
* no additional changes will be made.
* <pre>
* representationClass = String
* mimeType = "text/html"
* </pre>
*/
public
static
DataFlavor
allHtmlFlavor
=
initHtmlDataFlavor
(
"all"
);
/**
* Constructs a new <code>DataFlavor</code>. This constructor is
* provided only for the purpose of supporting the
...
...
@@ -949,24 +1000,35 @@ public class DataFlavor implements Externalizable, Cloneable {
return
false
;
}
if
(
"text"
.
equals
(
getPrimaryType
())
&&
DataTransferer
.
doesSubtypeSupportCharset
(
this
)
&&
representationClass
!=
null
&&
!(
isRepresentationClassReader
()
||
String
.
class
.
equals
(
representationClass
)
||
isRepresentationClassCharBuffer
()
||
DataTransferer
.
charArrayClass
.
equals
(
representationClass
)))
{
String
thisCharset
=
DataTransferer
.
canonicalName
(
getParameter
(
"charset"
));
String
thatCharset
=
DataTransferer
.
canonicalName
(
that
.
getParameter
(
"charset"
));
if
(
thisCharset
==
null
)
{
if
(
thatCharset
!=
null
)
{
return
false
;
if
(
"text"
.
equals
(
getPrimaryType
()))
{
if
(
DataTransferer
.
doesSubtypeSupportCharset
(
this
)
&&
representationClass
!=
null
&&
!(
isRepresentationClassReader
()
||
String
.
class
.
equals
(
representationClass
)
||
isRepresentationClassCharBuffer
()
||
DataTransferer
.
charArrayClass
.
equals
(
representationClass
)))
{
String
thisCharset
=
DataTransferer
.
canonicalName
(
getParameter
(
"charset"
));
String
thatCharset
=
DataTransferer
.
canonicalName
(
that
.
getParameter
(
"charset"
));
if
(
thisCharset
==
null
)
{
if
(
thatCharset
!=
null
)
{
return
false
;
}
}
else
{
if
(!
thisCharset
.
equals
(
thatCharset
))
{
return
false
;
}
}
}
else
{
if
(!
thisCharset
.
equals
(
thatCharset
))
{
}
if
(
"html"
.
equals
(
getSubType
())
&&
this
.
getParameter
(
"document"
)
!=
null
)
{
if
(!
this
.
getParameter
(
"document"
).
equals
(
that
.
getParameter
(
"document"
)))
{
return
false
;
}
}
...
...
src/share/classes/java/awt/datatransfer/SystemFlavorMap.java
浏览文件 @
33d7f099
...
...
@@ -41,7 +41,7 @@ import java.util.ArrayList;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.Linked
Lis
t
;
import
java.util.Linked
HashSe
t
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -100,6 +100,11 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
*/
private
static
final
String
TEXT_PLAIN_BASE_TYPE
=
"text/plain"
;
/**
* A String representing text/html MIME type.
*/
private
static
final
String
HTML_TEXT_BASE_TYPE
=
"text/html"
;
/**
* This constant is passed to flavorToNativeLookup() to indicate that a
* a native should be synthesized, stored, and returned by encoding the
...
...
@@ -113,7 +118,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
* text DataFlavors).
* Do not use the field directly, use getNativeToFlavor() instead.
*/
private
Map
nativeToFlavor
=
new
HashMap
();
private
final
Map
<
String
,
List
<
DataFlavor
>>
nativeToFlavor
=
new
HashMap
<>
();
/**
* Accessor to nativeToFlavor map. Since we use lazy initialization we must
...
...
@@ -122,7 +127,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
*
* @return nativeToFlavor
*/
private
Map
getNativeToFlavor
()
{
private
Map
<
String
,
List
<
DataFlavor
>>
getNativeToFlavor
()
{
if
(!
isMapInitialized
)
{
initSystemFlavorMap
();
}
...
...
@@ -134,7 +139,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
* native Strings.
* Do not use the field directly, use getFlavorToNative() instead.
*/
private
Map
flavorToNative
=
new
HashMap
();
private
final
Map
flavorToNative
=
new
HashMap
();
/**
* Accessor to flavorToNative map. Since we use lazy initialization we must
...
...
@@ -421,14 +426,17 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
}
}
// For text/* flavors, store mappings in separate maps to
// enable dynamic mapping generation at a run-time.
final
LinkedHashSet
<
DataFlavor
>
dfs
=
new
LinkedHashSet
<>();
dfs
.
add
(
flavor
);
if
(
"text"
.
equals
(
flavor
.
getPrimaryType
()))
{
store
(
value
,
key
,
getFlavorToNative
());
store
(
key
,
value
,
getNativeToFlavor
());
}
else
{
store
(
flavor
,
key
,
getFlavorToNative
());
store
(
key
,
flavor
,
getNativeToFlavor
());
dfs
.
addAll
(
convertMimeTypeToDataFlavors
(
value
));
}
for
(
DataFlavor
df
:
dfs
)
{
store
(
df
,
key
,
getFlavorToNative
());
store
(
key
,
df
,
getNativeToFlavor
());
}
}
}
...
...
@@ -530,7 +538,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
* only if the specified native is encoded as a Java MIME type.
*/
private
List
nativeToFlavorLookup
(
String
nat
)
{
List
flavors
=
(
List
)
getNativeToFlavor
().
get
(
nat
);
List
<
DataFlavor
>
flavors
=
getNativeToFlavor
().
get
(
nat
);
if
(
nat
!=
null
&&
!
disabledMappingGenerationKeys
.
contains
(
nat
))
{
DataTransferer
transferer
=
DataTransferer
.
getInstance
();
...
...
@@ -625,7 +633,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
getNativesForFlavorCache
.
remove
(
flav
);
getNativesForFlavorCache
.
remove
(
null
);
List
flavors
=
(
List
)
getNativeToFlavor
().
get
(
encoded
);
List
<
DataFlavor
>
flavors
=
getNativeToFlavor
().
get
(
encoded
);
if
(
flavors
==
null
)
{
flavors
=
new
ArrayList
(
1
);
getNativeToFlavor
().
put
(
encoded
,
flavors
);
...
...
@@ -681,7 +689,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
}
if
(
flav
==
null
)
{
retval
=
new
ArrayList
(
getNativeToFlavor
().
keySet
());
retval
=
new
ArrayList
<
String
>
(
getNativeToFlavor
().
keySet
());
}
else
if
(
disabledMappingGenerationKeys
.
contains
(
flav
))
{
// In this case we shouldn't synthesize a native for this flavor,
// since its mappings were explicitly specified.
...
...
@@ -809,140 +817,162 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable {
}
}
LinkedList
retval
=
new
LinkedList
();
final
LinkedHashSet
<
DataFlavor
>
returnValue
=
new
LinkedHashSet
<>();
if
(
nat
==
null
)
{
List
natives
=
getNativesForFlavor
(
null
);
HashSet
dups
=
new
HashSet
(
natives
.
size
());
final
List
<
String
>
natives
=
getNativesForFlavor
(
null
);
for
(
Iterator
natives_iter
=
natives
.
iterator
();
natives_iter
.
hasNext
();
)
for
(
String
n
:
natives
)
{
List
flavors
=
getFlavorsForNative
((
String
)
natives_iter
.
next
());
for
(
Iterator
flavors_iter
=
flavors
.
iterator
();
flavors_iter
.
hasNext
();
)
final
List
<
DataFlavor
>
flavors
=
getFlavorsForNative
(
n
);
for
(
DataFlavor
df
:
flavors
)
{
Object
flavor
=
flavors_iter
.
next
();
if
(
dups
.
add
(
flavor
))
{
retval
.
add
(
flavor
);
}
returnValue
.
add
(
df
);
}
}
}
else
{
List
flavors
=
nativeToFlavorLookup
(
nat
);
final
List
<
DataFlavor
>
flavors
=
nativeToFlavorLookup
(
nat
);
if
(
disabledMappingGenerationKeys
.
contains
(
nat
))
{
return
flavors
;
}
HashSet
dups
=
new
HashSet
(
flavors
.
size
());
final
List
<
DataFlavor
>
flavorsAndBaseTypes
=
nativeToFlavorLookup
(
nat
);
List
flavorsAndbaseTypes
=
nativeToFlavorLookup
(
nat
);
for
(
DataFlavor
df
:
flavorsAndBaseTypes
)
{
returnValue
.
add
(
df
);
if
(
"text"
.
equals
(
df
.
getPrimaryType
()))
{
try
{
returnValue
.
addAll
(
convertMimeTypeToDataFlavors
(
new
MimeType
(
df
.
getMimeType
()
).
getBaseType
()));
}
catch
(
MimeTypeParseException
e
)
{
e
.
printStackTrace
();
}
}
}
for
(
Iterator
flavorsAndbaseTypes_iter
=
flavorsAndbaseTypes
.
iterator
();
flavorsAndbaseTypes_iter
.
hasNext
();
)
}
final
ArrayList
arrayList
=
new
ArrayList
(
returnValue
);
getFlavorsForNativeCache
.
put
(
nat
,
new
SoftReference
(
arrayList
));
return
(
List
)
arrayList
.
clone
();
}
private
static
LinkedHashSet
<
DataFlavor
>
convertMimeTypeToDataFlavors
(
final
String
baseType
)
{
final
LinkedHashSet
<
DataFlavor
>
returnValue
=
new
LinkedHashSet
<
DataFlavor
>();
String
subType
=
null
;
try
{
final
MimeType
mimeType
=
new
MimeType
(
baseType
);
subType
=
mimeType
.
getSubType
();
}
catch
(
MimeTypeParseException
mtpe
)
{
// Cannot happen, since we checked all mappings
// on load from flavormap.properties.
assert
(
false
);
}
if
(
DataTransferer
.
doesSubtypeSupportCharset
(
subType
,
null
))
{
if
(
TEXT_PLAIN_BASE_TYPE
.
equals
(
baseType
))
{
Object
value
=
flavorsAndbaseTypes_iter
.
next
();
if
(
value
instanceof
String
)
{
String
baseType
=
(
String
)
value
;
String
subType
=
null
;
returnValue
.
add
(
DataFlavor
.
stringFlavor
);
}
for
(
String
unicodeClassName
:
UNICODE_TEXT_CLASSES
)
{
final
String
mimeType
=
baseType
+
";charset=Unicode;class="
+
unicodeClassName
;
final
LinkedHashSet
<
String
>
mimeTypes
=
handleHtmlMimeTypes
(
baseType
,
mimeType
);
for
(
String
mt
:
mimeTypes
)
{
DataFlavor
toAdd
=
null
;
try
{
MimeType
mimeType
=
new
MimeType
(
baseType
);
subType
=
mimeType
.
getSubType
();
}
catch
(
MimeTypeParseException
mtpe
)
{
// Cannot happen, since we checked all mappings
// on load from flavormap.properties.
assert
(
false
);
toAdd
=
new
DataFlavor
(
mt
);
}
catch
(
ClassNotFoundException
cannotHappen
)
{
}
if
(
DataTransferer
.
doesSubtypeSupportCharset
(
subType
,
null
))
{
if
(
TEXT_PLAIN_BASE_TYPE
.
equals
(
baseType
)
&&
dups
.
add
(
DataFlavor
.
stringFlavor
))
{
retval
.
add
(
DataFlavor
.
stringFlavor
);
}
for
(
int
i
=
0
;
i
<
UNICODE_TEXT_CLASSES
.
length
;
i
++)
{
DataFlavor
toAdd
=
null
;
try
{
toAdd
=
new
DataFlavor
(
baseType
+
";charset=Unicode;class="
+
UNICODE_TEXT_CLASSES
[
i
]);
}
catch
(
ClassNotFoundException
cannotHappen
)
{
}
if
(
dups
.
add
(
toAdd
))
{
retval
.
add
(
toAdd
);
}
}
returnValue
.
add
(
toAdd
);
}
}
for
(
Iterator
charset_iter
=
DataTransferer
.
standardEncodings
();
charset_iter
.
hasNext
();
)
{
String
charset
=
(
String
)
charset_iter
.
next
();
for
(
String
charset
:
DataTransferer
.
standardEncodings
())
{
for
(
int
i
=
0
;
i
<
ENCODED_TEXT_CLASSES
.
length
;
i
++)
{
DataFlavor
toAdd
=
null
;
try
{
toAdd
=
new
DataFlavor
(
baseType
+
";charset="
+
charset
+
";class="
+
ENCODED_TEXT_CLASSES
[
i
]);
}
catch
(
ClassNotFoundException
cannotHappen
)
{
}
for
(
String
encodedTextClass
:
ENCODED_TEXT_CLASSES
)
{
final
String
mimeType
=
baseType
+
";charset="
+
charset
+
";class="
+
encodedTextClass
;
// Check for equality to plainTextFlavor so
// that we can ensure that the exact charset of
// plainTextFlavor, not the canonical charset
// or another equivalent charset with a
// different name, is used.
if
(
toAdd
.
equals
(
DataFlavor
.
plainTextFlavor
))
{
toAdd
=
DataFlavor
.
plainTextFlavor
;
}
final
LinkedHashSet
<
String
>
mimeTypes
=
handleHtmlMimeTypes
(
baseType
,
mimeType
);
if
(
dups
.
add
(
toAdd
))
{
retval
.
add
(
toAdd
);
}
}
}
for
(
String
mt
:
mimeTypes
)
{
if
(
TEXT_PLAIN_BASE_TYPE
.
equals
(
baseType
)
&&
dups
.
add
(
DataFlavor
.
plainTextFlavor
))
{
retval
.
add
(
DataFlavor
.
plainTextFlavor
);
}
}
else
{
// Non-charset text natives should be treated as
// opaque, 8-bit data in any of its various
// representations.
for
(
int
i
=
0
;
i
<
ENCODED_TEXT_CLASSES
.
length
;
i
++)
{
DataFlavor
toAdd
=
null
;
try
{
toAdd
=
new
DataFlavor
(
baseType
+
";class="
+
ENCODED_TEXT_CLASSES
[
i
]);
}
catch
(
ClassNotFoundException
cannotHappen
)
{
}
DataFlavor
df
=
null
;
if
(
dups
.
add
(
toAdd
))
{
retval
.
add
(
toAdd
);
try
{
df
=
new
DataFlavor
(
mt
);
// Check for equality to plainTextFlavor so
// that we can ensure that the exact charset of
// plainTextFlavor, not the canonical charset
// or another equivalent charset with a
// different name, is used.
if
(
df
.
equals
(
DataFlavor
.
plainTextFlavor
))
{
df
=
DataFlavor
.
plainTextFlavor
;
}
}
catch
(
ClassNotFoundException
cannotHappen
)
{
}
}
}
else
{
DataFlavor
flavor
=
(
DataFlavor
)
value
;
if
(
dups
.
add
(
flavor
))
{
retval
.
add
(
flavor
);
returnValue
.
add
(
df
);
}
}
}
if
(
TEXT_PLAIN_BASE_TYPE
.
equals
(
baseType
))
{
returnValue
.
add
(
DataFlavor
.
plainTextFlavor
);
}
}
else
{
// Non-charset text natives should be treated as
// opaque, 8-bit data in any of its various
// representations.
for
(
String
encodedTextClassName
:
ENCODED_TEXT_CLASSES
)
{
DataFlavor
toAdd
=
null
;
try
{
toAdd
=
new
DataFlavor
(
baseType
+
";class="
+
encodedTextClassName
);
}
catch
(
ClassNotFoundException
cannotHappen
)
{
}
returnValue
.
add
(
toAdd
);
}
}
return
returnValue
;
}
ArrayList
arrayList
=
new
ArrayList
(
retval
);
getFlavorsForNativeCache
.
put
(
nat
,
new
SoftReference
(
arrayList
));
return
(
List
)
arrayList
.
clone
();
private
static
final
String
[]
htmlDocumntTypes
=
new
String
[]
{
"all"
,
"selection"
,
"fragment"
};
private
static
LinkedHashSet
<
String
>
handleHtmlMimeTypes
(
String
baseType
,
String
mimeType
)
{
LinkedHashSet
<
String
>
returnValues
=
new
LinkedHashSet
<>();
if
(
HTML_TEXT_BASE_TYPE
.
equals
(
baseType
))
{
for
(
String
documentType
:
htmlDocumntTypes
)
{
returnValues
.
add
(
mimeType
+
";document="
+
documentType
);
}
}
else
{
returnValues
.
add
(
mimeType
);
}
return
returnValues
;
}
/**
...
...
src/share/classes/java/awt/dnd/InvalidDnDOperationException.java
浏览文件 @
33d7f099
...
...
@@ -36,7 +36,7 @@ package java.awt.dnd;
public
class
InvalidDnDOperationException
extends
IllegalStateException
{
private
static
final
long
serialVersionUID
=
51566765002478162
78L
;
private
static
final
long
serialVersionUID
=
-
60625687411939566
78L
;
static
private
String
dft_msg
=
"The operation requested cannot be performed by the DnD system since it is not in the appropriate state"
;
...
...
src/share/classes/sun/awt/datatransfer/DataTransferer.java
浏览文件 @
33d7f099
此差异已折叠。
点击以展开。
src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java
浏览文件 @
33d7f099
...
...
@@ -275,7 +275,7 @@ public abstract class SunDragSourceContextPeer implements DragSourceContextPeer
* upcall from native code
*/
pr
ivate
void
dragEnter
(
final
int
targetActions
,
pr
otected
void
dragEnter
(
final
int
targetActions
,
final
int
modifiers
,
final
int
x
,
final
int
y
)
{
postDragSourceDragEvent
(
targetActions
,
modifiers
,
x
,
y
,
DISPATCH_ENTER
);
...
...
@@ -353,10 +353,6 @@ public abstract class SunDragSourceContextPeer implements DragSourceContextPeer
public
static
void
setDragDropInProgress
(
boolean
b
)
throws
InvalidDnDOperationException
{
if
(
dragDropInProgress
==
b
)
{
throw
new
InvalidDnDOperationException
(
getExceptionMessage
(
b
));
}
synchronized
(
SunDragSourceContextPeer
.
class
)
{
if
(
dragDropInProgress
==
b
)
{
throw
new
InvalidDnDOperationException
(
getExceptionMessage
(
b
));
...
...
src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java
浏览文件 @
33d7f099
...
...
@@ -57,7 +57,6 @@ import sun.awt.AppContext;
import
sun.awt.SunToolkit
;
import
sun.awt.datatransfer.DataTransferer
;
import
sun.awt.datatransfer.ToolkitThreadBlockedHandler
;
import
sun.security.util.SecurityConstants
;
/**
* <p>
...
...
@@ -260,6 +259,7 @@ public abstract class SunDropTargetContextPeer implements DropTargetContextPeer,
}
final
long
format
=
lFormat
.
longValue
();
Object
ret
=
getNativeData
(
format
);
if
(
ret
instanceof
byte
[])
{
...
...
@@ -270,11 +270,14 @@ public abstract class SunDropTargetContextPeer implements DropTargetContextPeer,
throw
new
InvalidDnDOperationException
(
e
.
getMessage
());
}
}
else
if
(
ret
instanceof
InputStream
)
{
InputStream
inputStream
=
(
InputStream
)
ret
;
try
{
return
DataTransferer
.
getInstance
().
translateStream
(
(
InputStream
)
ret
,
df
,
format
,
this
);
translateStream
(
inputStream
,
df
,
format
,
this
);
}
catch
(
IOException
e
)
{
throw
new
InvalidDnDOperationException
(
e
.
getMessage
());
}
finally
{
inputStream
.
close
();
}
}
else
{
throw
new
IOException
(
"no native data was transfered"
);
...
...
src/share/classes/sun/swing/JLightweightFrame.java
浏览文件 @
33d7f099
...
...
@@ -72,8 +72,10 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
public
JLightweightFrame
()
{
super
();
add
(
rootPane
,
BorderLayout
.
CENTER
);
setBackground
(
new
Color
(
0
,
0
,
0
,
0
));
setFocusTraversalPolicy
(
new
LayoutFocusTraversalPolicy
());
if
(
getGraphicsConfiguration
().
isTranslucencyCapable
())
{
setBackground
(
new
Color
(
0
,
0
,
0
,
0
));
}
}
/**
...
...
src/solaris/classes/sun/awt/X11/XDataTransferer.java
浏览文件 @
33d7f099
...
...
@@ -212,10 +212,9 @@ public class XDataTransferer extends DataTransferer {
* Translates either a byte array or an input stream which contain
* platform-specific image data in the given format into an Image.
*/
protected
Image
platformImageBytesOrStreamToImage
(
InputStream
inputStream
,
byte
[]
bytes
,
long
format
)
throws
IOException
{
protected
Image
platformImageBytesToImage
(
byte
[]
bytes
,
long
format
)
throws
IOException
{
String
mimeType
=
null
;
if
(
format
==
PNG_ATOM
.
getAtom
())
{
mimeType
=
"image/png"
;
...
...
@@ -235,7 +234,7 @@ public class XDataTransferer extends DataTransferer {
}
}
if
(
mimeType
!=
null
)
{
return
standardImageBytes
OrStreamToImage
(
inputStream
,
bytes
,
mimeType
);
return
standardImageBytes
ToImage
(
bytes
,
mimeType
);
}
else
{
String
nativeFormat
=
getNativeForFormat
(
format
);
throw
new
IOException
(
"Translation from "
+
nativeFormat
+
...
...
@@ -330,8 +329,8 @@ public class XDataTransferer extends DataTransferer {
* a valid MIME and return a list of flavors to which the data in this MIME
* type can be translated by the Data Transfer subsystem.
*/
public
List
getPlatformMappingsForNative
(
String
nat
)
{
List
flavors
=
new
ArrayList
();
public
List
<
DataFlavor
>
getPlatformMappingsForNative
(
String
nat
)
{
List
<
DataFlavor
>
flavors
=
new
ArrayList
();
if
(
nat
==
null
)
{
return
flavors
;
...
...
@@ -346,16 +345,14 @@ public class XDataTransferer extends DataTransferer {
return
flavors
;
}
Object
value
=
df
;
DataFlavor
value
=
df
;
final
String
primaryType
=
df
.
getPrimaryType
();
final
String
baseType
=
primaryType
+
"/"
+
df
.
getSubType
();
// For text formats we map natives to MIME strings instead of data
// flavors to enable dynamic text native-to-flavor mapping generation.
// See SystemFlavorMap.getFlavorsForNative() for details.
if
(
"text"
.
equals
(
primaryType
))
{
value
=
primaryType
+
"/"
+
df
.
getSubType
();
}
else
if
(
"image"
.
equals
(
primaryType
))
{
if
(
"image"
.
equals
(
primaryType
))
{
Iterator
readers
=
ImageIO
.
getImageReadersByMIMEType
(
baseType
);
if
(
readers
.
hasNext
())
{
flavors
.
add
(
DataFlavor
.
imageFlavor
);
...
...
@@ -438,16 +435,13 @@ public class XDataTransferer extends DataTransferer {
}
}
}
else
if
(
DataTransferer
.
isFlavorCharsetTextType
(
df
))
{
final
Iterator
iter
=
DataTransferer
.
standardEncodings
();
// stringFlavor is semantically equivalent to the standard
// "text/plain" MIME type.
if
(
DataFlavor
.
stringFlavor
.
equals
(
df
))
{
baseType
=
"text/plain"
;
}
while
(
iter
.
hasNext
())
{
String
encoding
=
(
String
)
iter
.
next
();
for
(
String
encoding
:
DataTransferer
.
standardEncodings
())
{
if
(!
encoding
.
equals
(
charset
))
{
natives
.
add
(
baseType
+
";charset="
+
encoding
);
}
...
...
src/solaris/classes/sun/awt/X11/XFramePeer.java
浏览文件 @
33d7f099
...
...
@@ -642,5 +642,11 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
return
getBounds
();
}
public
void
emulateActivation
(
boolean
doActivate
)
{}
public
void
emulateActivation
(
boolean
doActivate
)
{
if
(
doActivate
)
{
handleWindowFocusIn
(
0
);
}
else
{
handleWindowFocusOut
(
null
,
0
);
}
}
}
src/solaris/classes/sun/awt/X11/XLightweightFramePeer.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package
sun.awt.X11
;
import
java.awt.Graphics
;
import
sun.awt.LightweightFrame
;
public
class
XLightweightFramePeer
extends
XFramePeer
{
XLightweightFramePeer
(
LightweightFrame
target
)
{
super
(
target
);
}
private
LightweightFrame
getLwTarget
()
{
return
(
LightweightFrame
)
target
;
}
@Override
public
Graphics
getGraphics
()
{
return
getLwTarget
().
getGraphics
();
}
@Override
public
void
xSetVisible
(
boolean
visible
)
{
this
.
visible
=
visible
;
}
@Override
protected
void
requestXFocus
(
long
time
,
boolean
timeProvided
)
{
// not sending native focus events to the proxy
}
@Override
public
void
setGrab
(
boolean
grab
)
{
if
(
grab
)
{
getLwTarget
().
grabFocus
();
}
else
{
getLwTarget
().
ungrabFocus
();
}
}
}
src/solaris/classes/sun/awt/X11/XToolkit.java
浏览文件 @
33d7f099
...
...
@@ -420,7 +420,9 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
}
public
FramePeer
createLightweightFrame
(
LightweightFrame
target
)
{
return
null
;
FramePeer
peer
=
new
XLightweightFramePeer
(
target
);
targetCreatedPeer
(
target
,
peer
);
return
peer
;
}
public
FramePeer
createFrame
(
Frame
target
)
{
...
...
src/windows/classes/sun/awt/windows/WDataTransferer.java
浏览文件 @
33d7f099
此差异已折叠。
点击以展开。
test/java/awt/datatransfer/HTMLDataFlavors/HTMLDataFlavorTest.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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 7075105
@summary WIN: Provide a way to format HTML on drop
@author Denis Fokin: area=datatransfer
@build HtmlTransferable PutAllHtmlFlavorsOnClipboard
@build PutOnlyAllHtmlFlavorOnClipboard PutSelectionAndFragmentHtmlFlavorsOnClipboard
@run main HTMLDataFlavorTest
*/
import
java.awt.*
;
import
java.awt.datatransfer.*
;
import
java.io.*
;
import
java.util.HashMap
;
public
class
HTMLDataFlavorTest
{
private
static
HashMap
<
DataFlavor
,
String
>
dataFlavors
=
new
HashMap
<
DataFlavor
,
String
>();
public
static
void
main
(
String
[]
args
)
throws
IOException
,
UnsupportedFlavorException
{
dataFlavors
.
put
(
DataFlavor
.
allHtmlFlavor
,
HtmlTransferable
.
ALL_HTML_AS_STRING
);
dataFlavors
.
put
(
DataFlavor
.
fragmentHtmlFlavor
,
HtmlTransferable
.
FRAGMENT_HTML_AS_STRING
);
dataFlavors
.
put
(
DataFlavor
.
selectionHtmlFlavor
,
HtmlTransferable
.
SELECTION_HTML_AS_STRING
);
Clipboard
clipboard
=
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
();
resetClipboardContent
(
clipboard
);
// 1. Put all three html flavors on clipboard.
// Get the data within the same JVM
// Expect that the resulted html is the selection
// wrapped in all three types
clipboard
.
setContents
(
new
HtmlTransferable
(
HtmlTransferable
.
htmlDataFlavors
),
null
);
// Test local transfer
testClipboardContent
(
clipboard
,
HtmlTransferable
.
htmlDataFlavors
);
resetClipboardContent
(
clipboard
);
// 2. Put only DataFlavor.allHtmlFlavor on clipboard.
// Expect that the resulted html is the all
// wrapped in all three types
putHtmlInAnotherProcess
(
"PutOnlyAllHtmlFlavorOnClipboard"
);
for
(
DataFlavor
df
:
HtmlTransferable
.
htmlDataFlavors
)
{
if
(!
clipboard
.
isDataFlavorAvailable
(
df
))
{
throw
new
RuntimeException
(
"The data should be available."
);
}
}
if
(!
clipboard
.
getData
(
DataFlavor
.
allHtmlFlavor
).
toString
().
equals
(
dataFlavors
.
get
(
DataFlavor
.
allHtmlFlavor
).
toString
()))
{
throw
new
RuntimeException
(
"DataFlavor.allHtmlFlavor data "
+
"should be identical to the data put on the source side."
);
}
resetClipboardContent
(
clipboard
);
// 3. Put all three html flavors on clipboard.
// Expect that the resulted html is the selection
// wrapped in all three types
putHtmlInAnotherProcess
(
"PutAllHtmlFlavorsOnClipboard"
);
for
(
DataFlavor
df
:
HtmlTransferable
.
htmlDataFlavors
)
{
if
(!
clipboard
.
isDataFlavorAvailable
(
df
))
{
throw
new
RuntimeException
(
"The data should be available."
);
}
}
if
(!
clipboard
.
getData
(
DataFlavor
.
selectionHtmlFlavor
).
toString
().
equals
(
dataFlavors
.
get
(
DataFlavor
.
selectionHtmlFlavor
)))
{
throw
new
RuntimeException
(
"DataFlavor.allHtmlFlavor data "
+
"should be identical to the data put on the source side."
);
}
}
private
static
void
resetClipboardContent
(
Clipboard
clipboard
)
{
clipboard
.
setContents
(
new
StringSelection
(
"The data is used to empty the clipboard content"
),
null
);
}
private
static
void
putHtmlInAnotherProcess
(
String
putterCommand
)
{
try
{
String
command
=
System
.
getProperty
(
"java.home"
)
+
"/bin/java -cp "
+
System
.
getProperty
(
"test.classes"
,
"."
)
+
" "
+
putterCommand
;
System
.
out
.
println
(
"Execute process : "
+
command
);
Process
p
=
Runtime
.
getRuntime
().
exec
(
command
);
try
{
p
.
waitFor
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
System
.
out
.
println
(
"The data has been set remotely"
);
try
(
BufferedReader
stdstr
=
new
BufferedReader
(
new
InputStreamReader
(
p
.
getInputStream
())))
{
String
s
;
while
((
s
=
stdstr
.
readLine
())
!=
null
)
{
s
=
stdstr
.
readLine
();
System
.
out
.
println
(
s
);
}
}
try
(
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
p
.
getErrorStream
())))
{
String
s
;
while
((
s
=
br
.
readLine
())
!=
null
)
{
s
=
br
.
readLine
();
System
.
err
.
println
(
s
);
}
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
private
static
void
testClipboardContent
(
Clipboard
clipboard
,
DataFlavor
[]
expectedDataFlavors
)
throws
UnsupportedFlavorException
,
IOException
{
for
(
DataFlavor
df
:
clipboard
.
getAvailableDataFlavors
())
{
System
.
out
.
println
(
"available df: "
+
df
.
getMimeType
());
}
for
(
DataFlavor
df
:
expectedDataFlavors
)
{
if
(!
clipboard
.
isDataFlavorAvailable
(
df
))
{
throw
new
RuntimeException
(
"The data should be available."
);
}
System
.
out
.
println
(
"Checking \""
+
df
.
getParameter
(
"document"
)
+
"\" for correspondence"
);
if
(!
dataFlavors
.
get
(
df
).
toString
().
equals
(
clipboard
.
getData
(
df
).
toString
()))
{
System
.
err
.
println
(
"Expected data: "
+
dataFlavors
.
get
(
df
).
toString
());
System
.
err
.
println
(
"Actual data: "
+
clipboard
.
getData
(
df
).
toString
());
throw
new
RuntimeException
(
"An html flavor with parameter \""
+
df
.
getParameter
(
"document"
)
+
"\" does not correspond to the transferred data."
);
}
}
}
}
test/java/awt/datatransfer/HTMLDataFlavors/HtmlTransferable.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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
java.awt.datatransfer.DataFlavor
;
import
java.awt.datatransfer.Transferable
;
import
java.awt.datatransfer.UnsupportedFlavorException
;
import
java.io.IOException
;
/**
* A transferable that mimic ie html data
*/
class
HtmlTransferable
implements
Transferable
{
final
static
String
SOURCE_HTML
=
"<html><head><title>Simple html content</title></head>"
+
"<body><ol><li>Dasha</li><li>Masha</li><li>Lida</li></ol></body></html>"
;
// Data identical to ie output for the next html without end of lines,
// that is gotten by java system clipboard
// <html>
// <head>
// <title>Simple html content</title>
// </head>
// <body>
// <ol>
// <li>Dasha</li>
// <li>Masha</li>
// <li>Lida</li>
// </ol>
// </body>
// </html>
final
static
String
ALL_HTML_AS_STRING
=
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
+
"\n"
+
"<HTML><HEAD><TITLE>Simple html content</TITLE></HEAD>\n"
+
"\n"
+
"<BODY>\n"
+
"\n"
+
"<OL><!--StartFragment--><LI>Masha\n"
+
"<LI>Lida</LI><!--EndFragment--></OL>\n"
+
"</BODY>\n"
+
"</HTML>"
;
final
static
String
FRAGMENT_HTML_AS_STRING
=
"<LI>Masha\n"
+
"<LI>Lida</LI>"
;
final
static
String
SELECTION_HTML_AS_STRING
=
"<LI>Masha"
+
"<LI>Lida</LI>"
;
private
DataFlavor
[]
supportedDataFlavors
;
final
static
DataFlavor
[]
htmlDataFlavors
=
new
DataFlavor
[]
{
DataFlavor
.
allHtmlFlavor
,
DataFlavor
.
fragmentHtmlFlavor
,
DataFlavor
.
selectionHtmlFlavor
};
@Override
public
DataFlavor
[]
getTransferDataFlavors
()
{
return
supportedDataFlavors
;
}
@Override
public
boolean
isDataFlavorSupported
(
DataFlavor
flavor
)
{
for
(
DataFlavor
supportedDataFlavor
:
supportedDataFlavors
)
{
if
(
supportedDataFlavor
.
equals
(
flavor
))
{
return
true
;
}
}
return
false
;
}
HtmlTransferable
(
DataFlavor
[]
supportedDataFlavors
)
{
this
.
supportedDataFlavors
=
supportedDataFlavors
;
}
@Override
public
Object
getTransferData
(
DataFlavor
flavor
)
throws
UnsupportedFlavorException
,
IOException
{
if
(
isDataFlavorSupported
(
flavor
))
{
if
(
flavor
.
equals
(
DataFlavor
.
allHtmlFlavor
))
{
return
ALL_HTML_AS_STRING
;
}
else
if
(
flavor
.
equals
(
DataFlavor
.
fragmentHtmlFlavor
))
{
return
FRAGMENT_HTML_AS_STRING
;
}
else
if
(
flavor
.
equals
(
DataFlavor
.
selectionHtmlFlavor
))
{
return
SELECTION_HTML_AS_STRING
;
}
}
throw
new
UnsupportedFlavorException
(
flavor
);
}
}
test/java/awt/datatransfer/HTMLDataFlavors/ManualHTMLDataFlavorTest.html
0 → 100644
浏览文件 @
33d7f099
<html>
<!--
@test
@bug 7075105
@summary WIN: Provide a way to format HTML on drop
@author Denis Fokin area=datatransfer
@run applet/manual=yesno ManualHTMLDataFlavorTest.html
-->
<head>
<title>
ManualHTMLDataFlavorTest
</title>
</head>
<body>
<h1>
ManualHTMLDataFlavorTest
<br>
Bug ID: 7075105
</h1>
<p>
See the dialog box (usually in upper left corner) for instructions
</p>
<APPLET
CODE=
"ManualHTMLDataFlavorTest.class"
WIDTH=
200
HEIGHT=
200
></APPLET>
</body>
</html>
test/java/awt/datatransfer/HTMLDataFlavors/ManualHTMLDataFlavorTest.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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 7075105
@summary WIN: Provide a way to format HTML on drop
@author Denis Fokin: area=datatransfer
@run applet/manual=yesno ManualHTMLDataFlavorTest
*/
import
java.applet.Applet
;
import
java.awt.*
;
import
java.awt.datatransfer.DataFlavor
;
import
java.awt.datatransfer.Transferable
;
import
java.awt.datatransfer.UnsupportedFlavorException
;
import
java.awt.dnd.*
;
import
java.io.IOException
;
public
class
ManualHTMLDataFlavorTest
extends
Applet
{
class
DropPane
extends
Panel
implements
DropTargetListener
{
DropPane
()
{
requestFocus
();
setBackground
(
Color
.
red
);
setDropTarget
(
new
DropTarget
(
this
,
DnDConstants
.
ACTION_COPY
,
this
));
}
@Override
public
Dimension
getPreferredSize
()
{
return
new
Dimension
(
200
,
200
);
}
@Override
public
void
dragEnter
(
DropTargetDragEvent
dtde
)
{
dtde
.
acceptDrag
(
DnDConstants
.
ACTION_COPY
);
}
@Override
public
void
dragOver
(
DropTargetDragEvent
dtde
)
{
dtde
.
acceptDrag
(
DnDConstants
.
ACTION_COPY
);
}
@Override
public
void
dropActionChanged
(
DropTargetDragEvent
dtde
)
{
dtde
.
acceptDrag
(
DnDConstants
.
ACTION_COPY
);
}
@Override
public
void
dragExit
(
DropTargetEvent
dte
)
{}
@Override
public
void
drop
(
DropTargetDropEvent
dtde
)
{
if
(!
dtde
.
isDataFlavorSupported
(
DataFlavor
.
allHtmlFlavor
))
{
Sysout
.
println
(
"DataFlavor.allHtmlFlavor is not present in the system clipboard"
);
dtde
.
rejectDrop
();
return
;
}
else
if
(!
dtde
.
isDataFlavorSupported
(
DataFlavor
.
fragmentHtmlFlavor
))
{
Sysout
.
println
(
"DataFlavor.fragmentHtmlFlavor is not present in the system clipboard"
);
dtde
.
rejectDrop
();
return
;
}
else
if
(!
dtde
.
isDataFlavorSupported
(
DataFlavor
.
selectionHtmlFlavor
))
{
Sysout
.
println
(
"DataFlavor.selectionHtmlFlavor is not present in the system clipboard"
);
dtde
.
rejectDrop
();
return
;
}
dtde
.
acceptDrop
(
DnDConstants
.
ACTION_COPY
);
Transferable
t
=
dtde
.
getTransferable
();
try
{
Sysout
.
println
(
"ALL:"
);
Sysout
.
println
(
t
.
getTransferData
(
DataFlavor
.
allHtmlFlavor
).
toString
());
Sysout
.
println
(
"FRAGMENT:"
);
Sysout
.
println
(
t
.
getTransferData
(
DataFlavor
.
fragmentHtmlFlavor
).
toString
());
Sysout
.
println
(
"SELECTION:"
);
Sysout
.
println
(
t
.
getTransferData
(
DataFlavor
.
selectionHtmlFlavor
).
toString
());
}
catch
(
UnsupportedFlavorException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
public
void
init
()
{
String
[]
instructions
=
{
"1) The test contains a drop-aware panel with a red background"
,
"2) Open some page in a browser, select some text"
,
" Drag and drop it on the red panel"
,
" IMPORTANT NOTE: the page should be stored locally."
,
" otherwise for instance iexplore can prohibit drag and drop from"
,
" the browser to other applications because of"
,
" the protected mode restrictions."
,
"3) Check the data in the output area of this dialog"
,
"5) The output should not contain information that any of"
,
" flavors is not present in the system clipboard"
,
"6) The output should contain data in three different formats"
,
" provided by the system clipboard"
,
" - Data after the \"ALL:\" marker should include the data"
,
" from the the \"SELECTION:\" marker"
,
" - Data after the \"FRAGMENT\" marker should include the data"
,
" from the \"SELECTION:\" marker and may be some closing"
,
" tags could be added to the mark-up"
,
" - Data after the \"SELECTION:\" marker should correspond"
,
" to the data selected in the browser"
,
"7) If the above requirements are met, the test is passed"
};
add
(
new
DropPane
());
Sysout
.
createDialogWithInstructions
(
instructions
);
new
ManualHTMLDataFlavorTest
();
}
public
void
start
()
{
setSize
(
200
,
200
);
setVisible
(
true
);
validate
();
}
// start()
}
/* Place other classes related to the test after this line */
/****************************************************
Standard Test Machinery
DO NOT modify anything below -- it's a standard
chunk of code whose purpose is to make user
interaction uniform, and thereby make it simpler
to read and understand someone else's test.
****************************************************/
/**
This is part of the standard test machinery.
It creates a dialog (with the instructions), and is the interface
for sending text messages to the user.
To print the instructions, send an array of strings to Sysout.createDialog
WithInstructions method. Put one line of instructions per array entry.
To display a message for the tester to see, simply call Sysout.println
with the string to be displayed.
This mimics System.out.println but works within the test harness as well
as standalone.
*/
class
Sysout
{
private
static
TestDialog
dialog
;
public
static
void
createDialogWithInstructions
(
String
[]
instructions
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
dialog
.
printInstructions
(
instructions
);
dialog
.
setVisible
(
true
);
println
(
"Any messages for the tester will display here."
);
}
public
static
void
createDialog
(
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
String
[]
defInstr
=
{
"Instructions will appear here. "
,
""
}
;
dialog
.
printInstructions
(
defInstr
);
dialog
.
setVisible
(
true
);
println
(
"Any messages for the tester will display here."
);
}
public
static
void
printInstructions
(
String
[]
instructions
)
{
dialog
.
printInstructions
(
instructions
);
}
public
static
void
println
(
String
messageIn
)
{
dialog
.
displayMessage
(
messageIn
);
}
}
// Sysout class
/**
This is part of the standard test machinery. It provides a place for the
test instructions to be displayed, and a place for interactive messages
to the user to be displayed.
To have the test instructions displayed, see Sysout.
To have a message to the user be displayed, see Sysout.
Do not call anything in this dialog directly.
*/
class
TestDialog
extends
Dialog
{
TextArea
instructionsText
;
TextArea
messageText
;
int
maxStringLength
=
80
;
//DO NOT call this directly, go through Sysout
public
TestDialog
(
Frame
frame
,
String
name
)
{
super
(
frame
,
name
);
int
scrollBoth
=
TextArea
.
SCROLLBARS_BOTH
;
instructionsText
=
new
TextArea
(
""
,
15
,
maxStringLength
,
scrollBoth
);
add
(
"North"
,
instructionsText
);
messageText
=
new
TextArea
(
""
,
5
,
maxStringLength
,
scrollBoth
);
add
(
"Center"
,
messageText
);
pack
();
setVisible
(
true
);
}
// TestDialog()
//DO NOT call this directly, go through Sysout
public
void
printInstructions
(
String
[]
instructions
)
{
//Clear out any current instructions
instructionsText
.
setText
(
""
);
//Go down array of instruction strings
String
printStr
,
remainingStr
;
for
(
int
i
=
0
;
i
<
instructions
.
length
;
i
++
)
{
//chop up each into pieces maxSringLength long
remainingStr
=
instructions
[
i
];
while
(
remainingStr
.
length
()
>
0
)
{
//if longer than max then chop off first max chars to print
if
(
remainingStr
.
length
()
>=
maxStringLength
)
{
//Try to chop on a word boundary
int
posOfSpace
=
remainingStr
.
lastIndexOf
(
' '
,
maxStringLength
-
1
);
if
(
posOfSpace
<=
0
)
posOfSpace
=
maxStringLength
-
1
;
printStr
=
remainingStr
.
substring
(
0
,
posOfSpace
+
1
);
remainingStr
=
remainingStr
.
substring
(
posOfSpace
+
1
);
}
//else just print
else
{
printStr
=
remainingStr
;
remainingStr
=
""
;
}
instructionsText
.
append
(
printStr
+
"\n"
);
}
// while
}
// for
}
//printInstructions()
//DO NOT call this directly, go through Sysout
public
void
displayMessage
(
String
messageIn
)
{
messageText
.
append
(
messageIn
+
"\n"
);
System
.
out
.
println
(
messageIn
);
}
}
// TestDialog class
test/java/awt/datatransfer/HTMLDataFlavors/PutAllHtmlFlavorsOnClipboard.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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
java.awt.*
;
public
class
PutAllHtmlFlavorsOnClipboard
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"PutAllHtmlFlavorsOnClipboard has been started."
);
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
().
setContents
(
new
HtmlTransferable
(
HtmlTransferable
.
htmlDataFlavors
),
null
);
System
.
out
.
println
(
"Data has been put on clipboard in a separate process"
);
}
}
test/java/awt/datatransfer/HTMLDataFlavors/PutOnlyAllHtmlFlavorOnClipboard.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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
java.awt.*
;
import
java.awt.datatransfer.DataFlavor
;
public
class
PutOnlyAllHtmlFlavorOnClipboard
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"PutOnlyAllHtmlFlavorOnClipboard has been started."
);
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
().
setContents
(
new
HtmlTransferable
(
new
DataFlavor
[]{
DataFlavor
.
allHtmlFlavor
}),
null
);
System
.
out
.
println
(
"Data has been put on clipboard in a separate process"
);
}
}
test/java/awt/datatransfer/HTMLDataFlavors/PutSelectionAndFragmentHtmlFlavorsOnClipboard.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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
java.awt.*
;
import
java.awt.datatransfer.DataFlavor
;
public
class
PutSelectionAndFragmentHtmlFlavorsOnClipboard
{
public
static
void
main
(
String
[]
args
)
{
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
().
setContents
(
new
HtmlTransferable
(
new
DataFlavor
[]{
DataFlavor
.
selectionHtmlFlavor
,
DataFlavor
.
fragmentHtmlFlavor
}),
null
);
}
}
test/java/awt/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java
0 → 100644
浏览文件 @
33d7f099
/*
* Copyright (c) 2013, 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 @summary JVM crash if the frame is disposed in DropTargetListener
* @author Petr Pchelko
* @library ../../regtesthelpers
* @build Util
* @compile DisposeFrameOnDragTest.java
* @run main/othervm DisposeFrameOnDragTest
*/
import
java.awt.AWTException
;
import
java.awt.Point
;
import
java.awt.Robot
;
import
java.awt.dnd.DropTargetAdapter
;
import
java.awt.dnd.DropTargetDragEvent
;
import
java.awt.dnd.DropTargetDropEvent
;
import
java.awt.event.InputEvent
;
import
java.lang.reflect.InvocationTargetException
;
import
java.util.TooManyListenersException
;
import
javax.swing.JFrame
;
import
javax.swing.JTextArea
;
import
javax.swing.SwingUtilities
;
import
test.java.awt.regtesthelpers.Util
;
public
class
DisposeFrameOnDragTest
{
private
static
JTextArea
textArea
;
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
constructTestUI
();
}
});
Util
.
waitForIdle
(
null
);
try
{
Point
loc
=
textArea
.
getLocationOnScreen
();
Util
.
drag
(
new
Robot
(),
new
Point
((
int
)
loc
.
x
+
3
,
(
int
)
loc
.
y
+
3
),
new
Point
((
int
)
loc
.
x
+
40
,
(
int
)
loc
.
y
+
40
),
InputEvent
.
BUTTON1_MASK
);
}
catch
(
AWTException
ex
)
{
throw
new
RuntimeException
(
"Could not initiate a drag operation"
);
}
Util
.
waitForIdle
(
null
);
}
private
static
void
constructTestUI
()
{
final
JFrame
frame
=
new
JFrame
(
"Test frame"
);
textArea
=
new
JTextArea
(
"Drag Me!"
);
try
{
textArea
.
getDropTarget
().
addDropTargetListener
(
new
DropTargetAdapter
()
{
@Override
public
void
drop
(
DropTargetDropEvent
dtde
)
{
//IGNORE
}
@Override
public
void
dragOver
(
DropTargetDragEvent
dtde
)
{
frame
.
dispose
();
}
});
}
catch
(
TooManyListenersException
ex
)
{
throw
new
RuntimeException
(
ex
);
}
textArea
.
setSize
(
100
,
100
);
textArea
.
setDragEnabled
(
true
);
textArea
.
select
(
0
,
textArea
.
getText
().
length
());
frame
.
add
(
textArea
);
frame
.
setBounds
(
100
,
100
,
100
,
100
);
frame
.
setVisible
(
true
);
}
}
test/javax/swing/JPopupMenu/6827786/bug6827786.java
浏览文件 @
33d7f099
/*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007,
2013,
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
...
...
@@ -65,7 +65,11 @@ public class bug6827786 {
checkfocus
();
// select menu
Util
.
hitKeys
(
robot
,
KeyEvent
.
VK_ALT
,
KeyEvent
.
VK_F
);
if
(
sun
.
awt
.
OSInfo
.
getOSType
()
==
sun
.
awt
.
OSInfo
.
OSType
.
MACOSX
)
{
Util
.
hitKeys
(
robot
,
KeyEvent
.
VK_CONTROL
,
KeyEvent
.
VK_ALT
,
KeyEvent
.
VK_F
);
}
else
{
Util
.
hitKeys
(
robot
,
KeyEvent
.
VK_ALT
,
KeyEvent
.
VK_F
);
}
// select submenu
Util
.
hitKeys
(
robot
,
KeyEvent
.
VK_S
);
toolkit
.
realSync
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录