jdk/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java
author darcy
Mon, 15 Dec 2014 17:20:17 -0800
changeset 28231 b608ffcaed74
parent 25859 3317bb8137f4
child 29922 7b9c1e1532cf
permissions -rw-r--r--
8066621: Suppress deprecation warnings in java.desktop module Reviewed-by: prr, alanb, ptbrunet
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
     1
/*
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 7668
diff changeset
     2
 * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
     4
 *
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4830
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4830
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    10
 *
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    15
 * accompanied this code).
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    16
 *
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4830
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4830
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4830
diff changeset
    23
 * questions.
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    24
 */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    25
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    26
package sun.awt.X11;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    27
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    28
import java.awt.*;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    29
import java.awt.event.*;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    30
import java.awt.peer.TrayIconPeer;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    31
import sun.awt.*;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    32
import java.awt.image.*;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    33
import java.text.BreakIterator;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    34
import java.util.concurrent.ArrayBlockingQueue;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    35
import java.security.AccessController;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    36
import java.security.PrivilegedAction;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    37
import java.lang.reflect.InvocationTargetException;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    38
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    39
/**
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    40
 * An utility window class. This is a base class for Tooltip and Balloon.
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    41
 */
23647
41d22f2dbeb5 8033712: Fix more serial lint warnings in sun.awt
darcy
parents: 22584
diff changeset
    42
@SuppressWarnings("serial") // JDK-implementation class
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    43
public abstract class InfoWindow extends Window {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    44
    private Container container;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    45
    private Closer closer;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    46
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    47
    protected InfoWindow(Frame parent, Color borderColor) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    48
        super(parent);
4366
4446f3b8a9b4 6402325: Swing toolbars vs native toolbars on Windows
anthony
parents: 3938
diff changeset
    49
        setType(Window.Type.POPUP);
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    50
        container = new Container() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    51
            @Override
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    52
            public Insets getInsets() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    53
                return new Insets(1, 1, 1, 1);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    54
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    55
        };
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    56
        setLayout(new BorderLayout());
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    57
        setBackground(borderColor);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    58
        add(container, BorderLayout.CENTER);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    59
        container.setLayout(new BorderLayout());
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    60
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    61
        closer = new Closer();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    62
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    63
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    64
    public Component add(Component c) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    65
        container.add(c, BorderLayout.CENTER);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    66
        return c;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    67
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    68
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    69
    protected void setCloser(Runnable action, int time) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    70
        closer.set(action, time);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    71
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    72
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    73
    // Must be executed on EDT.
28231
b608ffcaed74 8066621: Suppress deprecation warnings in java.desktop module
darcy
parents: 25859
diff changeset
    74
    @SuppressWarnings("deprecation")
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    75
    protected void show(Point corner, int indent) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    76
        assert SunToolkit.isDispatchThreadForAppContext(this);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    77
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    78
        pack();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    79
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    80
        Dimension size = getSize();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    81
        // TODO: When 6356322 is fixed we should get screen bounds in
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    82
        // this way: eframe.getGraphicsConfiguration().getBounds().
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    83
        Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    84
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    85
        if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    86
            setLocation(corner.x + indent, corner.y + indent);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    87
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    88
        } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    89
            setLocation(corner.x - indent - size.width, corner.y + indent);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    90
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    91
        } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    92
            setLocation(corner.x + indent, corner.y - indent - size.height);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    93
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    94
        } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    95
            setLocation(corner.x - indent - size.width, corner.y - indent - size.height);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    96
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    97
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    98
        super.show();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
    99
        closer.schedule();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   100
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   101
28231
b608ffcaed74 8066621: Suppress deprecation warnings in java.desktop module
darcy
parents: 25859
diff changeset
   102
    @SuppressWarnings("deprecation")
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   103
    public void hide() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   104
        closer.close();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   105
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   106
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   107
    private class Closer implements Runnable {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   108
        Runnable action;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   109
        int time;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   110
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   111
        public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   112
            doClose();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   113
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   114
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   115
        void set(Runnable action, int time) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   116
            this.action = action;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   117
            this.time = time;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   118
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   119
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   120
        void schedule() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   121
            XToolkit.schedule(this, time);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   122
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   123
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   124
        void close() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   125
            XToolkit.remove(this);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   126
            doClose();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   127
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   128
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   129
        // WARNING: this method may be executed on Toolkit thread.
28231
b608ffcaed74 8066621: Suppress deprecation warnings in java.desktop module
darcy
parents: 25859
diff changeset
   130
        @SuppressWarnings("deprecation")
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   131
        private void doClose() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   132
            SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   133
                public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   134
                    InfoWindow.super.hide();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   135
                    invalidate();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   136
                    if (action != null) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   137
                        action.run();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   138
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   139
                }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   140
            });
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   141
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   142
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   143
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   144
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   145
    private interface LiveArguments {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   146
        /** Whether the target of the InfoWindow is disposed. */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   147
        boolean isDisposed();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   148
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   149
        /** The bounds of the target of the InfoWindow. */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   150
        Rectangle getBounds();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   151
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   152
23647
41d22f2dbeb5 8033712: Fix more serial lint warnings in sun.awt
darcy
parents: 22584
diff changeset
   153
    @SuppressWarnings("serial") // JDK-implementation class
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   154
    public static class Tooltip extends InfoWindow {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   155
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   156
        public interface LiveArguments extends InfoWindow.LiveArguments {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   157
            /** The tooltip to be displayed. */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   158
            String getTooltipString();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   159
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   160
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   161
        private final Object target;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   162
        private final LiveArguments liveArguments;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   163
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   164
        private final Label textLabel = new Label("");
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   165
        private final Runnable starter = new Runnable() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   166
                public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   167
                    display();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   168
                }};
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   169
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   170
        private final static int TOOLTIP_SHOW_TIME = 10000;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   171
        private final static int TOOLTIP_START_DELAY_TIME = 1000;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   172
        private final static int TOOLTIP_MAX_LENGTH = 64;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   173
        private final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   174
        private final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   175
        private final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   176
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   177
        public Tooltip(Frame parent, Object target,
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   178
                LiveArguments liveArguments)
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   179
        {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   180
            super(parent, Color.black);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   181
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   182
            this.target = target;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   183
            this.liveArguments = liveArguments;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   184
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   185
            XTrayIconPeer.suppressWarningString(this);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   186
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   187
            setCloser(null, TOOLTIP_SHOW_TIME);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   188
            textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   189
            textLabel.setFont(TOOLTIP_TEXT_FONT);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   190
            add(textLabel);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   191
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   192
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   193
        /*
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   194
         * WARNING: this method is executed on Toolkit thread!
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   195
         */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   196
        private void display() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   197
            // Execute on EDT to avoid deadlock (see 6280857).
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   198
            SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   199
                    public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   200
                        if (liveArguments.isDisposed()) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   201
                            return;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   202
                        }
4830
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   203
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   204
                        String tooltipString = liveArguments.getTooltipString();
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   205
                        if (tooltipString == null) {
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   206
                            return;
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   207
                        } else if (tooltipString.length() >  TOOLTIP_MAX_LENGTH) {
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   208
                            textLabel.setText(tooltipString.substring(0, TOOLTIP_MAX_LENGTH));
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   209
                        } else {
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   210
                            textLabel.setText(tooltipString);
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   211
                        }
34aa9ad0f200 6857363: deadlock caused by sun.awt.X11.XTrayIconPeer$Tooltip.display
dcherepanov
parents: 4366
diff changeset
   212
24538
25bf8153fbfe 8039642: Fix raw and unchecked warnings in sun.awt.*
henryjen
parents: 23647
diff changeset
   213
                        Point pointer = AccessController.doPrivileged(
25bf8153fbfe 8039642: Fix raw and unchecked warnings in sun.awt.*
henryjen
parents: 23647
diff changeset
   214
                            new PrivilegedAction<Point>() {
25bf8153fbfe 8039642: Fix raw and unchecked warnings in sun.awt.*
henryjen
parents: 23647
diff changeset
   215
                                public Point run() {
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   216
                                    if (!isPointerOverTrayIcon(liveArguments.getBounds())) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   217
                                        return null;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   218
                                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   219
                                    return MouseInfo.getPointerInfo().getLocation();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   220
                                }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   221
                            });
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   222
                        if (pointer == null) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   223
                            return;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   224
                        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   225
                        show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   226
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   227
                });
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   228
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   229
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   230
        public void enter() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   231
            XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   232
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   233
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   234
        public void exit() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   235
            XToolkit.remove(starter);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   236
            if (isVisible()) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   237
                hide();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   238
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   239
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   240
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   241
        private boolean isPointerOverTrayIcon(Rectangle trayRect) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   242
            Point p = MouseInfo.getPointerInfo().getLocation();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   243
            return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) ||
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   244
                     p.y < trayRect.y || p.y > (trayRect.y + trayRect.height));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   245
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   246
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   247
23647
41d22f2dbeb5 8033712: Fix more serial lint warnings in sun.awt
darcy
parents: 22584
diff changeset
   248
    @SuppressWarnings("serial") // JDK-implementation class
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   249
    public static class Balloon extends InfoWindow {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   250
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   251
        public interface LiveArguments extends InfoWindow.LiveArguments {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   252
            /** The action to be performed upon clicking the baloon. */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   253
            String getActionCommand();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   254
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   255
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   256
        private final LiveArguments liveArguments;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   257
        private final Object target;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   258
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   259
        private final static int BALLOON_SHOW_TIME = 10000;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   260
        private final static int BALLOON_TEXT_MAX_LENGTH = 256;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   261
        private final static int BALLOON_WORD_LINE_MAX_LENGTH = 16;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   262
        private final static int BALLOON_WORD_LINE_MAX_COUNT = 4;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   263
        private final static int BALLOON_ICON_WIDTH = 32;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   264
        private final static int BALLOON_ICON_HEIGHT = 32;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   265
        private final static int BALLOON_TRAY_ICON_INDENT = 0;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   266
        private final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   267
        private final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   268
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   269
        private Panel mainPanel = new Panel();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   270
        private Panel captionPanel = new Panel();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   271
        private Label captionLabel = new Label("");
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   272
        private Button closeButton = new Button("X");
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   273
        private Panel textPanel = new Panel();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   274
        private XTrayIconPeer.IconCanvas iconCanvas = new XTrayIconPeer.IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   275
        private Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT];
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   276
        private ActionPerformer ap = new ActionPerformer();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   277
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   278
        private Image iconImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   279
        private Image errorImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   280
        private Image warnImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   281
        private Image infoImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   282
        private boolean gtkImagesLoaded;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   283
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   284
        private Displayer displayer = new Displayer();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   285
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   286
        public Balloon(Frame parent, Object target, LiveArguments liveArguments) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   287
            super(parent, new Color(90, 80 ,190));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   288
            this.liveArguments = liveArguments;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   289
            this.target = target;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   290
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   291
            XTrayIconPeer.suppressWarningString(this);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   292
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   293
            setCloser(new Runnable() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   294
                    public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   295
                        if (textPanel != null) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   296
                            textPanel.removeAll();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   297
                            textPanel.setSize(0, 0);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   298
                            iconCanvas.setSize(0, 0);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   299
                            XToolkit.awtLock();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   300
                            try {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   301
                                displayer.isDisplayed = false;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   302
                                XToolkit.awtLockNotifyAll();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   303
                            } finally {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   304
                                XToolkit.awtUnlock();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   305
                            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   306
                        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   307
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   308
                }, BALLOON_SHOW_TIME);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   309
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   310
            add(mainPanel);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   311
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   312
            captionLabel.setFont(BALLOON_CAPTION_FONT);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   313
            captionLabel.addMouseListener(ap);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   314
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   315
            captionPanel.setLayout(new BorderLayout());
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   316
            captionPanel.add(captionLabel, BorderLayout.WEST);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   317
            captionPanel.add(closeButton, BorderLayout.EAST);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   318
            captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   319
            captionPanel.addMouseListener(ap);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   320
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   321
            closeButton.addActionListener(new ActionListener() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   322
                    public void actionPerformed(ActionEvent e) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   323
                        hide();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   324
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   325
                });
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   326
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   327
            mainPanel.setLayout(new BorderLayout());
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   328
            mainPanel.setBackground(Color.white);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   329
            mainPanel.add(captionPanel, BorderLayout.NORTH);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   330
            mainPanel.add(iconCanvas, BorderLayout.WEST);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   331
            mainPanel.add(textPanel, BorderLayout.CENTER);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   332
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   333
            iconCanvas.addMouseListener(ap);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   334
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   335
            for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   336
                lineLabels[i] = new Label();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   337
                lineLabels[i].addMouseListener(ap);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   338
                lineLabels[i].setBackground(Color.white);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   339
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   340
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   341
            displayer.start();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   342
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   343
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   344
        public void display(String caption, String text, String messageType) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   345
            if (!gtkImagesLoaded) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   346
                loadGtkImages();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   347
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   348
            displayer.display(caption, text, messageType);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   349
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   350
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   351
        private void _display(String caption, String text, String messageType) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   352
            captionLabel.setText(caption);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   353
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   354
            BreakIterator iter = BreakIterator.getWordInstance();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   355
            if (text != null) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   356
                iter.setText(text);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   357
                int start = iter.first(), end;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   358
                int nLines = 0;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   359
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   360
                do {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   361
                    end = iter.next();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   362
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   363
                    if (end == BreakIterator.DONE ||
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   364
                        text.substring(start, end).length() >= 50)
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   365
                    {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   366
                        lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ?
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   367
                                                                  iter.last() : end));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   368
                        textPanel.add(lineLabels[nLines++]);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   369
                        start = end;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   370
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   371
                    if (nLines == BALLOON_WORD_LINE_MAX_COUNT) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   372
                        if (end != BreakIterator.DONE) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   373
                            lineLabels[nLines - 1].setText(
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   374
                                new String(lineLabels[nLines - 1].getText() + " ..."));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   375
                        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   376
                        break;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   377
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   378
                } while (end != BreakIterator.DONE);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   379
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   380
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   381
                textPanel.setLayout(new GridLayout(nLines, 1));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   382
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   383
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   384
            if ("ERROR".equals(messageType)) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   385
                iconImage = errorImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   386
            } else if ("WARNING".equals(messageType)) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   387
                iconImage = warnImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   388
            } else if ("INFO".equals(messageType)) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   389
                iconImage = infoImage;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   390
            } else {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   391
                iconImage = null;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   392
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   393
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   394
            if (iconImage != null) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   395
                Dimension tpSize = textPanel.getSize();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   396
                iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ?
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   397
                                                        BALLOON_ICON_HEIGHT : tpSize.height));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   398
                iconCanvas.validate();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   399
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   400
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   401
            SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   402
                    public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   403
                        if (liveArguments.isDisposed()) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   404
                            return;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   405
                        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   406
                        Point parLoc = getParent().getLocationOnScreen();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   407
                        Dimension parSize = getParent().getSize();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   408
                        show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2),
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   409
                             BALLOON_TRAY_ICON_INDENT);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   410
                        if (iconImage != null) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   411
                            iconCanvas.updateImage(iconImage); // call it after the show(..) above
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   412
                        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   413
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   414
                });
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   415
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   416
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   417
        public void dispose() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   418
            displayer.interrupt();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   419
            super.dispose();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   420
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   421
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   422
        private void loadGtkImages() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   423
            if (!gtkImagesLoaded) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   424
                errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   425
                    "gtk.icon.gtk-dialog-error.6.rtl");
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   426
                warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   427
                    "gtk.icon.gtk-dialog-warning.6.rtl");
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   428
                infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   429
                    "gtk.icon.gtk-dialog-info.6.rtl");
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   430
                gtkImagesLoaded = true;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   431
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   432
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   433
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   434
        private class ActionPerformer extends MouseAdapter {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   435
            public void mouseClicked(MouseEvent e) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   436
                // hide the balloon by any click
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   437
                hide();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   438
                if (e.getButton() == MouseEvent.BUTTON1) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   439
                    ActionEvent aev = new ActionEvent(target, ActionEvent.ACTION_PERFORMED,
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   440
                                                      liveArguments.getActionCommand(),
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   441
                                                      e.getWhen(), e.getModifiers());
6826
1fc6a05552f2 6991992: Need to forward-port AWT's part of the fix for 6691674
dcherepanov
parents: 5506
diff changeset
   442
                    XToolkit.postEvent(XToolkit.targetToAppContext(aev.getSource()), aev);
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   443
                }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   444
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   445
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   446
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   447
        private class Displayer extends Thread {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   448
            final int MAX_CONCURRENT_MSGS = 10;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   449
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   450
            ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   451
            boolean isDisplayed;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   452
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   453
            Displayer() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   454
                setDaemon(true);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   455
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   456
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   457
            public void run() {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   458
                while (true) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   459
                    Message msg = null;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   460
                    try {
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 7668
diff changeset
   461
                        msg = messageQueue.take();
2472
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   462
                    } catch (InterruptedException e) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   463
                        return;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   464
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   465
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   466
                    /*
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   467
                     * Wait till the previous message is displayed if any
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   468
                     */
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   469
                    XToolkit.awtLock();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   470
                    try {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   471
                        while (isDisplayed) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   472
                            try {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   473
                                XToolkit.awtLockWait();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   474
                            } catch (InterruptedException e) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   475
                                return;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   476
                            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   477
                        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   478
                        isDisplayed = true;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   479
                    } finally {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   480
                        XToolkit.awtUnlock();
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   481
                    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   482
                    _display(msg.caption, msg.text, msg.messageType);
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   483
                }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   484
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   485
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   486
            void display(String caption, String text, String messageType) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   487
                messageQueue.offer(new Message(caption, text, messageType));
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   488
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   489
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   490
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   491
        private static class Message {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   492
            String caption, text, messageType;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   493
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   494
            Message(String caption, String text, String messageType) {
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   495
                this.caption = caption;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   496
                this.text = text;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   497
                this.messageType = messageType;
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   498
            }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   499
        }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   500
    }
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   501
}
b7aba00cabb6 6693253: Security Warning appearance requires enhancements
anthony
parents:
diff changeset
   502