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.

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

Commit messages:
 - Use new APIs on Windows for monitoring available clipboard formats

Changes: https://git.openjdk.java.net/jdk/pull/594/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=594&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8254825
  Stats: 36 lines in 4 files changed: 0 ins; 28 del; 8 mod
  Patch: https://git.openjdk.java.net/jdk/pull/594.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/594/head:pull/594

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

Reply via email to