jdk/src/solaris/native/sun/awt/awt_TextField.c
changeset 1192 715cf9378c53
parent 1051 90cf935adb35
parent 1191 f142c1da78c2
child 1193 41afb8ee8f45
--- a/jdk/src/solaris/native/sun/awt/awt_TextField.c	Wed Jul 05 16:40:31 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,989 +0,0 @@
-/*
- * Copyright 1995-2003 Sun Microsystems, Inc.  All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-
-#ifdef HEADLESS
-    #error This file should not be included in headless library
-#endif
-
-#include <Xm/VirtKeys.h>
-
-#include "awt_p.h"
-#include "java_awt_TextField.h"
-#include "java_awt_Color.h"
-#include "java_awt_AWTEvent.h"
-#include "java_awt_Font.h"
-#include "java_awt_Canvas.h"
-#include "sun_awt_motif_MComponentPeer.h"
-#include "sun_awt_motif_MCanvasPeer.h"
-#include "sun_awt_motif_MTextFieldPeer.h"
-
-#include "awt_Component.h"
-#include "awt_TextField.h"
-
-#include "multi_font.h"
-#include <jni.h>
-#include <jni_util.h>
-#include <Xm/DropSMgr.h>
-#include <Xm/TextFP.h>  /* Motif TextField private header. */
-
-
-#define ECHO_BUFFER_LEN 1024
-
-extern struct MComponentPeerIDs mComponentPeerIDs;
-extern AwtGraphicsConfigDataPtr
-    copyGraphicsConfigToPeer(JNIEnv *env, jobject this);
-struct TextFieldIDs textFieldIDs;
-struct MTextFieldPeerIDs mTextFieldPeerIDs;
-
-/*
- * Class:     java_awt_TextField
- * Method:    initIDs
- * Signature: ()V
- */
-
-/* This function gets called from the static initializer for TextField.java
-   to initialize the fieldIDs for fields that may be accessed from C */
-
-JNIEXPORT void JNICALL
-Java_java_awt_TextField_initIDs
-  (JNIEnv *env, jclass cls)
-{
-    textFieldIDs.echoChar =
-      (*env)->GetFieldID(env, cls, "echoChar", "C");
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    initIDs
- * Signature: ()V
- */
-
-/* This function gets called from the static initializer for
-   MTextFieldPeer.java to initialize the fieldIDs for fields that may
-   be accessed from C */
-
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MTextFieldPeer_initIDs
-  (JNIEnv *env, jclass cls)
-{
-    mTextFieldPeerIDs.firstChangeSkipped =
-      (*env)->GetFieldID(env, cls, "firstChangeSkipped", "Z");
-}
-
-static void
-echoChar(Widget text_w, XtPointer unused, XmTextVerifyCallbackStruct * cbs)
-{
-    size_t len;
-    int32_t c;
-    char *val;
-    struct DPos *dp;
-    int32_t ret;
-    jobject globalRef;
-    int32_t i, numbytes;
-
-    struct TextFieldData *tdata;
-
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-
-    /*
-     * Get the echoContextID from the globalRef which is stored in
-     * the XmNuserData resource for the widget.
-     */
-    XtVaGetValues(text_w,XmNuserData,&globalRef,NULL);
-
-    tdata = (struct TextFieldData *)
-      (*env)->GetLongField(env,globalRef,mComponentPeerIDs.pData);
-
-    ret = XFindContext(XtDisplay(text_w), (XID)text_w, tdata->echoContextID,
-                       (XPointer *)&dp);
-    if ((ret != 0) || (dp == NULL)) {
-        /* no context found or DPos is NULL - shouldn't happen */
-        return;
-    }
-
-    c = dp->echoC;
-    val = (char *) (dp->data);
-
-    len = strlen(val);
-    if (cbs->text->ptr == NULL) {
-        if (cbs->text->length == 0 && cbs->startPos == 0) {
-            val[0] = '\0';
-            return;
-        } else if (cbs->startPos == (len - 1)) {
-            /* handle deletion */
-            cbs->endPos = strlen(val);
-            val[cbs->startPos] = '\0';
-            return;
-        } else {
-            /* disable deletes anywhere but at the end */
-            cbs->doit = False;
-            return;
-        }
-    }
-    if (cbs->startPos != len) {
-        /* disable "paste" or inserts into the middle */
-        cbs->doit = False;
-        return;
-    }
-    /* append the value typed in */
-    if ((cbs->endPos + cbs->text->length) > ECHO_BUFFER_LEN) {
-        val = realloc(val, cbs->endPos + cbs->text->length + 10);
-    }
-    strncat(val, cbs->text->ptr, cbs->text->length);
-    val[cbs->endPos + cbs->text->length] = '\0';
-
-    /* modify the output to be the echo character */
-    for (len = 0, i = 0; len < cbs->text->length; i++) {
-        /* Write one echo character for each multibyte character. */
-        numbytes = mblen(cbs->text->ptr + len, cbs->text->length - len);
-        cbs->text->ptr[i] = (char) c;
-        len += numbytes;
-    }
-    cbs->text->length = i;
-}
-
-/*
- * Event handler used by both TextField/TextArea to correctly process
- * cut/copy/paste keys such that interaction with our own
- * clipboard mechanism will work properly.
- *
- * client_data is MTextFieldPeer instance
- */
-void
-Text_handlePaste(Widget w, XtPointer client_data, XEvent * event, Boolean * cont)
-{
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-    KeySym keysym;
-    Modifiers mods;
-
-    /* Any event handlers which take peer instance pointers as
-     * client_data should check to ensure the widget has not been
-     * marked as destroyed as a result of a dispose() call on the peer
-     * (which can result in the peer instance pointer already haven
-     * been gc'd by the time this event is processed)
-     */
-    if (event->type != KeyPress || w->core.being_destroyed) {
-        return;
-    }
-
-    XtTranslateKeycode(event->xkey.display, (KeyCode) event->xkey.keycode,
-                       event->xkey.state, &mods, &keysym);
-
-    /* Should be a temporary fix for 4052132 if a cleaner fix is found later */
-    if ((event->xkey.state & ControlMask) && (keysym == 'v' || keysym == 'V'))
-        keysym = osfXK_Paste;
-    if ((event->xkey.state & ShiftMask) && (keysym == osfXK_Insert))
-        keysym = osfXK_Paste;
-
-    switch (keysym) {
-        case osfXK_Paste:
-            /* If we own the selection, then paste the data directly */
-            if (awtJNI_isSelectionOwner(env, "CLIPBOARD")) {
-                JNU_CallMethodByName(env, NULL, (jobject) client_data,
-                                     "pasteFromClipboard", "()V");
-                if ((*env)->ExceptionOccurred(env)) {
-                    (*env)->ExceptionDescribe(env);
-                    (*env)->ExceptionClear(env);
-                }
-                *cont = FALSE;
-            }
-            break;
-
-        case osfXK_Cut:
-        case osfXK_Copy:
-            /* For some reason if we own the selection, our loseSelection
-             * callback is not automatically called on cut/paste from
-             * text widgets.
-             */
-            if (awtJNI_isSelectionOwner(env, "CLIPBOARD")) {
-                awtJNI_notifySelectionLost(env, "CLIPBOARD");
-            }
-            break;
-        default:
-            break;
-    }
-}
-
-/*
- * client_data is MTextFieldPeer instance
- */
-void
-TextField_valueChanged(Widget w, XtPointer client_data, XtPointer call_data)
-{
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-    jboolean skipped;
-
-    skipped = (*env)->GetBooleanField(env, (jobject) client_data,
-                                      mTextFieldPeerIDs.firstChangeSkipped);
-    if (!(*env)->ExceptionOccurred(env)) {
-        if (skipped == JNI_FALSE) {
-            (*env)->SetBooleanField(env, (jobject) client_data,
-                                    mTextFieldPeerIDs.firstChangeSkipped,
-                                    JNI_TRUE);
-        } else {
-            JNU_CallMethodByName(env, NULL, (jobject) client_data,
-                                 "valueChanged", "()V");
-        }
-    }
-
-    if ((*env)->ExceptionOccurred(env)) {
-        (*env)->ExceptionDescribe(env);
-        (*env)->ExceptionClear(env);
-    }
-}
-
-/*
- * client_data is MTextFieldPeer instance
- */
-static void
-TextField_action(Widget w, XtPointer client_data, XmAnyCallbackStruct * s)
-{
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-    ConvertEventTimeAndModifiers converted;
-
-    awt_util_convertEventTimeAndModifiers(s->event, &converted);
-
-    JNU_CallMethodByName(env, NULL, (jobject) client_data, "action", "(JI)V",
-                         converted.when, converted.modifiers);
-    if ((*env)->ExceptionOccurred(env)) {
-        (*env)->ExceptionDescribe(env);
-        (*env)->ExceptionClear(env);
-    }
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    pCreate
- * Signature: (Lsun/awt/motif/MComponentPeer;)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_pCreate
-  (JNIEnv *env, jobject this, jobject parent)
-{
-    struct ComponentData *wdata;
-    struct TextFieldData *tdata;
-
-    jobject globalRef = awtJNI_CreateAndSetGlobalRef(env, this);
-    AwtGraphicsConfigDataPtr adata;
-
-    AWT_LOCK();
-
-    adata = copyGraphicsConfigToPeer(env, this);
-
-    if (JNU_IsNull(env, parent)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    wdata = (struct ComponentData *)
-        JNU_GetLongFieldAsPtr(env,parent,mComponentPeerIDs.pData);
-    if (wdata == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    tdata = ZALLOC(TextFieldData);
-    if (tdata == NULL) {
-        JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError");
-        AWT_UNLOCK();
-        return;
-    }
-    JNU_SetLongFieldFromPtr(env,this,mComponentPeerIDs.pData,tdata);
-
-    tdata->comp.widget = XtVaCreateManagedWidget("textfield",
-                                                 xmTextFieldWidgetClass,
-                                                 wdata->widget,
-                                                 XmNrecomputeSize, False,
-                                                 XmNhighlightThickness, 1,
-                                                 XmNshadowThickness, 2,
-                                                 XmNuserData, (XtPointer) globalRef,
-                                                 XmNscreen,
-                                                 ScreenOfDisplay(awt_display,
-                                                   adata->awt_visInfo.screen),
-                                                 XmNfontList, getMotifFontList(),
-                                                 NULL);
-    tdata->echoContextIDInit = FALSE;
-
-    XtSetMappedWhenManaged(tdata->comp.widget, False);
-    XtAddCallback(tdata->comp.widget,
-                  XmNactivateCallback,
-                  (XtCallbackProc) TextField_action,
-                  (XtPointer) globalRef);
-    XtAddCallback(tdata->comp.widget,
-                  XmNvalueChangedCallback,
-                  (XtCallbackProc) TextField_valueChanged,
-                  (XtPointer) globalRef);
-    XtInsertEventHandler(tdata->comp.widget,
-                         KeyPressMask,
-                         False, Text_handlePaste, (XtPointer) globalRef,
-                         XtListHead);
-    /*
-     * Fix for BugTraq ID 4349615.
-     * Unregister Motif drop site to prevent it from crash
-     * when dropping java objects.
-     */
-    XmDropSiteUnregister(tdata->comp.widget);
-
-    AWT_UNLOCK();
-}
-
-/*
- * Class     sun_awt_motif_MTextFieldPeer
- * Method:    pSetEditable
- * Signature: (Z)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_pSetEditable
-  (JNIEnv *env, jobject this, jboolean editable)
-{
-    struct TextFieldData *tdata;
-
-    AWT_LOCK();
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    XtVaSetValues(tdata->comp.widget,
-                  XmNeditable, (editable ? True : False),
-                  XmNcursorPositionVisible, (editable ? True : False),
-                  NULL);
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    select
- * Signature: (II)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_select
-  (JNIEnv *env, jobject this, jint start, jint end)
-{
-    struct TextFieldData *tdata;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    XmTextSetSelection(tdata->comp.widget, (XmTextPosition) start, (XmTextPosition) end, 0);
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    getSelectionStart
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_sun_awt_motif_MTextFieldPeer_getSelectionStart
-  (JNIEnv *env, jobject this)
-{
-    struct TextFieldData *tdata;
-    XmTextPosition start, end, pos;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return 0;
-    }
-    if (XmTextGetSelectionPosition(tdata->comp.widget, &start, &end) &&
-                                                (start != end)) {
-        pos = start;
-    } else {
-        pos = XmTextGetInsertionPosition(tdata->comp.widget);
-    }
-    AWT_UNLOCK();
-
-    return (jint) pos;
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    getSelectionEnd
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_sun_awt_motif_MTextFieldPeer_getSelectionEnd
-  (JNIEnv *env, jobject this)
-{
-    struct TextFieldData *tdata;
-    XmTextPosition start, end, pos;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return 0;
-    }
-    if (XmTextGetSelectionPosition(tdata->comp.widget, &start, &end) &&
-                                                 (start != end)) {
-        pos = end;
-    } else {
-        pos = XmTextGetInsertionPosition(tdata->comp.widget);
-    }
-    AWT_UNLOCK();
-
-    return (jint) pos;
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    setText
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_setText
-  (JNIEnv *env, jobject this, jstring l)
-{
-    struct TextFieldData *tdata;
-    char *cl;
-    jobject target;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    if (JNU_IsNull(env, l)) {
-        cl = "";
-    } else {
-        /*
-         * Note: Motif TextField widgets do not support multi-font
-         * compound strings.
-         */
-        cl = (char *) JNU_GetStringPlatformChars(env, l, NULL);
-    }
-
-    /* Fix for bug 4084454 : setText appears in clear */
-    target = (*env)->GetObjectField(env, this, mComponentPeerIDs.target);
-    if ((*env)->GetCharField(env, target, textFieldIDs.echoChar) != 0) {
-        XtVaSetValues(tdata->comp.widget,
-                      XmNvalue, "", NULL);
-        XmTextFieldInsert(tdata->comp.widget,0,cl);
-        XmTextSetInsertionPosition(tdata->comp.widget,
-                                   (XmTextPosition) strlen(cl));
-    }
-    else {
-        XtVaSetValues(tdata->comp.widget,
-                      XmNvalue, cl,
-                      NULL);
-    }
-    /*
-     * Fix for BugTraq Id 4185654 - TextField.setText(<String>) incorrect justification
-     * Comment out the next line.
-     */
-    /* XmTextSetInsertionPosition(tdata->comp.widget,
-     *                            (XmTextPosition) strlen(cl));
-     */
-
-    if (cl != NULL && cl != "") {
-        JNU_ReleaseStringPlatformChars(env, l, cl);
-    }
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    insertReplaceText
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_insertReplaceText
-  (JNIEnv *env, jobject this, jstring l)
-{
-    struct TextFieldData *tdata;
-    char *cl;
-    XmTextPosition start, end;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    if (JNU_IsNull(env, l)) {
-        cl = "";
-    } else {
-        /*
-         * Note: Motif TextField widgets do not support multi-font
-         * compound strings.
-         */
-        cl = (char *) JNU_GetStringPlatformChars(env, l, NULL);
-    }
-
-    if (!XmTextGetSelectionPosition(tdata->comp.widget, &start, &end)) {
-        start = end = XmTextGetInsertionPosition(tdata->comp.widget);
-    }
-    XmTextReplace(tdata->comp.widget, start, end, cl);
-
-    if (cl != NULL && cl != "") {
-        JNU_ReleaseStringPlatformChars(env, l, cl);
-    }
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    preDispose
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_preDispose
-  (JNIEnv *env, jobject this)
-{
-    struct TextFieldData *tdata;
-    struct DPos *dp;
-    jobject target;
-    int32_t ret;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    target = (*env)->GetObjectField(env, this, mComponentPeerIDs.target);
-
-    if ((*env)->GetCharField(env, target, textFieldIDs.echoChar) != 0) {
-        ret = XFindContext(XtDisplay(tdata->comp.widget), (XID)(tdata->comp.widget),
-                           tdata->echoContextID, (XPointer *)&dp);
-        if ((ret == 0) && dp != NULL) {
-
-            /* Remove the X context associated with this textfield's
-             * echo character. BugId #4225734
-             */
-            XDeleteContext(XtDisplay(tdata->comp.widget),
-                           (XID)(tdata->comp.widget),
-                           tdata->echoContextID);
-
-            tdata->echoContextIDInit = FALSE;
-
-            /* Free up the space allocated for the echo character data. */
-            if (dp->data) {
-                free(dp->data);
-            }
-            free(dp);
-        }
-    }
-
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    getText
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_sun_awt_motif_MTextFieldPeer_getText
-  (JNIEnv *env, jobject this)
-{
-    struct TextFieldData *tdata;
-    char *val;
-    struct DPos *dp;
-    jobject target;
-    int32_t ret;
-    jstring returnVal;
-
-    AWT_LOCK();
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return NULL;
-    }
-
-    target = (*env)->GetObjectField(env, this, mComponentPeerIDs.target);
-
-    if ((*env)->GetCharField(env, target, textFieldIDs.echoChar) != 0) {
-        ret = XFindContext(XtDisplay(tdata->comp.widget), (XID)tdata->comp.widget,
-                           tdata->echoContextID, (XPointer *)&dp);
-        if ((ret == 0) && (dp != NULL)) {
-            val = (char *)(dp->data);
-        } else {
-            val = "";
-        }
-    } else {
-        XtVaGetValues(tdata->comp.widget, XmNvalue, &val, NULL);
-    }
-    AWT_UNLOCK();
-
-    returnVal = JNU_NewStringPlatform(env, (const char *) val);
-    if ((*env)->GetCharField(env, target, textFieldIDs.echoChar) == 0) {
-        free(val);
-    }
-    return returnVal;
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    setEchoChar
- * Signature: (C)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_setEchoChar
-  (JNIEnv *env, jobject this, jchar c)
-{
-    char *val;
-    char *cval;
-    struct TextFieldData *tdata;
-    struct DPos *dp;
-    int32_t i;
-    size_t len;
-    int32_t ret;
-
-    AWT_LOCK();
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    XtVaGetValues(tdata->comp.widget,
-                  XmNvalue, &cval,
-                  NULL);
-
-    DASSERT(c != 0 || tdata->echoContextIDInit);
-
-    if (!tdata->echoContextIDInit) {
-        tdata->echoContextID = XUniqueContext();
-        tdata->echoContextIDInit = TRUE;
-    }
-    ret = XFindContext(XtDisplay(tdata->comp.widget), (XID)(tdata->comp.widget),
-                       tdata->echoContextID, (XPointer *)&dp);
-    /*
-     * Fix for BugTraq ID 4307281.
-     * Special case for setting echo char to 0:
-     *  - remove the callback and X context associated with echo character;
-     *  - restore the original text.
-     */
-    if (c == 0) {
-        XtRemoveCallback(tdata->comp.widget, XmNmodifyVerifyCallback,
-                         (XtCallbackProc) echoChar, NULL);
-        if (ret == 0 && dp != NULL) {
-
-            /* Remove the X context associated with echo character. */
-            XDeleteContext(XtDisplay(tdata->comp.widget),
-                           (XID)(tdata->comp.widget),
-                           tdata->echoContextID);
-
-            tdata->echoContextIDInit = FALSE;
-
-            /* Restore the original text. */
-            if (dp->data != NULL) {
-                val = (char *)(dp->data);
-            } else {
-                val = "";
-            }
-            XtVaSetValues(tdata->comp.widget,
-                          XmNvalue, val,
-                          NULL);
-
-            /* Free up the space allocated for the echo character data. */
-            if (dp->data) {
-                free(dp->data);
-            }
-            free(dp);
-        }
-        AWT_UNLOCK();
-        return;
-    }
-    if (ret != 0) {
-        dp = NULL;
-    }
-
-    if (dp != NULL) {
-        /* Fix bug 4124697: cannot change setEchoChar twice on Motif */
-        XtRemoveCallback(tdata->comp.widget, XmNmodifyVerifyCallback,
-                        (XtCallbackProc) echoChar, NULL);
-    } else {
-        if ((int32_t) strlen(cval) > ECHO_BUFFER_LEN) {
-            val = (char *) malloc(strlen(cval) + 1);
-        } else {
-            val = (char *) malloc(ECHO_BUFFER_LEN + 1);
-        }
-        if (val == NULL) {
-            JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError");
-            AWT_UNLOCK();
-            return;
-        }
-        if (cval != NULL) {
-            strcpy(val, cval);
-        } else {
-            *val = '\0';
-        }
-        dp = (struct DPos *) malloc(sizeof(struct DPos));
-
-        dp->x = -1;
-        dp->data = (void *) val;
-    }
-
-    dp->echoC = c;
-    len = strlen(cval);
-    for (i = 0; i < len; i++) {
-        cval[i] = (char) (c);
-    }
-    XtVaSetValues(tdata->comp.widget,
-                  XmNvalue, cval,
-                  NULL);
-
-    ret = XSaveContext(XtDisplay(tdata->comp.widget), (XID)tdata->comp.widget,
-                       tdata->echoContextID, (XPointer)dp);
-    if (ret == 0) {
-        XtAddCallback(tdata->comp.widget, XmNmodifyVerifyCallback,
-                      (XtCallbackProc) echoChar, NULL);
-    }
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    setFont
- * Signature: (Ljava/awt/Font;)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_setFont
-  (JNIEnv *env, jobject this, jobject f)
-{
-    struct TextFieldData *tdata;
-    struct FontData *fdata;
-    XmFontListEntry fontentry;
-    XmFontList fontlist;
-    char *err;
-
-    AWT_LOCK();
-    if (JNU_IsNull(env, f)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    fdata = awtJNI_GetFontData(env, f, &err);
-    if (fdata == NULL) {
-        JNU_ThrowInternalError(env, err);
-        AWT_UNLOCK();
-        return;
-    }
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    if (awtJNI_IsMultiFont(env, f)) {
-        if (fdata->xfs == NULL) {
-            fdata->xfs = awtJNI_MakeFontSet(env, f);
-        }
-        if (fdata->xfs != NULL) {
-            fontentry = XmFontListEntryCreate("labelFont",
-                                              XmFONT_IS_FONTSET,
-                                              (XtPointer) (fdata->xfs));
-            fontlist = XmFontListAppendEntry(NULL, fontentry);
-            /*
-             * Some versions of motif have a bug in
-             * XmFontListEntryFree() which causes it to free more than it
-             * should.  Use XtFree() instead.  See O'Reilly's
-             * Motif Reference Manual for more information.
-             */
-            XmFontListEntryFree(&fontentry);
-        } else {
-            fontlist = XmFontListCreate(fdata->xfont, "labelFont");
-        }
-    } else {
-        fontlist = XmFontListCreate(fdata->xfont, "labelFont");
-    }
-
-    if (fontlist != NULL) {
-        XtVaSetValues(tdata->comp.widget, XmNfontList, fontlist, NULL);
-        XmFontListFree(fontlist);
-    } else {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-    }
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    setCaretPosition
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_sun_awt_motif_MTextFieldPeer_setCaretPosition
-  (JNIEnv *env, jobject this, jint pos)
-{
-    struct TextFieldData *tdata;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    XmTextSetInsertionPosition(tdata->comp.widget, (XmTextPosition) pos);
-
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MTextFieldPeer
- * Method:    getCaretPosition
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_sun_awt_motif_MTextFieldPeer_getCaretPosition
-  (JNIEnv *env, jobject this)
-{
-    struct TextFieldData *tdata;
-    XmTextPosition pos;
-
-    AWT_LOCK();
-
-    tdata = (struct TextFieldData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return 0;
-    }
-    pos = XmTextGetInsertionPosition(tdata->comp.widget);
-    AWT_UNLOCK();
-
-    return (jint) pos;
-}
-
-
-/*  To be fully implemented in a future release
- *
- * Class:     sun_awt_windows_MTextFieldPeer
- * Method:    getIndexAtPoint
- * Signature: (Ljava/awt/Point;)I
- *
-JNIEXPORT jint JNICALL
-Java_sun_awt_motif_MTextFieldPeer_getIndexAtPoint(JNIEnv *env, jobject self,
- jint x, jint y)
-{
-    struct ComponentData *tdata;
-    XmTextPosition pos;
-
-    AWT_LOCK();
-
-    tdata = (struct ComponentData *)
-        JNU_GetLongFieldAsPtr(env,self,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return -1;
-    }
-    pos = XmTextFieldXYToPos(tdata->widget, x, y);
-    AWT_UNLOCK();
-
-    return (jint) pos;
-}
-*/
-
-/*  To be fully implemented in a future release
- *
- * Class:     sun_awt_windows_MTextFieldPeer
- * Method:    getCharacterBounds
- * Signature: (I)Ljava/awt/Rectangle;
- *
-JNIEXPORT jobject JNICALL
-Java_sun_awt_motif_MTextFieldPeer_getCharacterBounds(JNIEnv *env, jobject self, jint i)
-{
-#define TextF_FontAscent(tfg)                   (((XmTextFieldWidget)(tfg)) -> \
-                                           text.font_ascent)
-#define TextF_FontDescent(tfg)                  (((XmTextFieldWidget)(tfg)) -> \
-                                           text.font_descent)
-
-    struct ComponentData *tdata;
-    jobject rect=NULL;
-    Position x=0, y=0;
-    Position next_x=0, next_y=0;
-    int32_t w=0, h=0;
-
-    AWT_LOCK();
-
-    tdata = (struct ComponentData *)
-        JNU_GetLongFieldAsPtr(env,self,mComponentPeerIDs.pData);
-
-    if (tdata == NULL || tdata->widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return (jobject) NULL;
-    }
-
-    XmTextFieldPosToXY(tdata->widget, i, &x, &y);
-    y -= TextF_FontAscent(tdata->widget);
-    XmTextFieldPosToXY(tdata->widget, i+1, &next_x, &next_y);
-    w = next_x - x;
-    h = TextF_FontAscent(tdata->widget) + TextF_FontDescent(tdata->widget);
-
-    AWT_UNLOCK();
-
-    if (w>0) {
-        jclass clazz;
-        jmethodID mid;
-
-        clazz = (*env)->FindClass(env, "java/awt/Rectangle");
-        mid = (*env)->GetMethodID(env, clazz, "<init>", "(IIII)V");
-        if (mid != NULL) {
-            rect = (*env)->NewObject(env, clazz, mid, x, y, w, h);
-            if ((*env)->ExceptionOccurred(env)) {
-                return NULL;
-            }
-        }
-    }
-    return rect;
-}
-*/