1/* 2 * Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26#include "awt_AWTEvent.h" 27#include "awt_Component.h" 28#include <java_awt_AWTEvent.h> 29 30/************************************************************************ 31 * AwtAWTEvent fields 32 */ 33 34jfieldID AwtAWTEvent::bdataID; 35jfieldID AwtAWTEvent::idID; 36jfieldID AwtAWTEvent::consumedID; 37 38/************************************************************************ 39 * AwtAWTEvent static methods 40 */ 41 42void AwtAWTEvent::saveMSG(JNIEnv *env, MSG *pMsg, jobject jevent) 43{ 44 if (env->EnsureLocalCapacity(1) < 0) { 45 return; 46 } 47 jbyteArray bdata = env->NewByteArray(sizeof(MSG)); 48 if(bdata == 0) { 49 throw std::bad_alloc(); 50 } 51 env->SetByteArrayRegion(bdata, 0, sizeof(MSG), (jbyte *)pMsg); 52 DASSERT(AwtAWTEvent::bdataID); 53 env->SetObjectField(jevent, AwtAWTEvent::bdataID, bdata); 54 env->DeleteLocalRef(bdata); 55} 56 57/************************************************************************ 58 * AwtEvent native methods 59 */ 60 61extern "C" { 62 63/* 64 * Class: java_awt_AWTEvent 65 * Method: initIDs 66 * Signature: ()V 67 */ 68JNIEXPORT void JNICALL 69Java_java_awt_AWTEvent_initIDs(JNIEnv *env, jclass cls) 70{ 71 TRY; 72 73 AwtAWTEvent::bdataID = env->GetFieldID(cls, "bdata", "[B"); 74 DASSERT(AwtAWTEvent::bdataID != NULL); 75 CHECK_NULL(AwtAWTEvent::bdataID); 76 77 AwtAWTEvent::idID = env->GetFieldID(cls, "id", "I"); 78 DASSERT(AwtAWTEvent::idID != NULL); 79 CHECK_NULL(AwtAWTEvent::idID); 80 81 AwtAWTEvent::consumedID = env->GetFieldID(cls, "consumed", "Z"); 82 DASSERT(AwtAWTEvent::consumedID != NULL); 83 CHECK_NULL(AwtAWTEvent::consumedID); 84 85 CATCH_BAD_ALLOC; 86} 87 88/* 89 * Class: java_awt_AWTEvent 90 * Method: nativeSetSource 91 * Signature: (Ljava/awt/peer/ComponentPeer;)V 92 */ 93JNIEXPORT void JNICALL Java_java_awt_AWTEvent_nativeSetSource 94 (JNIEnv *env, jobject self, jobject newSource) 95{ 96 TRY; 97 98 JNI_CHECK_NULL_RETURN(self, "null AWTEvent"); 99 100 MSG *pMsg; 101 102 jbyteArray bdata = (jbyteArray) 103 env->GetObjectField(self, AwtAWTEvent::bdataID); 104 if (bdata != NULL) { 105 jboolean dummy; 106 PDATA pData; 107 JNI_CHECK_PEER_RETURN(newSource); 108 AwtComponent *p = (AwtComponent *)pData; 109 HWND hwnd = p->GetHWnd(); 110 111 pMsg = (MSG *)env->GetPrimitiveArrayCritical(bdata, &dummy); 112 if (pMsg == NULL) { 113 throw std::bad_alloc(); 114 } 115 pMsg->hwnd = hwnd; 116 env->ReleasePrimitiveArrayCritical(bdata, (void *)pMsg, 0); 117 } 118 119 CATCH_BAD_ALLOC; 120} 121 122} /* extern "C" */ 123