1 /*
2 * Copyright (c) 2013, 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 6345003 8171363
28 * @summary grab problems with EmbeddedFrame
29 * @requires (os.family == "windows")
30 * @modules java.desktop/java.awt.peer
31 * @modules java.desktop/sun.awt
32 * @modules java.desktop/sun.awt.windows:open
33 * @author Oleg.Semenov@sun.com area=EmbeddedFrame
34 * @run main EmbeddedFrameGrabTest
35 */
36
37 import java.awt.Frame;
38 import java.awt.peer.FramePeer;
39 import javax.swing.JComboBox;
40 import java.awt.Panel;
41 import java.awt.BorderLayout;
42 import java.awt.Robot;
43 import java.awt.event.InputEvent;
44 import java.awt.Rectangle;
45 import java.awt.TextArea;
46 import java.awt.Dialog;
47
50
51 import sun.awt.AWTAccessor;
52
53 public class EmbeddedFrameGrabTest {
54
55 /**
56 * Test fails if it throws any exception.
57 *
58 * @throws Exception
59 */
60 private void init() throws Exception {
61
62 if (!System.getProperty("os.name").startsWith("Windows")) {
63 System.out.println("This is Windows only test.");
64 return;
65 }
66
67 final Frame frame = new Frame("AWT Frame");
68 frame.pack();
69 frame.setSize(200, 200);
70 FramePeer frame_peer = AWTAccessor.getComponentAccessor()
71 .getPeer(frame);
72 Class comp_peer_class
73 = Class.forName("sun.awt.windows.WComponentPeer");
74 Field hwnd_field = comp_peer_class.getDeclaredField("hwnd");
75 hwnd_field.setAccessible(true);
76 long hwnd = hwnd_field.getLong(frame_peer);
77
78 Class clazz = Class.forName("sun.awt.windows.WEmbeddedFrame");
79 Constructor constructor
80 = clazz.getConstructor(new Class[]{long.class});
81 final Frame embedded_frame
82 = (Frame) constructor.newInstance(new Object[]{
83 new Long(hwnd)});;
84 final JComboBox<String> combo = new JComboBox<>(new String[]{
85 "Item 1", "Item 2"
86 });
87 combo.setSelectedIndex(1);
88 final Panel p = new Panel();
89 p.setLayout(new BorderLayout());
90 embedded_frame.add(p, BorderLayout.CENTER);
91 embedded_frame.validate();
92 p.add(combo);
93 p.validate();
94 frame.setVisible(true);
95 Robot robot = new Robot();
96 robot.delay(2000);
97 Rectangle clos = new Rectangle(
98 combo.getLocationOnScreen(), combo.getSize());
99 robot.mouseMove(clos.x + clos.width / 2, clos.y + clos.height / 2);
100 robot.mousePress(InputEvent.BUTTON1_MASK);
101 robot.mouseRelease(InputEvent.BUTTON1_MASK);
102 robot.delay(1000);
103 if (!combo.isPopupVisible()) {
104 throw new RuntimeException("Combobox popup is not visible!");
105 }
106 robot.mouseMove(clos.x + clos.width / 2, clos.y + clos.height + 3);
107 robot.mousePress(InputEvent.BUTTON1_MASK);
108 robot.mouseRelease(InputEvent.BUTTON1_MASK);
109 robot.delay(1000);
110 if (combo.getSelectedIndex() != 0) {
|
1 /*
2 * Copyright (c) 2013, 2020, 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 6345003 8171363 8211999
28 * @summary grab problems with EmbeddedFrame
29 * @requires (os.family == "windows")
30 * @modules java.desktop/java.awt.peer
31 * @modules java.desktop/sun.awt
32 * @modules java.desktop/sun.awt.windows:open
33 * @author Oleg.Semenov@sun.com area=EmbeddedFrame
34 * @run main EmbeddedFrameGrabTest
35 */
36
37 import java.awt.Frame;
38 import java.awt.peer.FramePeer;
39 import javax.swing.JComboBox;
40 import java.awt.Panel;
41 import java.awt.BorderLayout;
42 import java.awt.Robot;
43 import java.awt.event.InputEvent;
44 import java.awt.Rectangle;
45 import java.awt.TextArea;
46 import java.awt.Dialog;
47
50
51 import sun.awt.AWTAccessor;
52
53 public class EmbeddedFrameGrabTest {
54
55 /**
56 * Test fails if it throws any exception.
57 *
58 * @throws Exception
59 */
60 private void init() throws Exception {
61
62 if (!System.getProperty("os.name").startsWith("Windows")) {
63 System.out.println("This is Windows only test.");
64 return;
65 }
66
67 final Frame frame = new Frame("AWT Frame");
68 frame.pack();
69 frame.setSize(200, 200);
70 frame.setLocationRelativeTo(null);
71 FramePeer frame_peer = AWTAccessor.getComponentAccessor()
72 .getPeer(frame);
73 Class comp_peer_class
74 = Class.forName("sun.awt.windows.WComponentPeer");
75 Field hwnd_field = comp_peer_class.getDeclaredField("hwnd");
76 hwnd_field.setAccessible(true);
77 long hwnd = hwnd_field.getLong(frame_peer);
78
79 Class clazz = Class.forName("sun.awt.windows.WEmbeddedFrame");
80 Constructor constructor
81 = clazz.getConstructor(new Class[]{long.class});
82 final Frame embedded_frame
83 = (Frame) constructor.newInstance(new Object[]{
84 new Long(hwnd)});;
85 final JComboBox<String> combo = new JComboBox<>(new String[]{
86 "Item 1", "Item 2"
87 });
88 combo.setSelectedIndex(1);
89 final Panel p = new Panel();
90 p.setLayout(new BorderLayout());
91 embedded_frame.add(p, BorderLayout.CENTER);
92 embedded_frame.setBounds(0, 0, 150, 150);
93 embedded_frame.validate();
94 p.add(combo);
95 p.validate();
96 frame.setVisible(true);
97 Robot robot = new Robot();
98 robot.delay(2000);
99 Rectangle clos = new Rectangle(
100 combo.getLocationOnScreen(), combo.getSize());
101 robot.mouseMove(clos.x + clos.width / 2, clos.y + clos.height / 2);
102 robot.mousePress(InputEvent.BUTTON1_MASK);
103 robot.mouseRelease(InputEvent.BUTTON1_MASK);
104 robot.delay(1000);
105 if (!combo.isPopupVisible()) {
106 throw new RuntimeException("Combobox popup is not visible!");
107 }
108 robot.mouseMove(clos.x + clos.width / 2, clos.y + clos.height + 3);
109 robot.mousePress(InputEvent.BUTTON1_MASK);
110 robot.mouseRelease(InputEvent.BUTTON1_MASK);
111 robot.delay(1000);
112 if (combo.getSelectedIndex() != 0) {
|