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