blob: c6bd697a4ecf787c45ba495b951cc7d723ab7966 [file] [log] [blame]
/*
* Copyright (c) 1998, 2002, Oracle and/or its affiliates. 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include "awt_AWTEvent.h"
#include "awt_Component.h"
#include <java_awt_AWTEvent.h>
/************************************************************************
* AwtAWTEvent fields
*/
jfieldID AwtAWTEvent::bdataID;
jfieldID AwtAWTEvent::idID;
jfieldID AwtAWTEvent::consumedID;
/************************************************************************
* AwtAWTEvent static methods
*/
void AwtAWTEvent::saveMSG(JNIEnv *env, MSG *pMsg, jobject jevent)
{
if (env->EnsureLocalCapacity(1) < 0) {
return;
}
jbyteArray bdata = env->NewByteArray(sizeof(MSG));
if(bdata == 0) {
throw std::bad_alloc();
}
env->SetByteArrayRegion(bdata, 0, sizeof(MSG), (jbyte *)pMsg);
DASSERT(AwtAWTEvent::bdataID);
env->SetObjectField(jevent, AwtAWTEvent::bdataID, bdata);
env->DeleteLocalRef(bdata);
}
/************************************************************************
* AwtEvent native methods
*/
extern "C" {
/*
* Class: java_awt_AWTEvent
* Method: initIDs
* Signature: ()V
*/
JNIEXPORT void JNICALL
Java_java_awt_AWTEvent_initIDs(JNIEnv *env, jclass cls)
{
TRY;
AwtAWTEvent::bdataID = env->GetFieldID(cls, "bdata", "[B");
AwtAWTEvent::idID = env->GetFieldID(cls, "id", "I");
AwtAWTEvent::consumedID = env->GetFieldID(cls, "consumed", "Z");
DASSERT(AwtAWTEvent::bdataID != NULL);
DASSERT(AwtAWTEvent::idID != NULL);
DASSERT(AwtAWTEvent::consumedID != NULL);
CATCH_BAD_ALLOC;
}
/*
* Class: java_awt_AWTEvent
* Method: nativeSetSource
* Signature: (Ljava/awt/peer/ComponentPeer;)V
*/
JNIEXPORT void JNICALL Java_java_awt_AWTEvent_nativeSetSource
(JNIEnv *env, jobject self, jobject newSource)
{
TRY;
JNI_CHECK_NULL_RETURN(self, "null AWTEvent");
MSG *pMsg;
jbyteArray bdata = (jbyteArray)
env->GetObjectField(self, AwtAWTEvent::bdataID);
if (bdata != NULL) {
jboolean dummy;
PDATA pData;
JNI_CHECK_PEER_RETURN(newSource);
AwtComponent *p = (AwtComponent *)pData;
HWND hwnd = p->GetHWnd();
pMsg = (MSG *)env->GetPrimitiveArrayCritical(bdata, &dummy);
if (pMsg == NULL) {
throw std::bad_alloc();
}
pMsg->hwnd = hwnd;
env->ReleasePrimitiveArrayCritical(bdata, (void *)pMsg, 0);
}
CATCH_BAD_ALLOC;
}
} /* extern "C" */