jdk/src/solaris/native/sun/awt/awt_Choice21.c
changeset 1192 715cf9378c53
parent 1051 90cf935adb35
parent 1191 f142c1da78c2
child 1193 41afb8ee8f45
--- a/jdk/src/solaris/native/sun/awt/awt_Choice21.c	Wed Jul 05 16:40:31 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,764 +0,0 @@
-/*
- * Copyright 2001-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
-
-#if MOTIF_VERSION!=2
-    #error This file should only be compiled with motif 2.1
-#endif
-
-#include "awt_p.h"
-#include "java_awt_Component.h"
-#include "java_awt_AWTEvent.h"
-#include "sun_awt_motif_MComponentPeer.h"
-#include "sun_awt_motif_MChoicePeer.h"
-
-#include "awt_Component.h"
-#include "canvas.h"
-
-#include "multi_font.h"
-
-#include <jni.h>
-#include <jni_util.h>
-#include <Xm/ComboBox.h>
-
-#define MAX_VISIBLE 10
-
-extern struct ComponentIDs componentIDs;
-extern struct ContainerIDs containerIDs;
-extern struct MComponentPeerIDs mComponentPeerIDs;
-
-extern AwtGraphicsConfigDataPtr
-    copyGraphicsConfigToPeer(JNIEnv *env, jobject this);
-
-/*
-   setSelection
-   Set the selected text on the XmTextField of the XmComboBox.
-*/
-static void
-setSelection(JNIEnv *env,
-              jobject this,
-              Widget comboBox,
-              jint index)
-{
-    jstring item = NULL;
-    jobject target;
-    Widget text=NULL;
-
-    AWT_LOCK();
-    /* Get the java Choice component. */
-    target = (*env)->GetObjectField(env, this, mComponentPeerIDs.target);
-    if (target == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    /* Get the XmTextField widget in the XmComboBox. */
-    text = XtNameToWidget(comboBox, "*Text");
-    /* Get the selected Unicode string from the java Choice component. */
-    item = (jstring) JNU_CallMethodByName(env, NULL,
-        target, "getItem", "(I)Ljava/lang/String;", index).l;
-    if ((*env)->ExceptionOccurred(env)) {
-        (*env)->ExceptionDescribe(env);
-        (*env)->ExceptionClear(env);
-    }
-    if (!JNU_IsNull(env, item)) {
-        /* Convert the Unicode string to a multibyte string. */
-        char *temp = (char *)JNU_GetStringPlatformChars(env, item, NULL);
-        /* Assign the multibyte string to the XmTextField of the XmComboBox. */
-        XmTextSetString(text, temp);
-        JNU_ReleaseStringPlatformChars(env, item, (const char *)temp);
-    }
-    AWT_UNLOCK();
-}
-
-extern Boolean skipNextNotifyWhileGrabbed;
-extern Boolean skipNextFocusIn;
-
-static void
-GrabShellPopup(Widget grab_shell,
-                jobject this,
-                XmAnyCallbackStruct * call_data)
-{
-    skipNextNotifyWhileGrabbed = True;
-}
-static void
-GrabShellPopdown(Widget grab_shell,
-                jobject this,
-                XmAnyCallbackStruct * call_data)
-{
-    skipNextNotifyWhileGrabbed = True;
-    skipNextFocusIn = True;
-}
-
-static void
-Choice_callback(Widget list,
-                jobject this,
-                XmAnyCallbackStruct * call_data)
-{
-    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-    XmListCallbackStruct *cbs = (XmListCallbackStruct *)call_data;
-    struct ChoiceData *cdata;
-
-
-    AWT_LOCK();
-    /* Get the Choice data. */
-    cdata = (struct ChoiceData *)
-      JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (cdata == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    setSelection(env, this, cdata->comp.widget, cbs->item_position - 1);
-    /* Get the Choice data. */
-    JNU_CallMethodByName(env, NULL,
-        this, "action", "(I)V", cbs->item_position - 1);
-    if ((*env)->ExceptionOccurred(env)) {
-        (*env)->ExceptionDescribe(env);
-        (*env)->ExceptionClear(env);
-    }
-    AWT_UNLOCK();
-}
-
-static void
-addItems(JNIEnv *env, jobject this,
-    jstring *items, int32_t nItems, jint index)
-{
-    struct ChoiceData *cdata;
-    int32_t i;
-    Widget list;
-    XmString mfstr = NULL;
-    XmFontList fontlist = NULL;
-    jobject font = awtJNI_GetFont(env, this);
-    Boolean IsMultiFont = awtJNI_IsMultiFont(env, font);
-
-    if ((items == NULL) || (nItems == 0)) {
-        return;
-    }
-
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)
-      JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-
-    if (cdata == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    for (i = 0; i < nItems; ++i) {
-        char *temp = (char *)JNU_GetStringPlatformChars(env, items[i], NULL);
-        mfstr = XmStringCreateLocalized(temp);
-        JNU_ReleaseStringPlatformChars(env, items[i], (const char *)temp);
-        XmComboBoxAddItem(cdata->comp.widget, mfstr, index + i + 1, FALSE);
-
-        if (mfstr != NULL) {
-            XmStringFree(mfstr);
-            mfstr = NULL;
-        }
-    }
-
-    cdata->n_items += nItems;
-
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-    XtVaSetValues(list,
-                  XmNvisibleItemCount, min(MAX_VISIBLE, cdata->n_items),
-                  NULL);
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    create
- * Signature: (Lsun/awt/motif/MComponentPeer;)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_create(JNIEnv * env, jobject this,
-    jobject parent)
-{
-    jobject globalRef = awtJNI_CreateAndSetGlobalRef(env, this);
-
-    struct ComponentData *wdata; /* parent's peer data */
-    struct ChoiceData *cdata;    /* our own peer data */
-    Widget list, text, list_shell;               /* components of drop dowwn list widget */
-
-    AwtGraphicsConfigDataPtr adata;
-    Pixel fg, bg;                /* colors inherited from parent */
-    Dimension width = 0, height = 0;
-    jclass clsDimension;
-    jobject dimension;
-
-#undef MAX_ARGC
-#define MAX_ARGC 30
-    Arg args[MAX_ARGC];
-    int32_t argc;
-
-    AWT_LOCK();
-
-    if (JNU_IsNull(env, parent)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        return;
-    }
-
-    /* get parent's peer data */
-    wdata = (struct ComponentData *)JNU_GetLongFieldAsPtr(env,
-                parent, mComponentPeerIDs.pData);
-    if (wdata == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    /* create our own peer data */
-    cdata = ZALLOC(ChoiceData);
-    if (cdata == NULL) {
-        JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError");
-        AWT_UNLOCK();
-        return;
-    }
-    JNU_SetLongFieldFromPtr(env, this, mComponentPeerIDs.pData, cdata);
-
-    /* get desired size */
-    clsDimension = (*env)->FindClass(env, "java/awt/Dimension");
-    DASSERT(clsDimension != NULL);
-
-    dimension = JNU_CallMethodByName(env, NULL,
-                    this, "getPreferredSize", "()Ljava/awt/Dimension;").l;
-    width  = (Dimension)((*env)->GetIntField(env, dimension,
-                             (*env)->GetFieldID(env, clsDimension,
-                                 "width" , "I")));
-    height = (Dimension)((*env)->GetIntField(env, dimension,
-                             (*env)->GetFieldID(env, clsDimension,
-                                 "height", "I")));
-
-    /* Inherit visual/colors from parent component */
-    XtVaGetValues(wdata->widget, XmNbackground, &bg, NULL);
-    XtVaGetValues(wdata->widget, XmNforeground, &fg, NULL);
-    adata = copyGraphicsConfigToPeer(env, this);
-
-    argc = 0;
-    XtSetArg(args[argc], XmNuserData, (XtPointer)globalRef);            ++argc;
-    XtSetArg(args[argc], XmNx, 0);                                      ++argc;
-    XtSetArg(args[argc], XmNy, 0);                                      ++argc;
-    XtSetArg(args[argc], XmNmarginHeight, 2);                           ++argc;
-    XtSetArg(args[argc], XmNmarginWidth, 1);                            ++argc;
-    XtSetArg(args[argc], XmNvisibleItemCount, 0);                       ++argc;
-    XtSetArg(args[argc], XmNancestorSensitive, True);                   ++argc;
-    /* Don't ding on key press */
-    XtSetArg(args[argc], XmNverifyBell, False);                         ++argc;
-    XtSetArg(args[argc], XmNvisual, adata->awt_visInfo.visual);         ++argc;
-    XtSetArg(args[argc], XmNscreen,
-             ScreenOfDisplay(awt_display, adata->awt_visInfo.screen));  ++argc;
-    XtSetArg(args[argc], XmNbackground, bg);                            ++argc;
-    XtSetArg(args[argc], XmNforeground, fg);                            ++argc;
-
-    DASSERT(!(argc > MAX_ARGC));
-    cdata->comp.widget = XmCreateDropDownList(wdata->widget,
-                                              "combobox", args, argc);
-    cdata->n_items = 0;
-
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-    text = XtNameToWidget(cdata->comp.widget, "*Text");
-    list_shell = XtNameToWidget(cdata->comp.widget, "*GrabShell");
-    XtAddCallback(list_shell,
-                  XmNpopupCallback,
-                  (XtCallbackProc)GrabShellPopup,
-                  globalRef);
-    XtAddCallback(list_shell,
-                  XmNpopdownCallback,
-                  (XtCallbackProc)GrabShellPopdown,
-                  globalRef);
-
-    /*
-     * Bug 4477410:  Setting the width of the XmComboBox made the XmTextField
-     * too small, cutting off the dropdown list knob on the right side. Set
-     * the width of the TextField because it is the widget actually seen.
-    */
-    /* Set the width and height of the TextField widget. */
-    XtVaSetValues(text,
-                  XmNwidth, width,
-                  XmNheight, height,
-                  NULL);
-
-    XtAddCallback(list,
-                  XmNbrowseSelectionCallback,
-                  (XtCallbackProc)Choice_callback,
-                  (XtPointer)globalRef);
-
-    XtAddEventHandler(text, FocusChangeMask, True,
-                      awt_canvas_event_handler, globalRef);
-
-    awt_addWidget(text, cdata->comp.widget, globalRef,
-                  java_awt_AWTEvent_KEY_EVENT_MASK
-                  | java_awt_AWTEvent_MOUSE_EVENT_MASK
-                  | java_awt_AWTEvent_MOUSE_MOTION_EVENT_MASK);
-
-    XtSetMappedWhenManaged(cdata->comp.widget, False);
-    XtManageChild(cdata->comp.widget);
-
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    pSelect
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_pSelect(JNIEnv *env, jobject this,
-    jint index, jboolean init)
-{
-    struct ChoiceData *cdata;
-    Widget list;
-
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)JNU_GetLongFieldAsPtr(env,
-                this, mComponentPeerIDs.pData);
-    if (cdata == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-
-    XmListDeselectAllItems(list);
-    XmListSelectPos(list, index + 1, False);
-    setSelection(env, this, cdata->comp.widget, index);
-    XmComboBoxUpdate(cdata->comp.widget);
-
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    setFont
- * Signature: (Ljava/awt/Font;)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_setFont(JNIEnv *env, jobject this,
-    jobject f)
-{
-    struct ChoiceData *cdata;
-    struct FontData *fdata;
-    XmFontList fontlist;
-    Widget list;
-    Widget text;
-    char *err;
-    XmFontListEntry fontentry;
-    Position x=0, y=0;
-
-    if (JNU_IsNull(env, f)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        return;
-    }
-    AWT_LOCK();
-
-    fdata = awtJNI_GetFontData(env, f, &err);
-    if (fdata == NULL) {
-        JNU_ThrowInternalError(env, err);
-        AWT_UNLOCK();
-        return;
-    }
-
-    cdata = (struct ChoiceData *)JNU_GetLongFieldAsPtr(env,
-                this, mComponentPeerIDs.pData);
-    if (cdata == NULL || cdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    /* Make a fontset and set it. */
-    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");
-    }
-    XtVaSetValues(cdata->comp.widget,
-                  XmNfontList, fontlist,
-                  NULL);
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-    XtVaSetValues(list,
-                  XmNfontList, fontlist,
-                  NULL);
-
-    text = XtNameToWidget(cdata->comp.widget, "*Text");
-    XtVaSetValues(text,
-                  XmNfontList, fontlist,
-                  NULL);
-    XmFontListFree(fontlist);
-    XtVaGetValues(cdata->comp.widget,
-                  XmNx, &x,
-                  XmNy, &y,
-                  NULL);
-    Java_sun_awt_motif_MChoicePeer_pReshape(env, this, x, y, 0, 0);
-    AWT_UNLOCK();
-}
-
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    freeNativeData
- * Signature: ()V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_freeNativeData(JNIEnv *env, jobject this)
-{
-    /*
-     * Fix for bug 4326619 - not necessary for Motif 2.1
-     */
-}
-
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    setBackground
- * Signature: (Ljava/awt/Color;)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_setBackground(JNIEnv *env, jobject this,
-    jobject c)
-{
-    struct ChoiceData *cdata;
-    Pixel bg;
-    Pixel fg;
-    int32_t i;
-
-    if (JNU_IsNull(env, c)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException: null color");
-        return;
-    }
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)
-        JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (cdata == NULL || cdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    /* Get background color */
-    bg = awtJNI_GetColor(env, c);
-
-    /*
-       XmChangeColor(), in addtion to changing the background and
-       selection colors, also changes the foreground color to be
-       what it thinks should be. However, we want to use the color
-       that gets set by setForeground() instead. We therefore need to
-       save the current foreground color here, and then set it again
-       after the XmChangeColor() occurs.
-    */
-    XtVaGetValues(cdata->comp.widget, XmNforeground, &fg, NULL);
-
-    /* Set color */
-    XmChangeColor(cdata->comp.widget, bg);
-    XtVaSetValues(cdata->comp.widget, XmNforeground, fg, NULL);
-
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    setForeground
- * Signature: (Ljava/awt/Color;)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_setForeground(JNIEnv *env, jobject this,
-    jobject c)
-{
-    struct ChoiceData *cdata;
-    Pixel color;
-    int32_t i;
-
-    if (JNU_IsNull(env, c)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException: null color");
-        return;
-    }
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)
-      JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (cdata == NULL || cdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    color = awtJNI_GetColor(env, c);
-
-    XtVaSetValues(cdata->comp.widget, XmNforeground, color, NULL);
-
-    AWT_FLUSH_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    pReshape
- * Signature: (IIII)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_pReshape(JNIEnv *env, jobject this,
-    jint x, jint y, jint w, jint h)
-{
-    struct ChoiceData *cdata;
-    Widget list;
-    Dimension width = 0, height = 0;
-    jclass clsDimension;
-    jobject dimension;
-    jobject target;
-    Widget text=NULL;
-
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)
-      JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (cdata == NULL || cdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    if (w == 0) {
-        /* Set the width and height of the TextField widget to the
-         * PreferredSize, based on the font size.
-        */
-        clsDimension = (*env)->FindClass(env, "java/awt/Dimension");
-        DASSERT(clsDimension != NULL);
-        dimension = JNU_CallMethodByName(env, NULL,
-                        this, "getPreferredSize", "()Ljava/awt/Dimension;").l;
-        width  = (Dimension)((*env)->GetIntField(env, dimension,
-                                 (*env)->GetFieldID(env, clsDimension,
-                                     "width" , "I")));
-        height = (Dimension)((*env)->GetIntField(env, dimension,
-                                 (*env)->GetFieldID(env, clsDimension,
-                                     "height", "I")));
-    } else {
-        /* Set the width and height of the TextField widget to the
-         * given values. BorderLayout passes these values, for example.
-        */
-        width = w;
-        height = h;
-    }
-    text = XtNameToWidget(cdata->comp.widget, "*Text");
-    /*
-     * Bug 4477410:  Setting the width of the XmComboBox made the XmTextField
-     * too small, cutting off the dropdown list knob on the right side. Set
-     * the width of the TextField because it is the widget actually seen.
-    */
-    XtVaSetValues(text,
-                  XmNwidth, width,
-                  XmNheight, height,
-                  NULL);
-
-    awt_util_reshape(cdata->comp.widget, x, y, width, height);
-
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-
-    XtVaSetValues(list, XmNwidth, width, NULL);
-
-    /* Set the width and height of the Choice component. */
-    target = (*env)->GetObjectField(env, this, mComponentPeerIDs.target);
-    if (target == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-    (*env)->SetIntField(env, target, componentIDs.width, (jint)width);
-    (*env)->SetIntField(env, target, componentIDs.height, (jint)height);
-
-    AWT_FLUSH_UNLOCK();
-}
-
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    addItem
- * Signature: (Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_addItem(JNIEnv *env, jobject this,
-    jstring item, jint index)
-{
-    if (JNU_IsNull(env, item)) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        return;
-    }
-    addItems(env, this, &item, 1, index);
-}
-
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    appendItems
- * Signature: ([Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_appendItems(JNIEnv *env, jobject this,
-    jarray items)
-{
-    struct ChoiceData *cdata = NULL;
-    jstring *strItems = NULL;
-    int32_t nItems, i;
-
-    if (JNU_IsNull(env, items)) {
-        return;
-    }
-    nItems  = (*env)->GetArrayLength(env, items);
-    if (nItems == 0) {
-        return;
-    }
-
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)JNU_GetLongFieldAsPtr(env,
-                this, mComponentPeerIDs.pData);
-    if (cdata == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        goto cleanup;
-    }
-
-    strItems = (jstring *)malloc(sizeof(jstring) * nItems);
-    if (strItems == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        goto cleanup;
-    }
-
-    for (i = 0; i < nItems; ++i) {
-        strItems[i] = (jstring)(*env)->GetObjectArrayElement(env,
-                                   items, (jsize)i);
-        if (JNU_IsNull(env, strItems[i])) {
-            JNU_ThrowNullPointerException(env, "NullPointerException");
-            goto cleanup;
-        }
-    }
-
-    addItems(env, this, strItems, nItems, (jint)cdata->n_items);
-
-  cleanup:
-    if (strItems != NULL) {
-        free(strItems);
-    }
-    AWT_UNLOCK();
-}
-
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    remove
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_remove(JNIEnv *env, jobject this,
-    jint index)
-{
-    struct ChoiceData *cdata;
-    Widget list;
-    Widget text=NULL;
-
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)
-      JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (cdata == NULL || cdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    XmComboBoxDeletePos(cdata->comp.widget, index + 1);
-    --(cdata->n_items);
-
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-    XtVaSetValues(list, XmNvisibleItemCount, min(MAX_VISIBLE, cdata->n_items), NULL);
-
-    if (cdata->n_items == 0) {
-        /* No item is selected, so clear the TextField. */
-        text = XtNameToWidget(cdata->comp.widget, "*Text");
-        XtVaSetValues(text, XmNvalue, "", NULL);
-    }
-
-    AWT_UNLOCK();
-}
-
-/*
- * Class:     sun_awt_motif_MChoicePeer
- * Method:    removeAll
- * Signature: ()V
- */
-JNIEXPORT void JNICALL
-Java_sun_awt_motif_MChoicePeer_removeAll(JNIEnv *env, jobject this)
-{
-    struct ChoiceData *cdata;
-    int32_t i;
-    Widget text=NULL;
-    Widget list;
-
-    AWT_LOCK();
-
-    cdata = (struct ChoiceData *)
-      JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
-    if (cdata == NULL || cdata->comp.widget == NULL) {
-        JNU_ThrowNullPointerException(env, "NullPointerException");
-        AWT_UNLOCK();
-        return;
-    }
-
-    for (i = cdata->n_items - 1; i >= 0; --i) {
-        XmComboBoxDeletePos(cdata->comp.widget, i);
-    }
-    cdata->n_items = 0;
-
-    /* No item is selected, so clear the TextField. */
-    text = XtNameToWidget(cdata->comp.widget, "*Text");
-    XtVaSetValues(text, XmNvalue, "", NULL);
-
-    /* should set XmNvisibleItemCount to 1 as 0 is invalid value */
-    list = XtNameToWidget(cdata->comp.widget, "*List");
-    XtVaSetValues(list, XmNvisibleItemCount, 1, NULL);
-
-    AWT_UNLOCK();
-}