jdk/test/java/awt/TrayIcon/AddPopupAfterShowTest/AddPopupAfterShowTest.java
author pchelko
Fri, 20 Dec 2013 14:42:37 +0400
changeset 23247 dd6c58eeb05c
permissions -rw-r--r--
8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon Reviewed-by: anthony, serb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23247
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     1
/*
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     2
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     4
 *
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     7
 * published by the Free Software Foundation.
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     8
 *
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    13
 * accompanied this code).
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    14
 *
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    18
 *
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    21
 * questions.
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    22
 */
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    23
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    24
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    25
import test.java.awt.regtesthelpers.Sysout;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    26
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    27
import java.applet.Applet;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    28
import java.awt.*;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    29
import java.awt.image.BufferedImage;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    30
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    31
public class AddPopupAfterShowTest extends Applet {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    32
    @Override
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    33
    public void init() {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    34
        if (!SystemTray.isSupported()) {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    35
            Sysout.createDialogWithInstructions(new String[]{
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    36
                    "Press PASS, the System Tray is not supported"});
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    37
            return;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    38
        }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    39
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    40
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    41
        String[] instructions = {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    42
                "1) The red circle icon was added to the system tray.",
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    43
                "2) Check that a popup menu is opened when the icon is clicked.",
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    44
                "3) If true the test is passed, otherwise failed."};
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    45
        Sysout.createDialogWithInstructions(instructions);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    46
    }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    47
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    48
    @Override
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    49
    public void start() {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    50
        setSize(200, 200);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    51
        show();
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    52
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    53
        createSystemTrayIcon();
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    54
    }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    55
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    56
    private static void createSystemTrayIcon() {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    57
        final TrayIcon trayIcon = new TrayIcon(createTrayIconImage());
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    58
        trayIcon.setImageAutoSize(true);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    59
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    60
        try {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    61
            // Add tray icon to system tray *before* adding popup menu to demonstrate buggy behaviour
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    62
            SystemTray.getSystemTray().add(trayIcon);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    63
            trayIcon.setPopupMenu(createTrayIconPopupMenu());
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    64
        } catch (final AWTException awte) {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    65
            awte.printStackTrace();
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    66
        }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    67
    }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    68
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    69
    private static Image createTrayIconImage() {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    70
        /**
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    71
         * Create a small image of a red circle to use as the icon for the tray icon
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    72
         */
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    73
        int trayIconImageSize = 32;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    74
        final BufferedImage trayImage = new BufferedImage(trayIconImageSize, trayIconImageSize, BufferedImage.TYPE_INT_ARGB);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    75
        final Graphics2D trayImageGraphics = (Graphics2D) trayImage.getGraphics();
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    76
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    77
        trayImageGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    78
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    79
        trayImageGraphics.setColor(new Color(255, 255, 255, 0));
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    80
        trayImageGraphics.fillRect(0, 0, trayImage.getWidth(), trayImage.getHeight());
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    81
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    82
        trayImageGraphics.setColor(Color.red);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    83
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    84
        int trayIconImageInset = 4;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    85
        trayImageGraphics.fillOval(trayIconImageInset,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    86
                trayIconImageInset,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    87
                trayImage.getWidth() - 2 * trayIconImageInset,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    88
                trayImage.getHeight() - 2 * trayIconImageInset);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    89
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    90
        trayImageGraphics.setColor(Color.darkGray);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    91
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    92
        trayImageGraphics.drawOval(trayIconImageInset,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    93
                trayIconImageInset,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    94
                trayImage.getWidth() - 2 * trayIconImageInset,
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    95
                trayImage.getHeight() - 2 * trayIconImageInset);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    96
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    97
        return trayImage;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    98
    }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
    99
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   100
    private static PopupMenu createTrayIconPopupMenu() {
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   101
        final PopupMenu trayIconPopupMenu = new PopupMenu();
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   102
        final MenuItem popupMenuItem = new MenuItem("TEST PASSED!");
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   103
        trayIconPopupMenu.add(popupMenuItem);
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   104
        return trayIconPopupMenu;
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   105
    }
dd6c58eeb05c 8007220: [macosx] Setting popupmenu on TrayIcon do not work if done *after* adding TrayIcon
pchelko
parents:
diff changeset
   106
}