blob: 9340f819c88e3c9afbdf78bddbad1f5a182a699c [file] [log] [blame]
/*
* Copyright (c) 2005, 2015, 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.
*/
/*
* A DLL which is loaded by Java applications to handle communication
* between Java VMs purposes of Accessbility.
*/
#include <windows.h>
#include <jni.h>
#include "AccessBridgePackages.h"
#include "AccessBridgeATInstance.h"
#include "AccessBridgeJavaEntryPoints.h"
#ifndef __JavaAccessBridge_H__
#define __JavaAccessBridge_H__
extern "C" {
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason,
LPVOID lpvReserved);
void AppendToCallOutput(char *s);
BOOL APIENTRY AccessBridgeDialogProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam);
}
/**
* The JavaAccessBridge class. The core of the Windows AT AccessBridge dll
*/
class JavaAccessBridge {
// for debugging
public:
// for debugging
HINSTANCE windowsInstance;
HWND dialogWindow;
AccessBridgeATInstance *ATs;
JavaVM *javaVM;
JNIEnv *windowsThreadJNIEnv; // for calls initiated from Windows
AccessBridgeJavaEntryPoints *javaThreadEntryPoints;
AccessBridgeJavaEntryPoints *windowsThreadEntryPoints;
jobject javaThreadABObject; // for calls initiated from Java
jobject windowsThreadABObject; // for calls initiated from Windows
public:
JavaAccessBridge(HINSTANCE hInstance);
~JavaAccessBridge();
void javaRun(JNIEnv *env, jobject obj);
BOOL initWindow();
// IPC with the Java AccessBridge DLL
void postHelloToWindowsDLLMsg(HWND destHwnd);
LRESULT MemoryMappedFileCreated(HWND srcHwnd, char *filename);
void sendPackage(char *buffer, int bufsize, HWND destHwnd);
void sendJavaEventPackage(char *buffer, int bufsize, long type);
void sendAccessibilityEventPackage(char *buffer, int bufsize, long type);
BOOL sendMemoryPackage(char *buffer, long bufsize, HWND destWindow);
LRESULT processPackage(char *buffer, int bufsize);
BOOL receiveMemoryPackage(HWND srcWindow, long bufsize);
void WindowsATDestroyed(HWND ATBridgeDLLWindow);
// Java VM object memory management
void releaseJavaObject(jobject object);
// Event handling methods
void addJavaEventNotification(jlong type, HWND DLLwindow);
void removeJavaEventNotification(jlong type, HWND DLLwindow);
void addAccessibilityEventNotification(jlong type, HWND DLLwindow);
void removeAccessibilityEventNotification(jlong type, HWND DLLwindow);
// Event firing methods
/*
void firePropertyChange(JNIEnv *env, jobject callingObj,
jobject propertyChangeEvent,
jobject source, jstring propertyName,
jstring oldValue, jstring newValue);
*/
void javaShutdown(JNIEnv *env, jobject callingObj);
void fireFocusGained(JNIEnv *env, jobject callingObj,
jobject focusEvent, jobject source);
void fireFocusLost(JNIEnv *env, jobject callingObj,
jobject focusEvent,jobject source);
void fireCaretUpdate(JNIEnv *env, jobject callingObj,
jobject caretEvent, jobject source);
void fireMouseClicked(JNIEnv *env, jobject callingObj,
jobject mouseEvent, jobject source);
void fireMouseEntered(JNIEnv *env, jobject callingObj,
jobject mouseEvent, jobject source);
void fireMouseExited(JNIEnv *env, jobject callingObj,
jobject mouseEvent, jobject source);
void fireMousePressed(JNIEnv *env, jobject callingObj,
jobject mouseEvent, jobject source);
void fireMouseReleased(JNIEnv *env, jobject callingObj,
jobject mouseEvent, jobject source);
void fireMenuCanceled(JNIEnv *env, jobject callingObj,
jobject menuEvent, jobject source);
void fireMenuDeselected(JNIEnv *env, jobject callingObj,
jobject menuEvent, jobject source);
void fireMenuSelected(JNIEnv *env, jobject callingObj,
jobject menuEvent, jobject source);
void firePopupMenuCanceled(JNIEnv *env, jobject callingObj,
jobject popupMenuEvent, jobject source);
void firePopupMenuWillBecomeInvisible(JNIEnv *env, jobject callingObj,
jobject popupMenuEvent, jobject source);
void firePopupMenuWillBecomeVisible(JNIEnv *env, jobject callingObj,
jobject popupMenuEvent, jobject source);
void firePropertyCaretChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jint oldValue, jint newValue);
void firePropertyDescriptionChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jstring oldValue, jstring newValue);
void firePropertyNameChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jstring oldValue, jstring newValue);
void firePropertySelectionChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source);
void firePropertyStateChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jstring oldValue, jstring newValue);
void firePropertyTextChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source);
void firePropertyValueChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jstring oldValue, jstring newValue);
void firePropertyVisibleDataChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source);
void firePropertyChildChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jobject oldValue, jobject newValue);
void firePropertyActiveDescendentChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jobject oldValue, jobject newValue);
void firePropertyTableModelChange(JNIEnv *env, jobject callingObj,
jobject event, jobject source,
jstring oldValue, jstring newValue);
};
#endif