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.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.KeyEvent; 35 import java.awt.datatransfer.Clipboard; 36 import java.awt.TrayIcon; 37 import java.beans.PropertyChangeListener; 38 import java.security.AccessController; 39 import java.security.PrivilegedAction; 40 41 import sun.awt.AWTAccessor; 42 import sun.awt.AppContext; 43 import sun.awt.AWTAutoShutdown; 44 import sun.awt.AWTPermissions; 45 import sun.awt.AppContext; 46 import sun.awt.LightweightFrame; 47 import sun.awt.SunToolkit; 48 import sun.awt.util.ThreadGroupUtils; 49 import sun.awt.Win32GraphicsDevice; 50 import sun.awt.Win32GraphicsEnvironment; 51 import sun.awt.datatransfer.DataTransferer; 52 import sun.java2d.d3d.D3DRenderQueue; 53 import sun.java2d.opengl.OGLRenderQueue; 54 55 import sun.print.PrintJob2D; 56 57 import java.awt.dnd.DragSource; 58 import java.awt.dnd.DragGestureListener; 59 import java.awt.dnd.DragGestureEvent; 1067 public boolean useBufferPerWindow() { 1068 return !Win32GraphicsEnvironment.isDWMCompositionEnabled(); 1069 } 1070 1071 @Override 1072 public void grab(Window w) { 1073 final Object peer = AWTAccessor.getComponentAccessor().getPeer(w); 1074 if (peer != null) { 1075 ((WWindowPeer) peer).grab(); 1076 } 1077 } 1078 1079 @Override 1080 public void ungrab(Window w) { 1081 final Object peer = AWTAccessor.getComponentAccessor().getPeer(w); 1082 if (peer != null) { 1083 ((WWindowPeer) peer).ungrab(); 1084 } 1085 } 1086 1087 @Override 1088 public native boolean syncNativeQueue(final long timeout); 1089 1090 @Override 1091 public boolean isDesktopSupported() { 1092 return true; 1093 } 1094 1095 @Override 1096 public DesktopPeer createDesktopPeer(Desktop target) { 1097 return new WDesktopPeer(); 1098 } 1099 1100 @Override 1101 public boolean isTaskbarSupported() { 1102 return WTaskbarPeer.isTaskbarSupported(); 1103 } 1104 1105 @Override 1106 public TaskbarPeer createTaskbarPeer(Taskbar target) { | 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.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.LightweightFrame; 51 import sun.awt.SunToolkit; 52 import sun.awt.util.ThreadGroupUtils; 53 import sun.awt.Win32GraphicsDevice; 54 import sun.awt.Win32GraphicsEnvironment; 55 import sun.awt.datatransfer.DataTransferer; 56 import sun.java2d.d3d.D3DRenderQueue; 57 import sun.java2d.opengl.OGLRenderQueue; 58 59 import sun.print.PrintJob2D; 60 61 import java.awt.dnd.DragSource; 62 import java.awt.dnd.DragGestureListener; 63 import java.awt.dnd.DragGestureEvent; 1071 public boolean useBufferPerWindow() { 1072 return !Win32GraphicsEnvironment.isDWMCompositionEnabled(); 1073 } 1074 1075 @Override 1076 public void grab(Window w) { 1077 final Object peer = AWTAccessor.getComponentAccessor().getPeer(w); 1078 if (peer != null) { 1079 ((WWindowPeer) peer).grab(); 1080 } 1081 } 1082 1083 @Override 1084 public void ungrab(Window w) { 1085 final Object peer = AWTAccessor.getComponentAccessor().getPeer(w); 1086 if (peer != null) { 1087 ((WWindowPeer) peer).ungrab(); 1088 } 1089 } 1090 1091 /////////////////////////////////////////////////////////////////////////// 1092 // The following code is used for support of automatic showing of the touch 1093 // keyboard for text components and is accessed only from EDT. 1094 /////////////////////////////////////////////////////////////////////////// 1095 private Component compOnTouchDownEvent; 1096 private Component compOnMousePressedEvent; 1097 1098 @Override 1099 public void showOrHideTouchKeyboard(Component comp, AWTEvent e) { 1100 if ((comp == null) || (e == null) || 1101 (!(comp instanceof TextComponent) && 1102 !(comp instanceof JTextComponent))) { 1103 return; 1104 } 1105 1106 if ((e instanceof MouseEvent) && comp.isEnabled() && 1107 (((comp instanceof TextComponent) && 1108 ((TextComponent)comp).isEditable()) || 1109 ((comp instanceof JTextComponent) && 1110 ((JTextComponent)comp).isEditable()))) { 1111 MouseEvent me = (MouseEvent)e; 1112 if (me.getID() == MouseEvent.MOUSE_PRESSED) { 1113 if (AWTAccessor.getMouseEventAccessor() 1114 .isCausedByTouchEvent(me)) { 1115 compOnTouchDownEvent = comp; 1116 } else { 1117 compOnMousePressedEvent = comp; 1118 } 1119 } else if (me.getID() == MouseEvent.MOUSE_RELEASED) { 1120 if (AWTAccessor.getMouseEventAccessor() 1121 .isCausedByTouchEvent(me)) { 1122 if (compOnTouchDownEvent == comp) { 1123 showTouchKeyboard(true); 1124 } 1125 compOnTouchDownEvent = null; 1126 } else { 1127 if (compOnMousePressedEvent == comp) { 1128 showTouchKeyboard(false); 1129 } 1130 compOnMousePressedEvent = null; 1131 } 1132 } 1133 } else if (e instanceof FocusEvent) { 1134 if (e.getID() == FocusEvent.FOCUS_LOST) { 1135 hideTouchKeyboard(); 1136 } 1137 } 1138 } 1139 1140 private native void showTouchKeyboard(boolean causedByTouchEvent); 1141 private native void hideTouchKeyboard(); 1142 /////////////////////////////////////////////////////////////////////////// 1143 // End of the touch keyboard related code. 1144 /////////////////////////////////////////////////////////////////////////// 1145 1146 @Override 1147 public native boolean syncNativeQueue(final long timeout); 1148 1149 @Override 1150 public boolean isDesktopSupported() { 1151 return true; 1152 } 1153 1154 @Override 1155 public DesktopPeer createDesktopPeer(Desktop target) { 1156 return new WDesktopPeer(); 1157 } 1158 1159 @Override 1160 public boolean isTaskbarSupported() { 1161 return WTaskbarPeer.isTaskbarSupported(); 1162 } 1163 1164 @Override 1165 public TaskbarPeer createTaskbarPeer(Taskbar target) { |