提交 0d0b24f7 编写于 作者: M mcherkas

8010925: COPY AND PASTE TO AND FROM SIGNED APPLET FAILS AFTER FIRST INTERNAL COPY PRFRMD

Reviewed-by: anthony, serb
上级 a5f2d9d1
...@@ -110,4 +110,12 @@ public class CClipboard extends SunClipboard { ...@@ -110,4 +110,12 @@ public class CClipboard extends SunClipboard {
public native void declareTypes(long[] formats, SunClipboard newOwner); public native void declareTypes(long[] formats, SunClipboard newOwner);
public native void setData(byte[] data, long format); 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();
} }
...@@ -112,6 +112,14 @@ public class CEmbeddedFrame extends EmbeddedFrame { ...@@ -112,6 +112,14 @@ public class CEmbeddedFrame extends EmbeddedFrame {
public void handleFocusEvent(boolean focused) { public void handleFocusEvent(boolean focused) {
this.focused = 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) { if (parentWindowActive) {
responder.handleWindowFocusEvent(focused, null); responder.handleWindowFocusEvent(focused, null);
} }
......
...@@ -189,18 +189,18 @@ static CClipboard *sClipboard = nil; ...@@ -189,18 +189,18 @@ static CClipboard *sClipboard = nil;
- (void) checkPasteboard:(id)application { - (void) checkPasteboard:(id)application {
AWT_ASSERT_APPKIT_THREAD; AWT_ASSERT_APPKIT_THREAD;
//NSLog(@"CClipboard checkPasteboard oldCount %d newCount %d newTypes %@", fChangeCount, [[NSPasteboard generalPasteboard] changeCount], [[NSPasteboard generalPasteboard] types]); //NSLog(@"CClipboard checkPasteboard oldCount %d newCount %d newTypes %@", fChangeCount, [[NSPasteboard generalPasteboard] changeCount], [[NSPasteboard generalPasteboard] types]);
// This is called via NSApplicationDidBecomeActiveNotification. // This is called via NSApplicationDidBecomeActiveNotification.
// If the change count on the general pasteboard is different than when we set it // 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. // someone else put data on the clipboard. That means the current owner lost ownership.
NSInteger newChangeCount = [[NSPasteboard generalPasteboard] changeCount]; NSInteger newChangeCount = [[NSPasteboard generalPasteboard] changeCount];
if (fChangeCount != newChangeCount) { if (fChangeCount != newChangeCount) {
fChangeCount = newChangeCount; fChangeCount = newChangeCount;
[self pasteboardChangedOwner:[NSPasteboard generalPasteboard]]; [self pasteboardChangedOwner:[NSPasteboard generalPasteboard]];
} }
} }
...@@ -371,4 +371,21 @@ JNF_COCOA_EXIT(env); ...@@ -371,4 +371,21 @@ JNF_COCOA_EXIT(env);
return returnValue; 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);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册