jdk/src/jdk.accessibility/windows/native/libjavaaccessbridge/JavaAccessBridge.h
author ptbrunet
Fri, 24 Jul 2015 13:58:44 -0500
changeset 32116 444f22a0ad84
parent 29883 e02d168adbc6
permissions -rw-r--r--
8077707: jdk9 b58 cannot run any graphical application on Win 8 with JAWS running Summary: change dialog proc wparam type from UINT to WPARAM, lparam type from LONG to LPARAM Reviewed-by: serb, alexsch, van Contributed-by: peter.brunet@oracle.com

/*
 * 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