< prev index next >
src/windows/classes/sun/awt/windows/WToolkit.java
Print this page
*** 28,44 ****
--- 28,50 ----
import java.awt.*;
import java.awt.im.InputMethodHighlight;
import java.awt.im.spi.InputMethodDescriptor;
import java.awt.image.*;
import java.awt.peer.*;
+ import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
import java.awt.datatransfer.Clipboard;
+ import java.awt.TextComponent;
import java.awt.TrayIcon;
import java.beans.PropertyChangeListener;
import java.security.AccessController;
import java.security.PrivilegedAction;
+ import javax.swing.text.JTextComponent;
+
import sun.awt.AppContext;
+ import sun.awt.AWTAccessor;
import sun.awt.AWTAutoShutdown;
import sun.awt.LightweightFrame;
import sun.awt.SunToolkit;
import sun.misc.ThreadGroupUtils;
import sun.awt.Win32GraphicsDevice;
*** 1099,1108 ****
--- 1105,1169 ----
if (w.getPeer() != null) {
((WWindowPeer)w.getPeer()).ungrab();
}
}
+ ///////////////////////////////////////////////////////////////////////////
+ // The following code is used for support of automatic showing of the touch
+ // keyboard for text components and is accessed only from EDT.
+ ///////////////////////////////////////////////////////////////////////////
+ private volatile Component compOnTouchDownEvent;
+ private volatile Component compOnMousePressedEvent;
+
+ @Override
+ public void showOrHideTouchKeyboard(Component comp, AWTEvent e) {
+ if ((comp == null) || (e == null) ||
+ (!(comp instanceof TextComponent) &&
+ !(comp instanceof JTextComponent))) {
+ return;
+ }
+
+ if ((e instanceof MouseEvent) && comp.isEnabled() &&
+ (((comp instanceof TextComponent) &&
+ ((TextComponent)comp).isEditable()) ||
+ ((comp instanceof JTextComponent) &&
+ ((JTextComponent)comp).isEditable()))) {
+ MouseEvent me = (MouseEvent)e;
+ if (me.getID() == MouseEvent.MOUSE_PRESSED) {
+ if (AWTAccessor.getMouseEventAccessor()
+ .isCausedByTouchEvent(me)) {
+ compOnTouchDownEvent = comp;
+ } else {
+ compOnMousePressedEvent = comp;
+ }
+ } else if (me.getID() == MouseEvent.MOUSE_RELEASED) {
+ if (AWTAccessor.getMouseEventAccessor()
+ .isCausedByTouchEvent(me)) {
+ if (compOnTouchDownEvent == comp) {
+ showTouchKeyboard(true);
+ }
+ compOnTouchDownEvent = null;
+ } else {
+ if (compOnMousePressedEvent == comp) {
+ showTouchKeyboard(false);
+ }
+ compOnMousePressedEvent = null;
+ }
+ }
+ } else if (e instanceof FocusEvent) {
+ if (e.getID() == FocusEvent.FOCUS_LOST) {
+ hideTouchKeyboard();
+ }
+ }
+ }
+
+ private native void showTouchKeyboard(boolean causedByTouchEvent);
+ private native void hideTouchKeyboard();
+ ///////////////////////////////////////////////////////////////////////////
+ // End of the touch keyboard related code.
+ ///////////////////////////////////////////////////////////////////////////
+
@Override
public native boolean syncNativeQueue(final long timeout);
@Override
public boolean isDesktopSupported() {
return true;
< prev index next >