On Sun, 25 Oct 2020 02:51:41 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>> This change replaces the usage of SetClipboardViewer with 
>> Add/RemoveClipboardFormatListener, introduced in Windows Vista. This makes 
>> OpenJDK immune to external applications failing to process clipboard 
>> messages properly.
>> I have put this proposal forward in the [mailing 
>> list](https://mail.openjdk.java.net/pipermail/awt-dev/2020-July/015990.html),
>>  which was tentatively accepted by Mr. Sergey Bylokhov.
>> 
>> The deficiencies of the old APIs are well known and might result in some 
>> subscribed applications not receiving notifications from the operating 
>> system, as they rely on all the applications in the current clipboard chain 
>> processing clipboard messages properly. Porting the code to use the new APIs 
>> not only makes OpenJDK immune to these issues, but also results in slightly 
>> less code needed to support clipboard-related functionality.
>> 
>> As this is a change that's very platform-specific, I don't think providing a 
>> unit test is practical, as it would also require providing a native 
>> application that runs alongside the test and deliberately breaks the 
>> keyboard chain, resulting in OpenJDK not being able to receive clipboard 
>> format change notifications. This is a bug/limitation of the old Windows 
>> API, not OpenJDK itself. Anyhow, the already existing ClipboardInterVMTest 
>> passes, which shows that already existing functionality is not impacted by 
>> this change.
>> 
>> I have prepared a proof-of-concept test which illustrates the deficiencies 
>> of the old API, however it is not integrated with the test suite, as it 
>> requires compiling a native WinAPI application. I will gladly share the 
>> source if needed.
>
> Description of possible ways to interact with a clipboard:
> https://docs.microsoft.com/en-us/windows/win32/dataxchg/using-the-clipboard
> 
>> There are three ways of monitoring changes to the clipboard. The oldest 
>> method is to create a clipboard viewer window. Windows 2000 added the 
>> ability to query the clipboard sequence number, and Windows Vista added 
>> support for clipboard format listeners. Clipboard viewer windows are 
>> supported for backward compatibility with earlier versions of Windows. New 
>> programs should use clipboard format listeners or the clipboard sequence 
>> number.
> 
> The current fix proposes to change the old "clipboard viewer window" approach:
> https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setclipboardviewer
> https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-changeclipboardchain
> To the new approach:
> https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-addclipboardformatlistener

I have run the tests and waiting for the results, will sponsor it if the 
results will be good.

-------------

PR: https://git.openjdk.java.net/jdk/pull/594

Reply via email to