1 /* 2 * Copyright (c) 2005, 2010, 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 /* 27 * A DLL which is loaded by Java applications and used to map 28 * between Java applications and native Win32 window handles. 29 */ 30 31 #include "com_sun_java_accessibility_AccessBridge.h" // programatically generated by JNI 32 33 #include <windows.h> 34 #include <stdio.h> 35 36 #include <jawt.h> 37 #include <win32/jawt_md.h> 38 39 // --------------------------------------------------------------------------- 40 41 extern "C" { 42 /** 43 * DllMain - where Windows executables will load/unload us 44 * 45 */ 46 BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved) { 47 48 return TRUE; 49 } 50 51 52 /* 53 * Map a HWND to a Java component 54 * 55 * Class: com_sun_java_accessibility_AccessBridge 56 * Method: jawtGetComponentFromNativeWindowHandle 57 * Signature: (I)Ljava/awt/Component; 58 */ 59 JNIEXPORT jobject JNICALL 60 Java_com_sun_java_accessibility_AccessBridge_jawtGetComponentFromNativeWindowHandle 61 (JNIEnv *env, jobject callingObj, jint windowHandle) { 62 63 JAWT awt; 64 jboolean result; 65 jobject component = (jobject)0; 66 67 // Get the AWT 68 awt.version = JAWT_VERSION_1_4; 69 result = JAWT_GetAWT(env, &awt); 70 if (result == JNI_FALSE) { 71 return (jobject)0; 72 } 73 74 // Get the component 75 return awt.GetComponent(env, (void *)windowHandle); 76 } 77 78 79 /* 80 * Map a Java component to a HWND 81 * 82 * Class: com_sun_java_accessibility_AccessBridge 83 * Method: jawtGetNativeWindowHandleFromComponent 84 * Signature: (Ljava/awt/Component;)I 85 */ 86 JNIEXPORT jint JNICALL 87 Java_com_sun_java_accessibility_AccessBridge_jawtGetNativeWindowHandleFromComponent 88 (JNIEnv *env, jobject callingObj, jobject component) 89 { 90 91 JAWT awt; 92 JAWT_DrawingSurface* ds; 93 JAWT_DrawingSurfaceInfo* dsi; 94 JAWT_Win32DrawingSurfaceInfo* dsi_win; 95 jboolean result; 96 // jint lock; 97 jint windowHandle = -1; 98 99 // Get the AWT 100 awt.version = JAWT_VERSION_1_4; 101 result = JAWT_GetAWT(env, &awt); 102 if (result == JNI_FALSE) { 103 return -1; 104 } 105 106 // Get the drawing surface 107 ds = awt.GetDrawingSurface(env, component); 108 if (ds == NULL) { 109 return -1; 110 } 111 112 /* 113 * Should not be necessary. 114 * 115 // Lock the drawing surface 116 lock = ds->Lock(ds); 117 if ((lock & JAWT_LOCK_ERROR) != 0) { 118 return -1; 119 } 120 */ 121 122 // Get the drawing surface info 123 dsi = ds->GetDrawingSurfaceInfo(ds); 124 125 // Get the platform-specific drawing info 126 dsi_win = (JAWT_Win32DrawingSurfaceInfo *)dsi->platformInfo; 127 128 // Get the window handle 129 windowHandle = (jint)dsi_win->hwnd; 130 131 // Free the drawing surface info 132 ds->FreeDrawingSurfaceInfo(dsi); 133 134 /* 135 // Unlock the drawing surface 136 ds->Unlock(ds); 137 */ 138 139 // Free the drawing surface 140 awt.FreeDrawingSurface(ds); 141 142 return windowHandle; 143 } 144 }