OpenJDK / lambda / lambda / jdk
changeset 8320:35da3878deef
8010925: COPY AND PASTE TO AND FROM SIGNED APPLET FAILS AFTER FIRST INTERNAL COPY PRFRMD
Reviewed-by: anthony, serb
author | mcherkas |
---|---|
date | Wed, 03 Apr 2013 20:54:26 +0400 |
parents | 36cb7921bc98 |
children | 2c36899500a0 |
files | src/macosx/classes/sun/lwawt/macosx/CClipboard.java src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java src/macosx/native/sun/awt/CClipboard.m |
diffstat | 3 files changed, 38 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macosx/classes/sun/lwawt/macosx/CClipboard.java Wed Apr 03 20:42:55 2013 +0400 +++ b/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/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Wed Apr 03 20:42:55 2013 +0400 +++ b/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/src/macosx/native/sun/awt/CClipboard.m Wed Apr 03 20:42:55 2013 +0400 +++ b/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); +} + +