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) {
|