On Sun, 11 Oct 2020 19:58:20 GMT, Daniel Kamil Kozar <github.com+127875+xav...@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 ------------- PR: https://git.openjdk.java.net/jdk/pull/594