author = ashuk

r = edburns
a = edburns

Implements RemoveListener


git-svn-id: svn://10.0.0.236/trunk@74818 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
ashuk%eng.sun.com
2000-07-26 20:07:11 +00:00
parent 4554a01d45
commit b5f214c647
5 changed files with 157 additions and 30 deletions

View File

@@ -700,9 +700,13 @@ CBrowserContainer::OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL,
::Recycle(urlStr);
}
}
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread, mDocTarget,
DocumentLoader_maskValues[START_DOCUMENT_LOAD_EVENT_MASK], urlJStr);
DocumentLoader_maskValues[START_DOCUMENT_LOAD_EVENT_MASK],
urlJStr);
if (urlJStr) {
::util_DeleteStringUTF(mInitContext->env, (jstring) urlJStr);
@@ -747,7 +751,10 @@ CBrowserContainer::OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel *aCha
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread, mDocTarget,
DocumentLoader_maskValues[END_DOCUMENT_LOAD_EVENT_MASK], nsnull);
DocumentLoader_maskValues[END_DOCUMENT_LOAD_EVENT_MASK],
nsnull);
return NS_OK;
}
@@ -768,7 +775,9 @@ CBrowserContainer::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* aChanne
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread, mDocTarget,
DocumentLoader_maskValues[START_URL_LOAD_EVENT_MASK], nsnull);
DocumentLoader_maskValues[START_URL_LOAD_EVENT_MASK],
nsnull);
return NS_OK;
}
@@ -787,9 +796,12 @@ CBrowserContainer::OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* aCha
}
#endif
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread, mDocTarget,
DocumentLoader_maskValues[PROGRESS_URL_LOAD_EVENT_MASK], nsnull);
DocumentLoader_maskValues[PROGRESS_URL_LOAD_EVENT_MASK],
nsnull);
return NS_OK;
}
@@ -818,12 +830,13 @@ CBrowserContainer::OnStatusURLLoad(nsIDocumentLoader* loader,
JNIEnv *env = (JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION_1_2);
jstring statusMessage = ::util_NewString(env, (const jchar *)
aMsg.GetUnicode(), length);
util_SendEventToJava(mInitContext->env, mInitContext->nativeEventThread,
mDocTarget,
DocumentLoader_maskValues[STATUS_URL_LOAD_EVENT_MASK],
(jobject) statusMessage);
if (statusMessage) {
::util_DeleteString(mInitContext->env, statusMessage);
}
@@ -850,6 +863,7 @@ CBrowserContainer::OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel,
mInitContext->nativeEventThread, mDocTarget,
DocumentLoader_maskValues[END_URL_LOAD_EVENT_MASK], nsnull);
return NS_OK;
}
@@ -870,11 +884,14 @@ CBrowserContainer::MouseDown(nsIDOMEvent* aMouseEvent)
PR_ASSERT(nsnull != aMouseEvent);
getPropertiesFromEvent(aMouseEvent);
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread,
mMouseTarget,
DOMMouseListener_maskValues[MOUSE_DOWN_EVENT_MASK],
properties);
return NS_OK;
}
@@ -888,11 +905,14 @@ CBrowserContainer::MouseUp(nsIDOMEvent* aMouseEvent)
PR_ASSERT(nsnull != aMouseEvent);
getPropertiesFromEvent(aMouseEvent);
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread,
mMouseTarget,
DOMMouseListener_maskValues[MOUSE_UP_EVENT_MASK],
properties);
return NS_OK;
}
@@ -915,6 +935,8 @@ CBrowserContainer::MouseClick(nsIDOMEvent* aMouseEvent)
mMouseTarget,
DOMMouseListener_maskValues[MOUSE_CLICK_EVENT_MASK],
properties);
return NS_OK;
}
@@ -938,6 +960,8 @@ CBrowserContainer::MouseDblClick(nsIDOMEvent* aMouseEvent)
mMouseTarget,
DOMMouseListener_maskValues[MOUSE_DOUBLE_CLICK_EVENT_MASK],
properties);
return NS_OK;
}
@@ -951,11 +975,14 @@ CBrowserContainer::MouseOver(nsIDOMEvent* aMouseEvent)
PR_ASSERT(nsnull != aMouseEvent);
getPropertiesFromEvent(aMouseEvent);
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread,
mMouseTarget,
DOMMouseListener_maskValues[MOUSE_OVER_EVENT_MASK],
properties);
return NS_OK;
}
@@ -969,11 +996,14 @@ CBrowserContainer::MouseOut(nsIDOMEvent* aMouseEvent)
PR_ASSERT(nsnull != aMouseEvent);
getPropertiesFromEvent(aMouseEvent);
util_SendEventToJava(mInitContext->env,
mInitContext->nativeEventThread,
mMouseTarget,
DOMMouseListener_maskValues[MOUSE_OUT_EVENT_MASK],
properties);
return NS_OK;
}
@@ -994,6 +1024,7 @@ NS_IMETHODIMP CBrowserContainer::AddMouseListener(jobject target)
DOMMouseListener_maskNames,
DOMMouseListener_maskValues);
}
mMouseTarget = target;
return rv;
@@ -1011,11 +1042,39 @@ NS_IMETHODIMP CBrowserContainer::AddDocumentLoadListener(jobject target)
DocumentLoader_maskNames,
DocumentLoader_maskValues);
}
mDocTarget = target;
return rv;
}
NS_IMETHODIMP CBrowserContainer::RemoveMouseListener()
{
nsresult rv = NS_OK;
if (!mInitContext->initComplete) {
return NS_ERROR_FAILURE;
}
::util_DeleteGlobalRef((JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION_1_2), mMouseTarget);
mMouseTarget = nsnull;
return rv;
}
NS_IMETHODIMP CBrowserContainer::RemoveDocumentLoadListener()
{
nsresult rv = NS_OK;
if (!mInitContext->initComplete) {
return NS_ERROR_FAILURE;
}
::util_DeleteGlobalRef((JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION_1_2), mDocTarget);
mDocTarget = nsnull;
return rv;
}
NS_IMETHODIMP CBrowserContainer::RemoveAllListeners()
{
if (mDomEventTarget) {
@@ -1024,9 +1083,14 @@ NS_IMETHODIMP CBrowserContainer::RemoveAllListeners()
mDomEventTarget->RemoveEventListener(eTypeUni, this, PR_FALSE);
nsCRT::free(eTypeUni);
mDomEventTarget = nsnull;
}
}
::util_DeleteGlobalRef((JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION_1_2), mDocTarget);
::util_DeleteGlobalRef((JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION_1_2), mMouseTarget);
mMouseTarget = nsnull;
mDocTarget = nsnull;
return NS_OK;
}

View File

@@ -307,6 +307,52 @@ JNIEXPORT void JNICALL Java_org_mozilla_webclient_wrapper_1native_NativeEventThr
break;
}
return;
}
JNIEXPORT void JNICALL
Java_org_mozilla_webclient_wrapper_1native_NativeEventThread_nativeRemoveListener
(JNIEnv *env, jobject obj, jint webShellPtr, jobject typedListener)
{
WebShellInitContext *initContext = (WebShellInitContext *)webShellPtr;
if (initContext == nsnull) {
::util_ThrowExceptionToJava(env, "Exception: null initContext passed to nativeRemoveListener");
return;
}
jclass clazz = nsnull;
int listenerType = 0;
while (nsnull != gSupportedListenerInterfaces[listenerType]) {
if (nsnull ==
(clazz =
::util_FindClass(env,
gSupportedListenerInterfaces[listenerType]))) {
return;
}
if (::util_IsInstanceOf(env, typedListener, clazz)) {
// We've got a winner!
break;
}
listenerType++;
}
if (LISTENER_NOT_FOUND == (LISTENER_CLASSES) listenerType) {
::util_ThrowExceptionToJava(env, "Exception: NativeEventThread.nativeRemoveListener(): can't find listener \n\tclass for argument");
return;
}
PR_ASSERT(initContext->browserContainer);
switch(listenerType) {
case DOCUMENT_LOAD_LISTENER:
initContext->browserContainer->RemoveDocumentLoadListener();
break;
case MOUSE_LISTENER:
initContext->browserContainer->RemoveMouseListener();
break;
}
}
JNIEXPORT void JNICALL
@@ -315,11 +361,11 @@ Java_org_mozilla_webclient_wrapper_1native_NativeEventThread_nativeRemoveAllList
WebShellInitContext *initContext = (WebShellInitContext *)webShellPtr;
if (initContext == nsnull) {
::util_ThrowExceptionToJava(env, "Exception: null initContext passed tonativeRemoveAllListeners");
::util_ThrowExceptionToJava(env, "Exception: null initContext passed to nativeRemoveAllListeners");
return;
}
// removeAllListeners(env, initContext);
initContext->browserContainer->RemoveAllListeners();
}
/**

View File

@@ -47,13 +47,17 @@ public:
NS_IMETHOD AddMouseListener(jobject target) = 0;
NS_IMETHOD AddDocumentLoadListener(jobject target) = 0;
NS_IMETHOD RemoveAllListeners() = 0;
NS_IMETHOD RemoveMouseListener() = 0;
NS_IMETHOD RemoveDocumentLoadListener() = 0;
};
#define NS_DECL_WCIBROWSERCONTAINER \
NS_IMETHOD AddMouseListener(jobject target); \
NS_IMETHOD AddDocumentLoadListener(jobject target); \
NS_IMETHOD RemoveAllListeners();
NS_IMETHOD RemoveAllListeners(); \
NS_IMETHOD RemoveMouseListener(); \
NS_IMETHOD RemoveDocumentLoadListener();
#endif