1 /* 2 * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /** 25 * @test 26 * @key headful 27 * @bug 7128738 7161759 28 * @summary dragged dialog freezes system on dispose 29 * @author Oleg Pekhovskiy: area=awt.toplevel 30 * @library ../../regtesthelpers 31 * @build Util 32 * @run main WindowDragTest 33 */ 34 35 import java.awt.Frame; 36 import java.awt.event.InputEvent; 37 import java.awt.AWTException; 38 import test.java.awt.regtesthelpers.Util; 39 import java.awt.Robot; 40 import java.awt.Point; 41 import java.awt.Dimension; 42 import java.awt.event.MouseAdapter; 43 import java.awt.event.MouseEvent; 44 45 public class WindowDragTest { 46 47 static boolean passed = false; 48 49 public static void main(String[] args) { 50 try { 51 Robot robot = new Robot(); 52 robot.setAutoDelay(1000); 53 54 Frame frame1 = new Frame(); 55 frame1.setBounds(50, 50, 300, 200); 56 frame1.setVisible(true); 57 frame1.toFront(); 58 frame1.addMouseListener(new MouseAdapter() { 59 @Override 60 public void mouseClicked(MouseEvent e) { 61 // Clicking frame1 succeeded - mouse is not captured 62 passed = true; 63 } 64 }); 65 robot.delay(1000); 66 67 Frame frame2 = new Frame(); 68 frame2.setBounds(100, 100, 300, 200); 69 frame2.setVisible(true); 70 frame2.toFront(); 71 robot.delay(1000); 72 73 Point p = frame2.getLocationOnScreen(); 74 Dimension d = frame2.getSize(); 75 76 // Move cursor to frame2 title bar to drag 77 robot.mouseMove(p.x + (int)(d.getWidth() / 2), p.y + (int)frame2.getInsets().top / 2); 78 Util.waitForIdle(robot); 79 80 // Start window dragging 81 robot.mousePress(InputEvent.BUTTON1_MASK); 82 Util.waitForIdle(robot); 83 84 // Dispose window being dragged 85 frame2.dispose(); 86 Util.waitForIdle(robot); 87 88 // Release mouse button to be able to get MOUSE_CLICKED event on Util.clickOnComp() 89 robot.mouseRelease(InputEvent.BUTTON1_MASK); 90 Util.waitForIdle(robot); 91 92 // Click frame1 to check whether mouse is not captured by frame2 93 Util.clickOnComp(frame1, robot); 94 Util.waitForIdle(robot); 95 96 frame1.dispose(); 97 if (passed) { 98 System.out.println("Test passed."); 99 } 100 else { 101 System.out.println("Test failed."); 102 throw new RuntimeException("Test failed."); 103 } 104 } 105 catch (AWTException e) { 106 throw new RuntimeException("AWTException occurred - problem creating robot!"); 107 } 108 } 109 }