From 05d77f9269a918ec32ac847228fc16e2a2d66428 Mon Sep 17 00:00:00 2001 From: "edburns%acm.org" Date: Thu, 17 Aug 2000 18:29:18 +0000 Subject: [PATCH] r=ashuk a=edburns Files in this checkin M src_moz/CBrowserContainer.cpp M src_moz/CBrowserContainer.h M src_moz/ns_util.cpp M src_moz/ns_util.h M src_share/jni_util.cpp M src_share/jni_util.h cvs diff -u src_moz/CBrowserContainer.cpp src_moz/CBrowserContainer.h src_moz/ns_util.cpp src_moz/ns_util.h src_share/jni_util.cpp src_share/jni_util.h This change moves out listener constants and other support data from src_moz into src_share to enable it to be used in src_ie. tar -cvf 47357.tar src_moz/CBrowserContainer.cpp src_moz/CBrowserContainer.h src_moz/ns_util.cpp src_moz/ns_util.h src_share/jni_util.cpp src_share/jni_util.h git-svn-id: svn://10.0.0.236/trunk@76560 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/java/webclient/src_share/jni_util.cpp | 147 ++++++++++++++++++ mozilla/java/webclient/src_share/jni_util.h | 119 +++++++++++++- 2 files changed, 265 insertions(+), 1 deletion(-) diff --git a/mozilla/java/webclient/src_share/jni_util.cpp b/mozilla/java/webclient/src_share/jni_util.cpp index da6ea15acf8..814206a0f1d 100644 --- a/mozilla/java/webclient/src_share/jni_util.cpp +++ b/mozilla/java/webclient/src_share/jni_util.cpp @@ -41,6 +41,55 @@ static jmethodID gPropertiesInitMethodID = nsnull; static jmethodID gPropertiesSetPropertyMethodID = nsnull; static jmethodID gPropertiesClearMethodID = nsnull; + +// +// Listener data +// + +jboolean STRING_CONSTANTS_INITED = JNI_FALSE; + +jobject SCREEN_X_KEY; +jobject SCREEN_Y_KEY; +jobject CLIENT_X_KEY; +jobject CLIENT_Y_KEY; +jobject ALT_KEY; +jobject CTRL_KEY; +jobject SHIFT_KEY; +jobject META_KEY; +jobject BUTTON_KEY; +jobject CLICK_COUNT_KEY; +jobject TRUE_VALUE; +jobject FALSE_VALUE; +jobject ONE_VALUE; +jobject TWO_VALUE; + +jstring DOCUMENT_LOAD_LISTENER_CLASSNAME; +jstring MOUSE_LISTENER_CLASSNAME; + +jlong DocumentLoader_maskValues[] = { -1L }; +char * DocumentLoader_maskNames[] = { + START_DOCUMENT_LOAD_EVENT_MASK_VALUE, + END_DOCUMENT_LOAD_EVENT_MASK_VALUE, + START_URL_LOAD_EVENT_MASK_VALUE, + END_URL_LOAD_EVENT_MASK_VALUE, + PROGRESS_URL_LOAD_EVENT_MASK_VALUE, + STATUS_URL_LOAD_EVENT_MASK_VALUE, + UNKNOWN_CONTENT_EVENT_MASK_VALUE, + FETCH_INTERRUPT_EVENT_MASK_VALUE, + nsnull +}; + +jlong DOMMouseListener_maskValues[] = { -1L }; +char *DOMMouseListener_maskNames[] = { + MOUSE_DOWN_EVENT_MASK_VALUE, + MOUSE_UP_EVENT_MASK_VALUE, + MOUSE_CLICK_EVENT_MASK_VALUE, + MOUSE_DOUBLE_CLICK_EVENT_MASK_VALUE, + MOUSE_OVER_EVENT_MASK_VALUE, + MOUSE_OUT_EVENT_MASK_VALUE, + nsnull +}; + void util_InitializeShareInitContext(void *yourInitContext) { ShareInitContext *initContext = (ShareInitContext *) yourInitContext; @@ -52,6 +101,104 @@ void util_DeallocateShareInitContext(void *yourInitContext) // right now there is nothing to deallocate } +jboolean util_InitStringConstants(JNIEnv *env) +{ + if (nsnull == gVm) { // declared in jni_util.h + ::util_GetJavaVM(env, &gVm); // save this vm reference away for the callback! + } + + if (nsnull == (SCREEN_X_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "ScreenX")))) { + return JNI_FALSE; + } + if (nsnull == (SCREEN_Y_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "ScreenY")))) { + return JNI_FALSE; + } + if (nsnull == (CLIENT_X_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "ClientX")))) { + return JNI_FALSE; + } + if (nsnull == (CLIENT_Y_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "ClientY")))) { + return JNI_FALSE; + } + if (nsnull == (ALT_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "Alt")))) { + return JNI_FALSE; + } + if (nsnull == (CTRL_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "Ctrl")))) { + return JNI_FALSE; + } + if (nsnull == (SHIFT_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "Shift")))) { + return JNI_FALSE; + } + if (nsnull == (META_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "Meta")))) { + return JNI_FALSE; + } + if (nsnull == (BUTTON_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "Button")))) { + return JNI_FALSE; + } + if (nsnull == (CLICK_COUNT_KEY = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, + "ClickCount")))) { + return JNI_FALSE; + } + if (nsnull == (TRUE_VALUE = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "true")))) { + return JNI_FALSE; + } + if (nsnull == (FALSE_VALUE = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "false")))) { + return JNI_FALSE; + } + if (nsnull == (ONE_VALUE = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "1")))) { + return JNI_FALSE; + } + if (nsnull == (TWO_VALUE = + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, "2")))) { + return JNI_FALSE; + } + if (nsnull == (DOCUMENT_LOAD_LISTENER_CLASSNAME = (jstring) + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, + DOCUMENT_LOAD_LISTENER_CLASSNAME_VALUE)))) { + return JNI_FALSE; + } + if (nsnull == (MOUSE_LISTENER_CLASSNAME = (jstring) + ::util_NewGlobalRef(env, (jobject) + ::util_NewStringUTF(env, + MOUSE_LISTENER_CLASSNAME_VALUE)))) { + return JNI_FALSE; + } + + return STRING_CONSTANTS_INITED = JNI_TRUE; +} + +jboolean util_StringConstantsAreInitialized() +{ + return STRING_CONSTANTS_INITED; +} + void util_ThrowExceptionToJava (JNIEnv * env, const char * message) { if (env->ExceptionOccurred()) { diff --git a/mozilla/java/webclient/src_share/jni_util.h b/mozilla/java/webclient/src_share/jni_util.h index f566f13a848..406a61e2d6b 100644 --- a/mozilla/java/webclient/src_share/jni_util.h +++ b/mozilla/java/webclient/src_share/jni_util.h @@ -39,8 +39,116 @@ #include // -// Local classes +// String constants, defined in jni_util.cpp +// + +extern jobject SCREEN_X_KEY; +extern jobject SCREEN_Y_KEY; +extern jobject CLIENT_X_KEY; +extern jobject CLIENT_Y_KEY; +extern jobject ALT_KEY; +extern jobject CTRL_KEY; +extern jobject SHIFT_KEY; +extern jobject META_KEY; +extern jobject BUTTON_KEY; +extern jobject CLICK_COUNT_KEY; +extern jobject TRUE_VALUE; +extern jobject FALSE_VALUE; +extern jobject ONE_VALUE; +extern jobject TWO_VALUE; + +/** + + * How to create a new listener type on the native side:

+ + * 1. add an entry in the gSupportedListenerInterfaces array defined in + * ns_util.cpp or ie_util.cpp

+ + * 2. add a corresponding entry in the LISTENER_CLASSES enum in + * jni_util.h

+ + * 3. add a jstring to the string constant list in + * jni_util.cpp, below. + + * 4. Initialize this jstring constant in jni_util.cpp + * util_InitStringConstants()

+ + * 5. add an entry to the switch statement in NativeEventThread.cpp + * native{add,remove}Listener

+ + */ + +/** + + * We need one of these for each of the classes in + * gSupportedListenerInterfaces, defined in ns_util.cpp + + */ +extern jstring DOCUMENT_LOAD_LISTENER_CLASSNAME; +extern jstring MOUSE_LISTENER_CLASSNAME; + + // +// Listener support +// + +// these index into the gSupportedListenerInterfaces array + +typedef enum { + DOCUMENT_LOAD_LISTENER = 0, + MOUSE_LISTENER, + LISTENER_NOT_FOUND +} LISTENER_CLASSES; + +// listener names and values, tightly correspond to java listener interfaces + +#define DOCUMENT_LOAD_LISTENER_CLASSNAME_VALUE "org.mozilla.webclient.DocumentLoadListener" +#define MOUSE_LISTENER_CLASSNAME_VALUE "java.awt.event.MouseListener" + + +#define START_DOCUMENT_LOAD_EVENT_MASK_VALUE "START_DOCUMENT_LOAD_EVENT_MASK" +#define END_DOCUMENT_LOAD_EVENT_MASK_VALUE "END_DOCUMENT_LOAD_EVENT_MASK" +#define START_URL_LOAD_EVENT_MASK_VALUE "START_URL_LOAD_EVENT_MASK" +#define END_URL_LOAD_EVENT_MASK_VALUE "END_URL_LOAD_EVENT_MASK" +#define PROGRESS_URL_LOAD_EVENT_MASK_VALUE "PROGRESS_URL_LOAD_EVENT_MASK" +#define STATUS_URL_LOAD_EVENT_MASK_VALUE "STATUS_URL_LOAD_EVENT_MASK" +#define UNKNOWN_CONTENT_EVENT_MASK_VALUE "UNKNOWN_CONTENT_EVENT_MASK" +#define FETCH_INTERRUPT_EVENT_MASK_VALUE "FETCH_INTERRUPT_EVENT_MASK" + +#define MOUSE_DOWN_EVENT_MASK_VALUE "MOUSE_DOWN_EVENT_MASK" +#define MOUSE_UP_EVENT_MASK_VALUE "MOUSE_UP_EVENT_MASK" +#define MOUSE_CLICK_EVENT_MASK_VALUE "MOUSE_CLICK_EVENT_MASK" +#define MOUSE_DOUBLE_CLICK_EVENT_MASK_VALUE "MOUSE_DOUBLE_CLICK_EVENT_MASK" +#define MOUSE_OVER_EVENT_MASK_VALUE "MOUSE_OVER_EVENT_MASK" +#define MOUSE_OUT_EVENT_MASK_VALUE "MOUSE_OUT_EVENT_MASK" + +typedef enum { + START_DOCUMENT_LOAD_EVENT_MASK = 0, + END_DOCUMENT_LOAD_EVENT_MASK, + START_URL_LOAD_EVENT_MASK, + END_URL_LOAD_EVENT_MASK, + PROGRESS_URL_LOAD_EVENT_MASK, + STATUS_URL_LOAD_EVENT_MASK, + UNKNOWN_CONTENT_EVENT_MASK, + FETCH_INTERRUPT_EVENT_MASK, + NUMBER_OF_DOCUMENT_LOADER_MASK_NAMES +} DOCUMENT_LOADER_EVENT_MASK_NAMES; + +typedef enum { + MOUSE_DOWN_EVENT_MASK = 0, + MOUSE_UP_EVENT_MASK, + MOUSE_CLICK_EVENT_MASK, + MOUSE_DOUBLE_CLICK_EVENT_MASK, + MOUSE_OVER_EVENT_MASK, + MOUSE_OUT_EVENT_MASK, + NUMBER_OF_DOM_MOUSE_LISTENER_MASK_NAMES +} DOM_MOUSE_LISTENER_EVENT_MASK_NAMES; + +extern jlong DocumentLoader_maskValues [NUMBER_OF_DOCUMENT_LOADER_MASK_NAMES]; +extern char *DocumentLoader_maskNames [NUMBER_OF_DOCUMENT_LOADER_MASK_NAMES + 1]; + +extern jlong DOMMouseListener_maskValues [NUMBER_OF_DOM_MOUSE_LISTENER_MASK_NAMES]; +extern char *DOMMouseListener_maskNames [NUMBER_OF_DOM_MOUSE_LISTENER_MASK_NAMES + 1]; /** @@ -63,6 +171,15 @@ extern JavaVM *gVm; // defined in jni_util.cpp void util_InitializeShareInitContext(void *initContext); void util_DeallocateShareInitContext(void *initContext); +/** + + * Initialize the above extern jobject string constants as jstrings + + */ + +jboolean util_InitStringConstants(JNIEnv *env); +jboolean util_StringConstantsAreInitialized(); + void util_ThrowExceptionToJava (JNIEnv * env, const char * message); /**