8010925: COPY AND PASTE TO AND FROM SIGNED APPLET FAILS AFTER FIRST INTERNAL COPY PRFRMD
Reviewed-by: anthony, serb
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CClipboard.java Wed Apr 03 20:42:55 2013 +0400
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CClipboard.java Wed Apr 03 20:54:26 2013 +0400
@@ -110,4 +110,12 @@
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();
}
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Wed Apr 03 20:42:55 2013 +0400
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Wed Apr 03 20:54:26 2013 +0400
@@ -112,6 +112,14 @@
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);
}
--- a/jdk/src/macosx/native/sun/awt/CClipboard.m Wed Apr 03 20:42:55 2013 +0400
+++ b/jdk/src/macosx/native/sun/awt/CClipboard.m Wed Apr 03 20:54:26 2013 +0400
@@ -189,18 +189,18 @@
- (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 @@
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);
+}
+
+