13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 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.*; 29 import java.awt.im.InputMethodHighlight; 30 import java.awt.im.spi.InputMethodDescriptor; 31 import java.awt.image.*; 32 import java.awt.peer.*; 33 import java.awt.event.KeyEvent; 34 import java.awt.datatransfer.Clipboard; 35 import java.awt.TrayIcon; 36 import java.beans.PropertyChangeListener; 37 import java.security.AccessController; 38 import java.security.PrivilegedAction; 39 import sun.awt.AppContext; 40 import sun.awt.AWTAutoShutdown; 41 import sun.awt.LightweightFrame; 42 import sun.awt.SunToolkit; 43 import sun.misc.ThreadGroupUtils; 44 import sun.awt.Win32GraphicsDevice; 45 import sun.awt.Win32GraphicsEnvironment; 46 import sun.awt.datatransfer.DataTransferer; 47 import sun.java2d.d3d.D3DRenderQueue; 48 import sun.java2d.opengl.OGLRenderQueue; 49 50 import sun.print.PrintJob2D; 51 52 import java.awt.dnd.DragSource; 53 import java.awt.dnd.DragGestureListener; 54 import java.awt.dnd.DragGestureEvent; 55 import java.awt.dnd.DragGestureRecognizer; 56 import java.awt.dnd.MouseDragGestureRecognizer; 57 import java.awt.dnd.InvalidDnDOperationException; 58 import java.awt.dnd.peer.DragSourceContextPeer; 59 1084 public boolean useBufferPerWindow() { 1085 return !Win32GraphicsEnvironment.isDWMCompositionEnabled(); 1086 } 1087 1088 @Override 1089 @SuppressWarnings("deprecation") 1090 public void grab(Window w) { 1091 if (w.getPeer() != null) { 1092 ((WWindowPeer)w.getPeer()).grab(); 1093 } 1094 } 1095 1096 @Override 1097 @SuppressWarnings("deprecation") 1098 public void ungrab(Window w) { 1099 if (w.getPeer() != null) { 1100 ((WWindowPeer)w.getPeer()).ungrab(); 1101 } 1102 } 1103 1104 @Override 1105 public native boolean syncNativeQueue(final long timeout); 1106 @Override 1107 public boolean isDesktopSupported() { 1108 return true; 1109 } 1110 1111 @Override 1112 public DesktopPeer createDesktopPeer(Desktop target) { 1113 return new WDesktopPeer(); 1114 } 1115 1116 private static native void setExtraMouseButtonsEnabledNative(boolean enable); 1117 1118 @Override 1119 public boolean areExtraMouseButtonsEnabled() throws HeadlessException { 1120 return areExtraMouseButtonsEnabled; 1121 } 1122 1123 private native synchronized int getNumberOfButtonsImpl(); | 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 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.*; 29 import java.awt.im.InputMethodHighlight; 30 import java.awt.im.spi.InputMethodDescriptor; 31 import java.awt.image.*; 32 import java.awt.peer.*; 33 import java.awt.event.FocusEvent; 34 import java.awt.event.KeyEvent; 35 import java.awt.event.MouseEvent; 36 import java.awt.datatransfer.Clipboard; 37 import java.awt.TextComponent; 38 import java.awt.TrayIcon; 39 import java.beans.PropertyChangeListener; 40 import java.security.AccessController; 41 import java.security.PrivilegedAction; 42 import javax.swing.text.JTextComponent; 43 44 import sun.awt.AppContext; 45 import sun.awt.AWTAccessor; 46 import sun.awt.AWTAutoShutdown; 47 import sun.awt.LightweightFrame; 48 import sun.awt.SunToolkit; 49 import sun.misc.ThreadGroupUtils; 50 import sun.awt.Win32GraphicsDevice; 51 import sun.awt.Win32GraphicsEnvironment; 52 import sun.awt.datatransfer.DataTransferer; 53 import sun.java2d.d3d.D3DRenderQueue; 54 import sun.java2d.opengl.OGLRenderQueue; 55 56 import sun.print.PrintJob2D; 57 58 import java.awt.dnd.DragSource; 59 import java.awt.dnd.DragGestureListener; 60 import java.awt.dnd.DragGestureEvent; 61 import java.awt.dnd.DragGestureRecognizer; 62 import java.awt.dnd.MouseDragGestureRecognizer; 63 import java.awt.dnd.InvalidDnDOperationException; 64 import java.awt.dnd.peer.DragSourceContextPeer; 65 1090 public boolean useBufferPerWindow() { 1091 return !Win32GraphicsEnvironment.isDWMCompositionEnabled(); 1092 } 1093 1094 @Override 1095 @SuppressWarnings("deprecation") 1096 public void grab(Window w) { 1097 if (w.getPeer() != null) { 1098 ((WWindowPeer)w.getPeer()).grab(); 1099 } 1100 } 1101 1102 @Override 1103 @SuppressWarnings("deprecation") 1104 public void ungrab(Window w) { 1105 if (w.getPeer() != null) { 1106 ((WWindowPeer)w.getPeer()).ungrab(); 1107 } 1108 } 1109 1110 /////////////////////////////////////////////////////////////////////////// 1111 // The following code is used for support of automatic showing of the touch 1112 // keyboard for text components and is accessed only from EDT. 1113 /////////////////////////////////////////////////////////////////////////// 1114 private volatile Component compOnTouchDownEvent; 1115 private volatile Component compOnMousePressedEvent; 1116 1117 @Override 1118 public void showOrHideTouchKeyboard(Component comp, AWTEvent e) { 1119 if ((comp == null) || (e == null) || 1120 (!(comp instanceof TextComponent) && 1121 !(comp instanceof JTextComponent))) { 1122 return; 1123 } 1124 1125 if ((e instanceof MouseEvent) && comp.isEnabled() && 1126 (((comp instanceof TextComponent) && 1127 ((TextComponent)comp).isEditable()) || 1128 ((comp instanceof JTextComponent) && 1129 ((JTextComponent)comp).isEditable()))) { 1130 MouseEvent me = (MouseEvent)e; 1131 if (me.getID() == MouseEvent.MOUSE_PRESSED) { 1132 if (AWTAccessor.getMouseEventAccessor() 1133 .isCausedByTouchEvent(me)) { 1134 compOnTouchDownEvent = comp; 1135 } else { 1136 compOnMousePressedEvent = comp; 1137 } 1138 } else if (me.getID() == MouseEvent.MOUSE_RELEASED) { 1139 if (AWTAccessor.getMouseEventAccessor() 1140 .isCausedByTouchEvent(me)) { 1141 if (compOnTouchDownEvent == comp) { 1142 showTouchKeyboard(true); 1143 } 1144 compOnTouchDownEvent = null; 1145 } else { 1146 if (compOnMousePressedEvent == comp) { 1147 showTouchKeyboard(false); 1148 } 1149 compOnMousePressedEvent = null; 1150 } 1151 } 1152 } else if (e instanceof FocusEvent) { 1153 if (e.getID() == FocusEvent.FOCUS_LOST) { 1154 hideTouchKeyboard(); 1155 } 1156 } 1157 } 1158 1159 private native void showTouchKeyboard(boolean causedByTouchEvent); 1160 private native void hideTouchKeyboard(); 1161 /////////////////////////////////////////////////////////////////////////// 1162 // End of the touch keyboard related code. 1163 /////////////////////////////////////////////////////////////////////////// 1164 1165 @Override 1166 public native boolean syncNativeQueue(final long timeout); 1167 @Override 1168 public boolean isDesktopSupported() { 1169 return true; 1170 } 1171 1172 @Override 1173 public DesktopPeer createDesktopPeer(Desktop target) { 1174 return new WDesktopPeer(); 1175 } 1176 1177 private static native void setExtraMouseButtonsEnabledNative(boolean enable); 1178 1179 @Override 1180 public boolean areExtraMouseButtonsEnabled() throws HeadlessException { 1181 return areExtraMouseButtonsEnabled; 1182 } 1183 1184 private native synchronized int getNumberOfButtonsImpl(); |