summarylogtreecommitdiffstats
path: root/idea.patch
diff options
context:
space:
mode:
Diffstat (limited to 'idea.patch')
-rw-r--r--idea.patch429
1 files changed, 0 insertions, 429 deletions
diff --git a/idea.patch b/idea.patch
deleted file mode 100644
index cc5deee33acf..000000000000
--- a/idea.patch
+++ /dev/null
@@ -1,429 +0,0 @@
-diff --git a/src/java.desktop/share/classes/java/awt/Container.java b/src/java.desktop/share/classes/java/awt/Container.java
-index 1327b2fded9..c2ebc03fcc1 100644
---- a/src/java.desktop/share/classes/java/awt/Container.java
-+++ b/src/java.desktop/share/classes/java/awt/Container.java
-@@ -25,6 +25,7 @@
-
- package java.awt;
-
-+import java.awt.Point;
- import java.awt.dnd.DropTarget;
- import java.awt.event.AWTEventListener;
- import java.awt.event.ComponentEvent;
-@@ -682,6 +683,14 @@ public class Container extends Component {
- }
- }
-
-+ /**
-+ * fix fcitx position
-+ * @return Point
-+ */
-+ public Point getPeerLocationOnScreen(){
-+ return peer.getLocationOnScreen();
-+ }
-+
- /**
- * Detects whether or not remove from current parent and adding to new parent requires call of
- * removeNotify on the component. Since removeNotify destroys native window this might (not)
-diff --git a/src/java.desktop/share/classes/javax/swing/JTextArea.java b/src/java.desktop/share/classes/javax/swing/JTextArea.java
-index ecc9342f05a..eea39c9e03a 100644
---- a/src/java.desktop/share/classes/javax/swing/JTextArea.java
-+++ b/src/java.desktop/share/classes/javax/swing/JTextArea.java
-@@ -562,6 +562,14 @@ public class JTextArea extends JTextComponent {
- return rowHeight;
- }
-
-+ /**
-+ * fix fcitx position
-+ * @return FontMetrics
-+ */
-+ public FontMetrics getFontMetrics() {
-+ return getFontMetrics(getFont());
-+ }
-+
- /**
- * Returns the number of columns in the TextArea.
- *
-diff --git a/src/java.desktop/share/classes/javax/swing/JTextField.java b/src/java.desktop/share/classes/javax/swing/JTextField.java
-index 3abe09d0565..50dc549bdba 100644
---- a/src/java.desktop/share/classes/javax/swing/JTextField.java
-+++ b/src/java.desktop/share/classes/javax/swing/JTextField.java
-@@ -427,6 +427,14 @@ public class JTextField extends JTextComponent implements SwingConstants {
- return columnWidth;
- }
-
-+ /**
-+ * fix fcitx position
-+ * @return FontMetrics
-+ */
-+ public FontMetrics getFontMetrics() {
-+ return getFontMetrics(getFont());
-+ }
-+
- /**
- * Returns the preferred size <code>Dimensions</code> needed for this
- * <code>TextField</code>. If a non-zero number of columns has been
-diff --git a/src/java.desktop/share/classes/sun/awt/im/InputContext.java b/src/java.desktop/share/classes/sun/awt/im/InputContext.java
-index bb955dc5089..7c42e2aa685 100644
---- a/src/java.desktop/share/classes/sun/awt/im/InputContext.java
-+++ b/src/java.desktop/share/classes/sun/awt/im/InputContext.java
-@@ -28,6 +28,7 @@ package sun.awt.im;
- import java.awt.AWTEvent;
- import java.awt.AWTKeyStroke;
- import java.awt.Component;
-+import java.awt.Cursor;
- import java.awt.EventQueue;
- import java.awt.Frame;
- import java.awt.Rectangle;
-@@ -39,6 +40,7 @@ import java.awt.event.FocusEvent;
- import java.awt.event.InputEvent;
- import java.awt.event.InputMethodEvent;
- import java.awt.event.KeyEvent;
-+import java.awt.event.MouseEvent;
- import java.awt.event.WindowEvent;
- import java.awt.event.WindowListener;
- import java.awt.im.InputMethodRequests;
-@@ -54,6 +56,7 @@ import java.util.prefs.BackingStoreException;
- import java.util.prefs.Preferences;
- import sun.util.logging.PlatformLogger;
- import sun.awt.SunToolkit;
-+import sun.awt.X11InputMethod;
-
- /**
- * This InputContext class contains parts of the implementation of
-@@ -249,13 +252,23 @@ public class InputContext extends java.awt.im.InputContext
- focusLost((Component) event.getSource(), ((FocusEvent) event).isTemporary());
- break;
-
-+ case MouseEvent.MOUSE_RELEASED:
-+ if (((Component) event.getSource()).getCursor().getType() == Cursor.TEXT_CURSOR) {
-+ transCaretPositionToXIM((Component) event.getSource());
-+ break;
-+ }
-+
- case KeyEvent.KEY_PRESSED:
-- if (checkInputMethodSelectionKey((KeyEvent)event)) {
-+ if (event instanceof KeyEvent && checkInputMethodSelectionKey((KeyEvent)event)) {
- // pop up the input method selection menu
- InputMethodManager.getInstance().notifyChangeRequestByHotKey((Component)event.getSource());
- break;
- }
-
-+ case KeyEvent.KEY_RELEASED:
-+ transCaretPositionToXIM((Component) event.getSource());
-+ break;
-+
- // fall through
-
- default:
-@@ -360,6 +373,46 @@ public class InputContext extends java.awt.im.InputContext
- }
- }
-
-+ /**
-+ * fix fcitx position
-+ */
-+ private void transCaretPositionToXIM(Component source) {
-+ synchronized (source.getTreeLock()) {
-+ synchronized (this) {
-+ if ("sun.awt.im.CompositionArea".equals(source.getClass().getName())) {
-+ // no special handling for this one
-+ } else if (getComponentWindow(source) instanceof InputMethodWindow) {
-+ // no special handling for this one either
-+ } else {
-+ if (!source.isDisplayable()) {
-+ // Component is being disposed
-+ return;
-+ }
-+ currentClientComponent = source;
-+ }
-+ awtFocussedComponent = source;
-+ if (inputMethod != null && inputMethod instanceof X11InputMethod) {
-+ ((X11InputMethod)inputMethod).setXICTextCursorPosition(source);
-+ }
-+ InputMethodContext inputContext = ((InputMethodContext)this);
-+ if (!inputContext.isCompositionAreaVisible()) {
-+ InputMethodRequests req = source.getInputMethodRequests();
-+ if (req != null && inputContext.useBelowTheSpotInput()) {
-+ inputContext.setCompositionAreaUndecorated(true);
-+ } else {
-+ inputContext.setCompositionAreaUndecorated(false);
-+ }
-+ }
-+ // restores the composition area if it was set to invisible
-+ // when focus got lost
-+ if (compositionAreaHidden == true) {
-+ ((InputMethodContext)this).setCompositionAreaVisible(true);
-+ compositionAreaHidden = false;
-+ }
-+ }
-+ }
-+ }
-+
- /**
- * Activates the current input method of this input context, and grabs
- * the composition area for use by this input context.
-diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java b/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java
-index 4244812ceb0..e1e8eff44d3 100644
---- a/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java
-+++ b/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java
-@@ -28,12 +28,26 @@ package sun.awt.X11;
- import java.awt.AWTException;
- import java.awt.Component;
- import java.awt.Container;
-+import java.awt.geom.Point2D;
-+import java.awt.FontMetrics;
-+import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.im.spi.InputMethodContext;
- import java.awt.peer.ComponentPeer;
-+import java.awt.GraphicsDevice;
-+import java.awt.GraphicsEnvironment;
-+
-+import java.lang.reflect.Field;
-+import java.lang.reflect.InvocationTargetException;
-+import java.lang.reflect.Method;
-+
-+import javax.swing.JTextArea;
-+import javax.swing.JTextField;
-+import javax.swing.text.JTextComponent;
-
- import sun.awt.AWTAccessor;
- import sun.awt.X11InputMethod;
-+import sun.awt.X11GraphicsDevice;
-
- import sun.util.logging.PlatformLogger;
-
-@@ -45,8 +59,13 @@ import sun.util.logging.PlatformLogger;
- public class XInputMethod extends X11InputMethod {
- private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XInputMethod");
-
-+ private int scale = -1;
-+
- public XInputMethod() throws AWTException {
- super();
-+ GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
-+ if (device instanceof X11GraphicsDevice)
-+ scale = ((X11GraphicsDevice) device).getScaleFactor();
- }
-
- public void setInputMethodContext(InputMethodContext context) {
-@@ -86,15 +105,29 @@ public class XInputMethod extends X11InputMethod {
-
- private static volatile long xicFocus = 0;
-
-+ /**
-+ * fix fcitx position
-+ */
-+ public void setXICTextCursorOffXY(ComponentPeer peer) {
-+ if (peer == null) {
-+ return;
-+ }
-+ xicFocus = ((XComponentPeer)peer).getContentWindow();
-+ int[] result = getOffXYRelateToFrame(peer ,true);
-+ setXICFocusNative(((XComponentPeer)peer).getContentWindow(),true,true,result);
-+ }
-+
- protected void setXICFocus(ComponentPeer peer,
- boolean value, boolean active) {
- if (peer == null) {
- return;
- }
- xicFocus = ((XComponentPeer)peer).getContentWindow();
-+ int[] result = getOffXYRelateToFrame(peer ,value);
- setXICFocusNative(((XComponentPeer)peer).getContentWindow(),
- value,
-- active);
-+ active,
-+ result);
- }
-
- public static long getXICFocus() {
-@@ -133,6 +166,74 @@ public class XInputMethod extends X11InputMethod {
- return null;
- }
-
-+ protected int[] getOffXYRelateToFrame(ComponentPeer peer, boolean value) {
-+ int[] result = null;
-+ if(value && this.awtFocussedComponent !=null && this.awtFocussedComponent instanceof JTextComponent){
-+ try {
-+ Method method_getFontMetrics = null;
-+ Method method_getEditor = null;
-+ FontMetrics font_metrics = null;
-+ Object editor = null;
-+ int font_height = 0;
-+ int caret_x = 0;
-+ int caret_y = 0;
-+ if(this.awtFocussedComponent instanceof JTextArea || this.awtFocussedComponent instanceof JTextField){
-+ method_getFontMetrics = this.awtFocussedComponent.getClass().getMethod("getFontMetrics");
-+ font_metrics = (FontMetrics)method_getFontMetrics.invoke(this.awtFocussedComponent);
-+ font_height = font_metrics.getHeight();
-+ JTextComponent jc = (JTextComponent)this.awtFocussedComponent;
-+ if(jc.getCaret().getMagicCaretPosition() != null) {
-+ caret_x = jc.getCaret().getMagicCaretPosition().x;
-+ caret_y = jc.getCaret().getMagicCaretPosition().y;
-+ }
-+ } else {
-+ method_getEditor = this.awtFocussedComponent.getClass().getMethod("getEditor");
-+
-+ editor = method_getEditor.invoke(this.awtFocussedComponent);
-+
-+ method_getFontMetrics = editor.getClass().getMethod("getFontMetrics",int.class);
-+ font_metrics = (FontMetrics)method_getFontMetrics.invoke(editor, 0);
-+ font_height = font_metrics.getHeight();
-+ Method getCaretLocations = editor.getClass().getMethod("getCaretLocations", boolean.class);
-+ Object[] locations = (Object[])getCaretLocations.invoke(editor, false);
-+ Field point = locations[0].getClass().getField("myPoint");
-+ Object myPoint = point.get(locations[0]);
-+ if (myPoint instanceof Point) {
-+ // convert to Point
-+ Point p = (Point) myPoint;
-+ caret_x = p.x;
-+ caret_y = p.y;
-+ } else if (myPoint instanceof Point2D) {
-+ // convert to Point2D.Double
-+ Point2D.Double pd = (Point2D.Double) myPoint;
-+ caret_x = (int) pd.x;
-+ caret_y = (int) pd.y;
-+ }
-+ }
-+
-+ Method method_getLocationOnScreen = this.awtFocussedComponent.getClass().getMethod("getLocationOnScreen");
-+
-+ Point point = (Point)method_getLocationOnScreen.invoke(this.awtFocussedComponent);
-+
-+ Method method_getNativeContainer = Component.class.getDeclaredMethod("getNativeContainer");
-+ method_getNativeContainer.setAccessible(true);
-+ Container c = (Container)method_getNativeContainer.invoke(awtFocussedComponent);
-+ if(c != null) {
-+ result = new int[]{point.x - c.getPeerLocationOnScreen().x + caret_x, point.y - c.getPeerLocationOnScreen().y + font_height + caret_y};
-+ if (scale > 1) {
-+ result[0] *= scale;
-+ result[1] *= scale;
-+ }
-+ }
-+
-+ return result;
-+ } catch (Exception e) {
-+ e.printStackTrace();
-+ }
-+ }
-+ return result;
-+ }
-+
- /*
- * Subclasses should override disposeImpl() instead of dispose(). Client
- * code should always invoke dispose(), never disposeImpl().
-@@ -253,6 +354,6 @@ public class XInputMethod extends X11InputMethod {
- private native boolean recreateXICNative(long window, long px11data, int ctxid);
- private native int releaseXICNative(long px11data);
- private native void setXICFocusNative(long window,
-- boolean value, boolean active);
-+ boolean value, boolean active, int[] offxy);
- private native void adjustStatusWindow(long window);
- }
-diff --git a/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java b/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java
-index d9bed439688..623af69478e 100644
---- a/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java
-+++ b/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java
-@@ -33,6 +33,7 @@ import java.awt.AWTException;
- import java.awt.event.InputMethodEvent;
- import java.awt.font.TextAttribute;
- import java.awt.font.TextHitInfo;
-+import java.awt.Component;
- import java.awt.peer.ComponentPeer;
- import java.text.AttributedString;
- import java.util.Map;
-@@ -57,6 +58,11 @@ public abstract class X11InputMethod extends X11InputMethodBase {
- super();
- }
-
-+ /**
-+ * fix fcitx position
-+ */
-+ public abstract void setXICTextCursorOffXY(ComponentPeer peer);
-+
- /**
- * Reset the composition state to the current composition state.
- */
-@@ -380,6 +386,27 @@ public abstract class X11InputMethod extends X11InputMethodBase {
- }
- }
-
-+ /**
-+ * fix fcitx position
-+ */
-+ public synchronized void setXICTextCursorPosition(Component component) {
-+ if (component == null) {
-+ return;
-+ }
-+ if (isActive) {
-+ // deactivate/activate are being suppressed during a focus change -
-+ // this may happen when an input method window is made visible
-+ // boolean ac = haveActiveClient(); already set true in awt_InputMethod.c
-+ setXICTextCursorOffXY(getPeer(awtFocussedComponent));
-+
-+ }
-+ awtFocussedComponent = component;
-+ ComponentPeer awtFocussedComponentPeer = getPeer(awtFocussedComponent);
-+ if(awtFocussedComponent != null) {
-+ setXICTextCursorOffXY(awtFocussedComponentPeer);
-+ }
-+ }
-+
- protected abstract boolean recreateXIC(int ctxid);
- protected abstract int releaseXIC();
- private static native boolean recreateX11InputMethod();
-diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c
-index e63741f583e..55d847b98ac 100644
---- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c
-+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c
-@@ -434,13 +434,17 @@ setXICFocus(XIC ic, unsigned short req)
- * Sets the focus window to the given XIC.
- */
- static void
--setXICWindowFocus(XIC ic, Window w)
-+setXICWindowFocus(XIC ic, Window w, int arr[2])
- {
- if (ic == NULL) {
- (void)fprintf(stderr, "Couldn't find X Input Context\n");
- return;
- }
-- (void) XSetICValues(ic, XNFocusWindow, w, NULL);
-+ XPoint spot;
-+ spot.x = arr[0];
-+ spot.y = arr[1];
-+ XVaNestedList xy = (XVaNestedList)XVaCreateNestedList(0, XNSpotLocation, &spot, NULL);
-+ (void) XSetICValues(ic, XNFocusWindow, w, XNPreeditAttributes, xy, NULL);
- }
-
- /*
-@@ -1519,7 +1523,8 @@ Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env,
- jobject this,
- jlong w,
- jboolean req,
-- jboolean active)
-+ jboolean active,
-+ jintArray arr)
- {
- X11InputMethodData *pX11IMData;
- AWT_LOCK();
-@@ -1540,7 +1545,17 @@ Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env,
- * On Solaris2.6, setXICWindowFocus() has to be invoked
- * before setting focus.
- */
-- setXICWindowFocus(pX11IMData->current_ic, w);
-+ int positions[2] = {100,50};
-+ if (arr)
-+ {
-+ int length = (*env)->GetArrayLength(env,arr);
-+ int *addArr = (*env)->GetIntArrayElements(env, arr, NULL);
-+ for (int i= 0; i < length; ++i) {
-+ positions[i] = *(addArr + i);
-+ }
-+ (*env)->ReleaseIntArrayElements(env, arr, addArr, 0);
-+ }
-+ setXICWindowFocus(pX11IMData->current_ic, w, positions);
- setXICFocus(pX11IMData->current_ic, req);
- currentX11InputMethodInstance = pX11IMData->x11inputmethod;
- currentFocusWindow = w;