jdk/test/java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java
author goetz
Tue, 14 Jun 2016 10:44:59 +0200
changeset 39056 d99e63b6d962
parent 32875 eb8e90bef9aa
child 45019 20ad074a423f
permissions -rw-r--r--
8159690: [TESTBUG] Mark headful tests with @key headful. Reviewed-by: simonis, alexsch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32875
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     1
/*
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     4
 *
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     7
 * published by the Free Software Foundation.
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     8
 *
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    13
 * accompanied this code).
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    14
 *
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    18
 *
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    21
 * questions.
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    22
 */
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    23
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    24
import java.awt.Dialog;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    25
import java.awt.Frame;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    26
import java.awt.Point;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    27
import java.awt.Robot;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    28
import java.awt.Window;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    29
import java.awt.datatransfer.DataFlavor;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    30
import java.awt.datatransfer.Transferable;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    31
import java.awt.dnd.DnDConstants;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    32
import java.awt.dnd.DragGestureEvent;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    33
import java.awt.dnd.DragGestureListener;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    34
import java.awt.dnd.DragSource;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    35
import java.awt.dnd.DropTarget;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    36
import java.awt.dnd.DropTargetDragEvent;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    37
import java.awt.dnd.DropTargetDropEvent;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    38
import java.awt.dnd.DropTargetEvent;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    39
import java.awt.dnd.DropTargetListener;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    40
import java.awt.event.InputEvent;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    41
import java.awt.event.MouseAdapter;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    42
import java.awt.event.MouseEvent;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    43
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    44
/*
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    45
 * @test
39056
d99e63b6d962 8159690: [TESTBUG] Mark headful tests with @key headful.
goetz
parents: 32875
diff changeset
    46
 * @key headful
32875
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    47
 * @bug 8134917
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    48
 * @summary [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    49
 * @author Alexandr Scherbatiy
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    50
 */
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    51
public class MissingEventsOnModalDialogTest {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    52
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    53
    private static volatile boolean passed = false;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    54
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    55
    public static void main(String[] args) throws Exception {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    56
        Frame sourceFrame = createFrame("Source Frame", 0, 0);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    57
        Frame targetFrame = createFrame("Target Frame", 250, 250);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    58
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    59
        DragSource defaultDragSource
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    60
                = DragSource.getDefaultDragSource();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    61
        defaultDragSource.createDefaultDragGestureRecognizer(sourceFrame,
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    62
                DnDConstants.ACTION_COPY_OR_MOVE,
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    63
                new TestDragGestureListener());
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    64
        new DropTarget(targetFrame, DnDConstants.ACTION_COPY_OR_MOVE,
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    65
                new TestDropTargetListener(targetFrame));
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    66
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    67
        Robot robot = new Robot();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    68
        robot.setAutoDelay(50);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    69
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    70
        sourceFrame.toFront();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    71
        robot.waitForIdle();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    72
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    73
        Point point = getCenterPoint(sourceFrame);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    74
        robot.mouseMove(point.x, point.y);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    75
        robot.waitForIdle();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    76
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    77
        mouseDragAndDrop(robot, point, getCenterPoint(targetFrame));
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    78
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    79
        long time = System.currentTimeMillis() + 200;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    80
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    81
        while (!passed) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    82
            if (time < System.currentTimeMillis()) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    83
                sourceFrame.dispose();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    84
                targetFrame.dispose();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    85
                throw new RuntimeException("Mouse clicked event is lost!");
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    86
            }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    87
            Thread.sleep(10);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    88
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    89
        sourceFrame.dispose();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    90
        targetFrame.dispose();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    91
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    92
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    93
    private static Frame createFrame(String title, int x, int y) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    94
        Frame frame = new Frame();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    95
        frame.setSize(200, 200);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    96
        frame.setLocation(x, y);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    97
        frame.setTitle(title);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    98
        frame.setVisible(true);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
    99
        return frame;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   100
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   101
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   102
    private static Point getCenterPoint(Window window) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   103
        Point centerPoint = window.getLocationOnScreen();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   104
        centerPoint.translate(window.getWidth() / 2, window.getHeight() / 2);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   105
        return centerPoint;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   106
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   107
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   108
    public static void mouseDragAndDrop(Robot robot, Point from, Point to) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   109
        mouseDND(robot, from.x, from.y, to.x, to.y);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   110
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   111
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   112
    public static void mouseDND(Robot robot, int x1, int y1, int x2, int y2) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   113
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   114
        int N = 20;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   115
        int x = x1;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   116
        int y = y1;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   117
        int dx = (x2 - x1) / N;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   118
        int dy = (y2 - y1) / N;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   119
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   120
        robot.mousePress(InputEvent.BUTTON1_MASK);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   121
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   122
        for (int i = 0; i < N; i++) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   123
            robot.mouseMove(x += dx, y += dy);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   124
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   125
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   126
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   127
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   128
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   129
    private static class TestDragGestureListener implements DragGestureListener {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   130
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   131
        public void dragGestureRecognized(DragGestureEvent dge) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   132
            dge.startDrag(null, new StringTransferable());
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   133
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   134
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   135
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   136
    static class StringTransferable implements Transferable {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   137
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   138
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   139
        public DataFlavor[] getTransferDataFlavors() {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   140
            return new DataFlavor[]{DataFlavor.stringFlavor};
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   141
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   142
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   143
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   144
        public boolean isDataFlavorSupported(DataFlavor flavor) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   145
            return flavor.equals(DataFlavor.stringFlavor);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   146
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   147
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   148
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   149
        public Object getTransferData(DataFlavor flavor) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   150
            return "Hello World!";
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   151
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   152
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   153
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   154
    private static class TestDropTargetListener implements DropTargetListener {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   155
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   156
        private final Frame targetFrame;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   157
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   158
        public TestDropTargetListener(Frame targetFrame) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   159
            this.targetFrame = targetFrame;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   160
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   161
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   162
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   163
        public void dragEnter(DropTargetDragEvent dtde) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   164
            dtde.acceptDrag(dtde.getDropAction());
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   165
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   166
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   167
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   168
        public void dragOver(DropTargetDragEvent dtde) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   169
            dtde.acceptDrag(dtde.getDropAction());
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   170
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   171
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   172
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   173
        public void dropActionChanged(DropTargetDragEvent dtde) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   174
            dtde.acceptDrag(dtde.getDropAction());
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   175
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   176
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   177
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   178
        public void dragExit(DropTargetEvent dte) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   179
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   180
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   181
        @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   182
        public void drop(DropTargetDropEvent dtde) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   183
            dtde.acceptDrop(dtde.getDropAction());
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   184
            showModalDialog(targetFrame);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   185
            dtde.dropComplete(true);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   186
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   187
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   188
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   189
    private static void showModalDialog(Frame targetFrame) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   190
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   191
        Dialog dialog = new Dialog(targetFrame, true);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   192
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   193
        dialog.addMouseListener(new MouseAdapter() {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   194
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   195
            @Override
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   196
            public void mouseClicked(MouseEvent e) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   197
                passed = true;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   198
                dialog.dispose();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   199
            }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   200
        });
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   201
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   202
        dialog.setSize(400, 300);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   203
        dialog.setTitle("Modal Dialog!");
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   204
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   205
        clickOnModalDialog(dialog);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   206
        dialog.setVisible(true);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   207
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   208
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   209
    private static void clickOnModalDialog(Dialog dialog) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   210
        new Thread(() -> {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   211
            clickOnDialog(dialog);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   212
        }).start();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   213
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   214
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   215
    private static void clickOnDialog(Dialog dialog) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   216
        try {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   217
            long time = System.currentTimeMillis() + 200;
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   218
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   219
            while (!dialog.isVisible()) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   220
                if (time < System.currentTimeMillis()) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   221
                    throw new RuntimeException("Dialog is not visible!");
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   222
                }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   223
                Thread.sleep(10);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   224
            }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   225
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   226
            Point point = getCenterPoint(dialog);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   227
            Robot robot = new Robot();
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   228
            robot.setAutoDelay(50);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   229
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   230
            robot.mouseMove(point.x, point.y);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   231
            robot.mousePress(InputEvent.BUTTON1_MASK);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   232
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   233
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   234
        } catch (Exception e) {
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   235
            throw new RuntimeException(e);
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   236
        }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   237
    }
eb8e90bef9aa 8134917: [macosx] JOptionPane doesn't receive mouse events when opened from a drop event
alexsch
parents:
diff changeset
   238
}