--- old/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.cpp 2020-02-17 02:39:10.000000000 -0800 +++ new/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.cpp 2020-02-17 02:39:10.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -282,7 +282,7 @@ call_dSCddfinished(env, peer, res == DRAGDROP_S_DROP && effects != DROPEFFECT_NONE, convertDROPEFFECTToActions(effects), - dragSource->m_dragPoint.x, dragSource->m_dragPoint.y); + dragSource->m_dragPoint); env->DeleteLocalRef(peer); @@ -649,8 +649,7 @@ if ( (dragPoint.x != m_dragPoint.x || dragPoint.y != m_dragPoint.y) && m_lastmods == modifiers) {//cannot move before cursor change - call_dSCmouseMoved(env, m_peer, - m_actions, modifiers, dragPoint.x, dragPoint.y); + call_dSCmouseMoved(env, m_peer, m_actions, modifiers, dragPoint); JNU_CHECK_EXCEPTION_RETURN(env, E_UNEXPECTED); m_dragPoint = dragPoint; } @@ -662,8 +661,7 @@ } else if ((modifiers & JAVA_BUTTON_MASK) != (m_initmods & JAVA_BUTTON_MASK)) { return DRAGDROP_S_CANCEL; } else if (m_lastmods != modifiers) { - call_dSCchanged(env, m_peer, - m_actions, modifiers, dragPoint.x, dragPoint.y); + call_dSCchanged(env, m_peer, m_actions, modifiers, dragPoint); m_bRestoreNodropCustomCursor = TRUE; } @@ -726,13 +724,13 @@ if (invalid) { // Don't call dragExit if dragEnter and dragOver haven't been called. if (!m_enterpending) { - call_dSCexit(env, m_peer, curs.x, curs.y); + call_dSCexit(env, m_peer, curs); } m_droptarget = (HWND)NULL; m_enterpending = TRUE; } else if (m_droptarget != NULL) { (*(m_enterpending ? call_dSCenter : call_dSCmotion)) - (env, m_peer, m_actions, modifiers, curs.x, curs.y); + (env, m_peer, m_actions, modifiers, curs); m_enterpending = FALSE; } @@ -1176,14 +1174,26 @@ return S_OK; } +static void ScaleDown(POINT &pt) { + HMONITOR monitor = MonitorFromPoint(pt, MONITOR_DEFAULTTOPRIMARY); + int screen = AwtWin32GraphicsDevice::GetScreenFromHMONITOR(monitor); + Devices::InstanceAccess devices; + AwtWin32GraphicsDevice *device = devices->GetDevice(screen); + if (device) { + pt.x = device->ScaleDownX(pt.x); + pt.y = device->ScaleDownY(pt.y); + } +} + DECLARE_JAVA_CLASS(dSCClazz, "sun/awt/windows/WDragSourceContextPeer") void AwtDragSource::call_dSCenter(JNIEnv* env, jobject self, jint targetActions, - jint modifiers, jint x, jint y) { + jint modifiers, POINT pt) { + ScaleDown(pt); DECLARE_VOID_JAVA_METHOD(dSCenter, dSCClazz, "dragEnter", "(IIII)V"); DASSERT(!JNU_IsNull(env, self)); - env->CallVoidMethod(self, dSCenter, targetActions, modifiers, x, y); + env->CallVoidMethod(self, dSCenter, targetActions, modifiers, pt.x, pt.y); if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { env->ExceptionDescribe(); env->ExceptionClear(); @@ -1192,10 +1202,11 @@ void AwtDragSource::call_dSCmotion(JNIEnv* env, jobject self, jint targetActions, - jint modifiers, jint x, jint y) { + jint modifiers, POINT pt) { + ScaleDown(pt); DECLARE_VOID_JAVA_METHOD(dSCmotion, dSCClazz, "dragMotion", "(IIII)V"); DASSERT(!JNU_IsNull(env, self)); - env->CallVoidMethod(self, dSCmotion, targetActions, modifiers, x, y); + env->CallVoidMethod(self, dSCmotion, targetActions, modifiers, pt.x, pt.y); if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { env->ExceptionDescribe(); env->ExceptionClear(); @@ -1204,11 +1215,12 @@ void AwtDragSource::call_dSCchanged(JNIEnv* env, jobject self, jint targetActions, - jint modifiers, jint x, jint y) { + jint modifiers, POINT pt) { + ScaleDown(pt); DECLARE_VOID_JAVA_METHOD(dSCchanged, dSCClazz, "operationChanged", "(IIII)V"); DASSERT(!JNU_IsNull(env, self)); - env->CallVoidMethod(self, dSCchanged, targetActions, modifiers, x, y); + env->CallVoidMethod(self, dSCchanged, targetActions, modifiers, pt.x, pt.y); if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { env->ExceptionDescribe(); env->ExceptionClear(); @@ -1216,10 +1228,11 @@ } void -AwtDragSource::call_dSCexit(JNIEnv* env, jobject self, jint x, jint y) { +AwtDragSource::call_dSCexit(JNIEnv* env, jobject self, POINT pt) { + ScaleDown(pt); DECLARE_VOID_JAVA_METHOD(dSCexit, dSCClazz, "dragExit", "(II)V"); DASSERT(!JNU_IsNull(env, self)); - env->CallVoidMethod(self, dSCexit, x, y); + env->CallVoidMethod(self, dSCexit, pt.x, pt.y); if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { env->ExceptionDescribe(); env->ExceptionClear(); @@ -1228,10 +1241,11 @@ void AwtDragSource::call_dSCddfinished(JNIEnv* env, jobject self, jboolean success, - jint operations, jint x, jint y) { + jint operations, POINT pt) { + ScaleDown(pt); DECLARE_VOID_JAVA_METHOD(dSCddfinished, dSCClazz, "dragDropFinished", "(ZIII)V"); DASSERT(!JNU_IsNull(env, self)); - env->CallVoidMethod(self, dSCddfinished, success, operations, x, y); + env->CallVoidMethod(self, dSCddfinished, success, operations, pt.x, pt.y); if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { env->ExceptionDescribe(); env->ExceptionClear(); @@ -1240,11 +1254,12 @@ void AwtDragSource::call_dSCmouseMoved(JNIEnv* env, jobject self, jint targetActions, - jint modifiers, jint x, jint y) { + jint modifiers, POINT pt) { + ScaleDown(pt); DECLARE_VOID_JAVA_METHOD(dSCmouseMoved, dSCClazz, "dragMouseMoved", "(IIII)V"); DASSERT(!JNU_IsNull(env, self)); - env->CallVoidMethod(self, dSCmouseMoved, targetActions, modifiers, x, y); + env->CallVoidMethod(self, dSCmouseMoved, targetActions, modifiers, pt.x, pt.y); if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { env->ExceptionDescribe(); env->ExceptionClear(); --- old/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.h 2020-02-17 02:39:12.000000000 -0800 +++ new/src/java.desktop/windows/native/libawt/windows/awt_DnDDS.h 2020-02-17 02:39:12.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -127,20 +127,20 @@ static int __cdecl _compar(const void *, const void *); static void call_dSCenter(JNIEnv* env, jobject self, jint targetActions, - jint modifiers, jint x, jint y); + jint modifiers, POINT pt); static void call_dSCmotion(JNIEnv* env, jobject self, jint targetActions, jint modifiers, - jint x, jint y); + POINT pt); static void call_dSCchanged(JNIEnv* env, jobject self, jint targetActions, jint modifiers, - jint x, jint y); + POINT pt); static void call_dSCmouseMoved(JNIEnv* env, jobject self, jint targetActions, jint modifiers, - jint x, jint y); - static void call_dSCexit(JNIEnv* env, jobject self, jint x, jint y); + POINT pt); + static void call_dSCexit(JNIEnv* env, jobject self, POINT pt); static void call_dSCddfinished(JNIEnv* env, jobject self, jboolean success, jint operations, - jint x, jint y); + POINT pt); protected: class ADSIEnumFormatEtc : public virtual IEnumFORMATETC { @@ -254,8 +254,8 @@ jobject m_transferable; jobject m_formatMap; - POINT m_dragPoint; - POINT m_dropPoint; + POINT m_dragPoint; // device space (pixels) + POINT m_dropPoint; // device space (pixels) BOOL m_fNC; BOOL m_bRestoreNodropCustomCursor;//CR 6480706 - MS Bug on hold --- old/src/java.desktop/windows/native/libawt/windows/awt_DnDDT.cpp 2020-02-17 02:39:14.000000000 -0800 +++ new/src/java.desktop/windows/native/libawt/windows/awt_DnDDT.cpp 2020-02-17 02:39:13.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -127,7 +127,7 @@ return (ULONG)refs; } -void ScaleDown(POINT &cp, HWND m_window) { +static void ScaleDown(POINT &cp, HWND m_window) { int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(m_window); Devices::InstanceAccess devices; AwtWin32GraphicsDevice* device = devices->GetDevice(screen); --- old/test/jdk/java/awt/dnd/Button2DragTest/Button2DragTest.java 2020-02-17 02:39:15.000000000 -0800 +++ new/test/jdk/java/awt/dnd/Button2DragTest/Button2DragTest.java 2020-02-17 02:39:15.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,11 @@ * questions. */ +import java.awt.Color; import java.awt.Frame; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; import java.awt.Point; import java.awt.Robot; import java.awt.datatransfer.StringSelection; @@ -29,8 +33,9 @@ import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; -import java.awt.dnd.DragSourceAdapter; +import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; +import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetAdapter; @@ -42,7 +47,7 @@ /** * @test * @key headful - * @bug 4955110 + * @bug 4955110 8238575 * @summary tests that DragSourceDragEvent.getDropAction() accords to its new * spec (does not depend on the user drop action) * @library ../../regtesthelpers @@ -53,26 +58,56 @@ public final class Button2DragTest { private volatile boolean dropSuccess; + private volatile boolean locationValid = true; private static Frame frame; public static void main(final String[] args) { - Button2DragTest test = new Button2DragTest(); - try { - test.run(); - } finally { - if (frame != null) { + var lge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + for (GraphicsDevice device : lge.getScreenDevices()) { + Button2DragTest test = new Button2DragTest(); + frame = new Frame(device.getDefaultConfiguration()); + try { + test.run(); + } finally { frame.dispose(); } } } public void run() { - frame = new Frame(); + final DragSourceListener dragSourceListener = new DragSourceListener() { + private void checkLocation(DragSourceEvent dsde) { + if (!frame.getBounds().contains(dsde.getLocation())) { + System.err.println("Expected in" + frame.getBounds()); + System.err.println("Actual" + dsde.getLocation()); + locationValid = false; + } + } + + @Override + public void dragEnter(DragSourceDragEvent dsde) { + checkLocation(dsde); + } + + @Override + public void dragOver(DragSourceDragEvent dsde) { + checkLocation(dsde); + } - final DragSourceListener dragSourceListener = new DragSourceAdapter() { - public void dragDropEnd(DragSourceDropEvent e) { - dropSuccess = e.getDropSuccess(); + @Override + public void dropActionChanged(DragSourceDragEvent dsde) { + checkLocation(dsde); + } + + @Override + public void dragExit(DragSourceEvent dse) { + checkLocation(dse); + } + + public void dragDropEnd(DragSourceDropEvent dsde) { + checkLocation(dsde); + dropSuccess = dsde.getDropSuccess(); System.err.println("Drop was successful: " + dropSuccess); } }; @@ -93,11 +128,9 @@ }; new DropTarget(frame, dropTargetListener); - //What would normally go into main() will probably go here. - //Use System.out.println for diagnostic messages that you want - //to read after the test is done. + frame.setBackground(Color.GREEN); frame.setUndecorated(true); - frame.setBounds(100, 100, 200, 200); + frame.setSize(200, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); @@ -115,11 +148,8 @@ Util.waitForIdle(robot); robot.delay(500); - if (dropSuccess) { - System.err.println("test passed"); - } else { + if (!dropSuccess || !locationValid) { throw new RuntimeException("test failed: drop was not successful"); } } - } --- old/test/jdk/sun/awt/dnd/8024061/bug8024061.java 2020-02-17 02:39:17.000000000 -0800 +++ new/test/jdk/sun/awt/dnd/8024061/bug8024061.java 2020-02-17 02:39:17.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,11 +27,17 @@ * @bug 8024061 * @summary Checks that no exception is thrown if dragGestureRecognized * takes a while to complete. - * @library /test/lib - * @build jdk.test.lib.Platform - * @run main bug8024061 */ -import java.awt.*; + +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridLayout; +import java.awt.Point; +import java.awt.Robot; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; @@ -49,15 +55,15 @@ import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.InputEvent; - import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import javax.swing.*; - -import jdk.test.lib.Platform; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; /** * If dragGestureRecognized() takes a while to complete and if user performs a drag quickly, @@ -107,19 +113,13 @@ content.add(panel2); frame.pack(); - + frame.setLocationRelativeTo(null); DropObject drop = new DropObject(); drop.place(panel1, new Point(10, 10)); frame.setVisible(true); } public static void main(String[] args) throws AWTException, InvocationTargetException, InterruptedException { - if (!Platform.isLinux() && !Platform.isSolaris()) { - System.out.println("This test is for Linux and Solaris only... " + - "skipping!"); - return; - } - final bug8024061[] dnd = {null}; SwingUtilities.invokeAndWait(new Runnable() { @Override @@ -166,7 +166,7 @@ throw new RuntimeException("Timed out waiting for dragEnter()"); } } finally { - SwingUtilities.invokeLater(frame::dispose); + SwingUtilities.invokeAndWait(frame::dispose); } }