< prev index next >

src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java

Print this page




  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package sun.awt.windows;
  27 
  28 import java.awt.peer.TaskbarPeer;
  29 import java.awt.*;
  30 import java.awt.im.InputMethodHighlight;
  31 import java.awt.im.spi.InputMethodDescriptor;
  32 import java.awt.image.*;
  33 import java.awt.peer.*;
  34 import java.awt.event.FocusEvent;
  35 import java.awt.event.KeyEvent;
  36 import java.awt.event.MouseEvent;
  37 import java.awt.datatransfer.Clipboard;
  38 import java.awt.TextComponent;
  39 import java.awt.TrayIcon;
  40 import java.beans.PropertyChangeListener;

  41 import java.security.AccessController;
  42 import java.security.PrivilegedAction;
  43 import javax.swing.text.JTextComponent;
  44 
  45 import sun.awt.AWTAccessor;
  46 import sun.awt.AppContext;
  47 import sun.awt.AWTAutoShutdown;
  48 import sun.awt.AWTPermissions;
  49 import sun.awt.AppContext;
  50 import sun.awt.DisplayChangedListener;
  51 import sun.awt.LightweightFrame;
  52 import sun.awt.SunToolkit;
  53 import sun.awt.util.ThreadGroupUtils;
  54 import sun.awt.Win32GraphicsDevice;
  55 import sun.awt.Win32GraphicsEnvironment;
  56 import sun.awt.datatransfer.DataTransferer;
  57 import sun.java2d.d3d.D3DRenderQueue;
  58 import sun.java2d.opengl.OGLRenderQueue;
  59 
  60 import sun.print.PrintJob2D;


1078     @Override
1079     public void grab(Window w) {
1080         final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
1081         if (peer != null) {
1082             ((WWindowPeer) peer).grab();
1083         }
1084     }
1085 
1086     @Override
1087     public void ungrab(Window w) {
1088         final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
1089         if (peer != null) {
1090             ((WWindowPeer) peer).ungrab();
1091         }
1092     }
1093 
1094     ///////////////////////////////////////////////////////////////////////////
1095     // The following code is used for support of automatic showing of the touch
1096     // keyboard for text components and is accessed only from EDT.
1097     ///////////////////////////////////////////////////////////////////////////
1098     private volatile Component compOnTouchDownEvent;
1099     private volatile Component compOnMousePressedEvent;















1100 
1101     @Override
1102     public void showOrHideTouchKeyboard(Component comp, AWTEvent e) {
1103         if ((comp == null) || (e == null) ||
1104             (!(comp instanceof TextComponent) &&
1105                 !(comp instanceof JTextComponent))) {
1106             return;
1107         }
1108 
1109         if ((e instanceof MouseEvent) && comp.isEnabled() &&
1110             comp.isFocusable() &&
1111             (((comp instanceof TextComponent) &&
1112                     ((TextComponent)comp).isEditable()) ||
1113                 ((comp instanceof JTextComponent) &&
1114                     ((JTextComponent)comp).isEditable()))) {
1115             MouseEvent me = (MouseEvent)e;
1116             if (me.getID() == MouseEvent.MOUSE_PRESSED) {
1117                 if (AWTAccessor.getMouseEventAccessor()
1118                         .isCausedByTouchEvent(me)) {
1119                     compOnTouchDownEvent = comp;
1120                 } else {
1121                     compOnMousePressedEvent = comp;
1122                 }
1123             } else if (me.getID() == MouseEvent.MOUSE_RELEASED) {
1124                 if (AWTAccessor.getMouseEventAccessor()
1125                         .isCausedByTouchEvent(me)) {
1126                     if (compOnTouchDownEvent == comp) {
1127                         showTouchKeyboard(true);
1128                     }
1129                     compOnTouchDownEvent = null;
1130                 } else {
1131                     if (compOnMousePressedEvent == comp) {
1132                         showTouchKeyboard(false);
1133                     }
1134                     compOnMousePressedEvent = null;
1135                 }
1136             }
1137         } else if (e instanceof FocusEvent) {
1138             if (e.getID() == FocusEvent.FOCUS_LOST) {
1139                 hideTouchKeyboard();




1140             }
1141         }
1142     }
1143 
1144     private native void showTouchKeyboard(boolean causedByTouchEvent);
1145     private native void hideTouchKeyboard();
1146     ///////////////////////////////////////////////////////////////////////////
1147     // End of the touch keyboard related code.
1148     ///////////////////////////////////////////////////////////////////////////
1149 
1150     @Override
1151     public native boolean syncNativeQueue(final long timeout);
1152 
1153     @Override
1154     public boolean isDesktopSupported() {
1155         return true;
1156     }
1157 
1158     @Override
1159     public DesktopPeer createDesktopPeer(Desktop target) {




  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package sun.awt.windows;
  27 
  28 import java.awt.peer.TaskbarPeer;
  29 import java.awt.*;
  30 import java.awt.im.InputMethodHighlight;
  31 import java.awt.im.spi.InputMethodDescriptor;
  32 import java.awt.image.*;
  33 import java.awt.peer.*;
  34 import java.awt.event.FocusEvent;
  35 import java.awt.event.KeyEvent;
  36 import java.awt.event.MouseEvent;
  37 import java.awt.datatransfer.Clipboard;
  38 import java.awt.TextComponent;
  39 import java.awt.TrayIcon;
  40 import java.beans.PropertyChangeListener;
  41 import java.lang.ref.WeakReference;
  42 import java.security.AccessController;
  43 import java.security.PrivilegedAction;
  44 import javax.swing.text.JTextComponent;
  45 
  46 import sun.awt.AWTAccessor;
  47 import sun.awt.AppContext;
  48 import sun.awt.AWTAutoShutdown;
  49 import sun.awt.AWTPermissions;
  50 import sun.awt.AppContext;
  51 import sun.awt.DisplayChangedListener;
  52 import sun.awt.LightweightFrame;
  53 import sun.awt.SunToolkit;
  54 import sun.awt.util.ThreadGroupUtils;
  55 import sun.awt.Win32GraphicsDevice;
  56 import sun.awt.Win32GraphicsEnvironment;
  57 import sun.awt.datatransfer.DataTransferer;
  58 import sun.java2d.d3d.D3DRenderQueue;
  59 import sun.java2d.opengl.OGLRenderQueue;
  60 
  61 import sun.print.PrintJob2D;


1079     @Override
1080     public void grab(Window w) {
1081         final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
1082         if (peer != null) {
1083             ((WWindowPeer) peer).grab();
1084         }
1085     }
1086 
1087     @Override
1088     public void ungrab(Window w) {
1089         final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
1090         if (peer != null) {
1091             ((WWindowPeer) peer).ungrab();
1092         }
1093     }
1094 
1095     ///////////////////////////////////////////////////////////////////////////
1096     // The following code is used for support of automatic showing of the touch
1097     // keyboard for text components and is accessed only from EDT.
1098     ///////////////////////////////////////////////////////////////////////////
1099     private static final WeakReference<Component> NULL_COMPONENT_WR =
1100         new WeakReference<>(null);
1101     private volatile WeakReference<Component> compOnTouchDownEvent =
1102         NULL_COMPONENT_WR;
1103     private volatile WeakReference<Component> compOnMousePressedEvent =
1104         NULL_COMPONENT_WR;
1105 
1106     private boolean isComponentValidForTouchKeyboard(Component comp) {
1107         if ((comp != null) && comp.isEnabled() && comp.isFocusable() &&
1108             (((comp instanceof TextComponent) &&
1109                     ((TextComponent) comp).isEditable()) ||
1110                 ((comp instanceof JTextComponent) &&
1111                     ((JTextComponent) comp).isEditable()))) {
1112             return true;
1113         }
1114         return false;
1115     }
1116 
1117     @Override
1118     public void showOrHideTouchKeyboard(Component comp, AWTEvent e) {
1119         if (!(comp instanceof TextComponent) &&
1120             !(comp instanceof JTextComponent)) {

1121             return;
1122         }
1123 
1124         if ((e instanceof MouseEvent) && isComponentValidForTouchKeyboard(comp)) {
1125             MouseEvent me = (MouseEvent) e;





1126             if (me.getID() == MouseEvent.MOUSE_PRESSED) {
1127                 if (AWTAccessor.getMouseEventAccessor().isCausedByTouchEvent(me)) {
1128                     compOnTouchDownEvent = new WeakReference<>(comp);

1129                 } else {
1130                     compOnMousePressedEvent = new WeakReference<>(comp);
1131                 }
1132             } else if (me.getID() == MouseEvent.MOUSE_RELEASED) {
1133                 if (AWTAccessor.getMouseEventAccessor().isCausedByTouchEvent(me)) {
1134                     if (compOnTouchDownEvent.get() == comp) {

1135                         showTouchKeyboard(true);
1136                     }
1137                     compOnTouchDownEvent = NULL_COMPONENT_WR;
1138                 } else {
1139                     if (compOnMousePressedEvent.get() == comp) {
1140                         showTouchKeyboard(false);
1141                     }
1142                     compOnMousePressedEvent = NULL_COMPONENT_WR;
1143                 }
1144             }
1145         } else if (e instanceof FocusEvent) {
1146             FocusEvent fe = (FocusEvent) e;
1147             if (fe.getID() == FocusEvent.FOCUS_LOST) {
1148                 // Hide the touch keyboard, if not a text component gains focus.
1149                 if (!isComponentValidForTouchKeyboard(fe.getOppositeComponent())) {
1150                     hideTouchKeyboard();
1151                 }
1152             }
1153         }
1154     }
1155 
1156     private native void showTouchKeyboard(boolean causedByTouchEvent);
1157     private native void hideTouchKeyboard();
1158     ///////////////////////////////////////////////////////////////////////////
1159     // End of the touch keyboard related code.
1160     ///////////////////////////////////////////////////////////////////////////
1161 
1162     @Override
1163     public native boolean syncNativeQueue(final long timeout);
1164 
1165     @Override
1166     public boolean isDesktopSupported() {
1167         return true;
1168     }
1169 
1170     @Override
1171     public DesktopPeer createDesktopPeer(Desktop target) {


< prev index next >