This fix enables the adding of bookmarks and bookmark folders.

* Due to the vagaries of the mozilla RDF implementation, folders and
 * bookmark entries are handled differently.  For Folders, we don't
 * create a nativeRDFNode at the outset.  Rather, we just create the
 * properties table and stock it with the known keys, then wait for the
 * nativeRDFNode to be created en addBookmark.

 * The adding of bookmark folders is done through the RDF DoCommand
 * interface.  The DoCommand interface creates the nsIRDFResource on
 * your behalf.  We use an nsIRDFObserver to obtain the created resource
 * as the DoCommand executes.

The following files are in this fix.

A src_moz/wsRDFObserver.cpp
A src_moz/wsRDFObserver.h
M classes_spec/org/mozilla/webclient/BookmarkEntry.java
M classes_spec/org/mozilla/webclient/test/EMWindow.java
M classes_spec/org/mozilla/webclient/wrapper_native/BookmarkEntryImpl.java
M classes_spec/org/mozilla/webclient/wrapper_native/BookmarksImpl.java
M classes_spec/org/mozilla/webclient/wrapper_native/RDFTreeNode.java
M src_moz/Makefile.win
M src_moz/Makefile.in
M src_moz/RDFActionEvents.cpp
M src_moz/RDFActionEvents.h
M src_moz/RDFTreeNode.cpp
M src_moz/rdf_util.cpp
M src_moz/rdf_util.h
M src_moz/motif/NativeLoaderStub.cpp
M src_share/jni_util.cpp
M src_share/jni_util.h


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83504 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
edburns%acm.org
2000-12-12 00:00:15 +00:00
parent 514083cc5e
commit b0bb9b0ac7
17 changed files with 771 additions and 75 deletions

View File

@@ -217,10 +217,11 @@ Java_org_mozilla_webclient_wrapper_1native_RDFTreeNode_nativeToString
JNIEXPORT void JNICALL
Java_org_mozilla_webclient_wrapper_1native_RDFTreeNode_nativeInsertElementAt
(JNIEnv *env, jobject obj, jint webShellPtr, jint parentRDFNode,
jint childRDFNode, jint childIndex)
jint childRDFNode, jobject childProps, jint childIndex)
{
WebShellInitContext* initContext = (WebShellInitContext *) webShellPtr;
void * voidResult = nsnull;
jobject propsGlobalRef;
if (initContext == nsnull) {
::util_ThrowExceptionToJava(env, "Exception: null webShellPtr passed to nativeInsertElementAt");
@@ -229,20 +230,60 @@ Java_org_mozilla_webclient_wrapper_1native_RDFTreeNode_nativeInsertElementAt
if (!initContext->initComplete) {
::util_ThrowExceptionToJava(env, "Exception: can't InsertElementAt");
}
propsGlobalRef = ::util_NewGlobalRef(env, childProps);
wsRDFInsertElementAtEvent *actionEvent =
new wsRDFInsertElementAtEvent(initContext,
(PRUint32) parentRDFNode,
(PRUint32) childRDFNode,
(void *) propsGlobalRef,
(PRUint32) childIndex);
PLEvent * event = (PLEvent*) *actionEvent;
voidResult = ::util_PostSynchronousEvent(initContext, event);
::util_DeleteGlobalRef(env, propsGlobalRef);
if (NS_FAILED((nsresult) voidResult)) {
::util_ThrowExceptionToJava(env, "Exception: Can't InsertElementAt");
}
return;
}
JNIEXPORT jint JNICALL
Java_org_mozilla_webclient_wrapper_1native_RDFTreeNode_nativeNewFolder
(JNIEnv *env, jobject obj, jint webShellPtr, jint parentRDFNode,
jobject childProps)
{
WebShellInitContext* initContext = (WebShellInitContext *) webShellPtr;
void * voidResult = nsnull;
jobject propsGlobalRef;
jint retVal = 0;
if (initContext == nsnull) {
::util_ThrowExceptionToJava(env, "Exception: null webShellPtr passed to nativeNewFolder");
}
if (!initContext->initComplete || !childProps) {
::util_ThrowExceptionToJava(env, "Exception: can't NewFolder");
}
propsGlobalRef = ::util_NewGlobalRef(env, childProps);
if (!propsGlobalRef) {
::util_ThrowExceptionToJava(env, "Exception: can't NewFolder");
}
wsRDFNewFolderEvent *actionEvent =
new wsRDFNewFolderEvent(initContext,
(PRUint32) parentRDFNode,
(void *) propsGlobalRef,
(PRUint32 *) &retVal);
PLEvent * event = (PLEvent*) *actionEvent;
voidResult = ::util_PostSynchronousEvent(initContext, event);
::util_DeleteGlobalRef(env, propsGlobalRef);
if (NS_FAILED((nsresult) voidResult)) {
::util_ThrowExceptionToJava(env, "Exception: Can't do NewFolder");
}
return retVal;
}