diff --git a/mozilla/include/libmocha.h b/mozilla/include/libmocha.h index 80953c2b782..42e12bc5485 100644 --- a/mozilla/include/libmocha.h +++ b/mozilla/include/libmocha.h @@ -100,6 +100,9 @@ typedef struct MochaDecoder { JSObject *span_prototype; JSObject *transclusion_prototype; #endif + JSObject *builtin_prototype; + JSObject *builtin_element_prototype; + JSObject *builtin_node_prototype; /* * Window sub-objects. These must also follow the CLEAR/HOLD/DROP @@ -428,6 +431,9 @@ LO_EnumerateApplets(MWContext *context, int32 layer_id); extern LO_EmbedStruct * LO_GetEmbedByIndex(MWContext *context, int32 layer_id, uint index); +extern LO_BuiltinStruct * +LO_GetBuiltinByIndex(MWContext *context, int32 layer_id, uint index); + extern uint LO_EnumerateEmbeds(MWContext *context, int32 layer_id); @@ -497,6 +503,10 @@ extern JSObject * LM_ReflectEmbed(MWContext *context, LO_EmbedStruct *lo_embed, PA_Tag * tag, int32 layer_id, uint index); +extern JSObject * +LM_ReflectBuiltin(MWContext *context, LO_BuiltinStruct *lo_embed, + PA_Tag * tag, int32 layer_id, uint index); + struct lo_FormData_struct; struct lo_NameList_struct; diff --git a/mozilla/include/lo_ele.h b/mozilla/include/lo_ele.h index a0014330bce..52534061f43 100644 --- a/mozilla/include/lo_ele.h +++ b/mozilla/include/lo_ele.h @@ -1021,6 +1021,7 @@ struct LO_BuiltinStruct_struct { PA_Tag *tag; CL_Layer *layer; + void *htPane; int32 percent_width; /* needed for relayout. */ int32 percent_height; /* needed for relayout. */ diff --git a/mozilla/lib/layout/laybuiltin.c b/mozilla/lib/layout/laybuiltin.c index f11d0eee1cd..9abb0bf264f 100644 --- a/mozilla/lib/layout/laybuiltin.c +++ b/mozilla/lib/layout/laybuiltin.c @@ -25,6 +25,8 @@ #include "np.h" #include "laystyle.h" #include "layers.h" +#include "libevent.h" +#include "libmocha.h" #define BUILTIN_DEF_DIM 50 #define BUILTIN_DEF_BORDER 0 @@ -39,6 +41,41 @@ void lo_FillInBuiltinGeometry(lo_DocState *state, LO_BuiltinStruct *builtin, void lo_UpdateStateAfterBuiltinLayout (lo_DocState *state, LO_BuiltinStruct *builtin, int32 line_inc, int32 baseline_inc); +uint +LO_EnumerateBuiltins(MWContext *context, int32 layer_id) +{ + lo_TopState *top_state; + int count, index; + LO_BuiltinStruct *builtin; + lo_DocLists *doc_lists; + + top_state = lo_GetMochaTopState(context); + if (top_state == NULL) + return 0; + + doc_lists = lo_GetDocListsById(top_state->doc_state, layer_id); + if (!doc_lists) + return 0; + + /* count 'em */ + count = 0; + builtin = doc_lists->builtin_list; + while (builtin) { + builtin = builtin->nextBuiltin; + count++; + } + + /* reflect all builtins in reverse order */ + builtin = doc_lists->builtin_list; + for (index = count-1; index >= 0; index--) { + if (builtin->mocha_object == NULL) + LM_ReflectBuiltin(context, (void *) builtin, NULL, layer_id, index); + builtin = builtin->nextBuiltin; + } + + return count; +} + void lo_FormatBuiltin (MWContext *context, lo_DocState *state, PA_Tag *tag) { @@ -467,6 +504,7 @@ lo_UpdateStateAfterBuiltinLayout (lo_DocState *state, LO_BuiltinStruct *builtin, { int32 builtin_width; int32 x, y; + lo_DocLists *doc_lists; #ifdef DEBUG_SPENCE printf ("lo_UpdateStateAfterBuiltinLayout\n"); @@ -495,6 +533,11 @@ lo_UpdateStateAfterBuiltinLayout (lo_DocState *state, LO_BuiltinStruct *builtin, /* Move layer to new position */ if (builtin->layer != NULL) CL_MoveLayer(builtin->layer, x, y); + + doc_lists = lo_GetCurrentDocLists(state); + builtin->nextBuiltin = (LO_BuiltinStruct *)doc_lists->builtin_list; + doc_lists->builtin_list = builtin; + doc_lists->builtin_list_count++; } diff --git a/mozilla/lib/layout/laymocha.c b/mozilla/lib/layout/laymocha.c index e7d5237f147..63d9e654056 100644 --- a/mozilla/lib/layout/laymocha.c +++ b/mozilla/lib/layout/laymocha.c @@ -694,6 +694,40 @@ LO_GetEmbedByIndex(MWContext *context, int32 layer_id, uint index) return NULL; } +LO_BuiltinStruct * +LO_GetBuiltinByIndex(MWContext *context, int32 layer_id, uint index) +{ + lo_TopState *top_state; + LO_BuiltinStruct *builtin; + int i, count; + lo_DocLists *doc_lists; + + top_state = lo_GetTopState(context); + if (top_state == NULL) + return NULL; + + doc_lists = lo_GetDocListsById(top_state->doc_state, layer_id); + if (!doc_lists) + return NULL; + + /* count 'em */ + count = 0; + builtin = doc_lists->builtin_list; + while (builtin) { + builtin = builtin->nextBuiltin; + count++; + } + + /* reverse order... */ + builtin = doc_lists->builtin_list; + for (i = count-1; i >= 0; i--) { + if ((uint)i == index) + return builtin; + builtin = builtin->nextBuiltin; + } + return NULL; +} + uint LO_EnumerateEmbeds(MWContext *context, int32 layer_id) { diff --git a/mozilla/lib/layout/layout.h b/mozilla/lib/layout/layout.h index 0663132a1a8..ded97c555a4 100644 --- a/mozilla/lib/layout/layout.h +++ b/mozilla/lib/layout/layout.h @@ -349,6 +349,9 @@ typedef struct lo_DocLists_struct { LO_EmbedStruct *embed_list; /* embeds linked in reverse order */ int32 embed_list_count; /* The number of embeds in the list */ + LO_BuiltinStruct *builtin_list; /* builtin/tree linked in reverse order */ + int32 builtin_list_count; + LO_JavaAppStruct *applet_list; /* applets linked in reverse order */ int32 applet_list_count; /* The number of applets in the list */ diff --git a/mozilla/lib/libmocha/Makefile b/mozilla/lib/libmocha/Makefile index 5b173a98abd..87bff4ae8a2 100644 --- a/mozilla/lib/libmocha/Makefile +++ b/mozilla/lib/libmocha/Makefile @@ -24,7 +24,8 @@ LIBRARY_NAME = mocha REQUIRES = lay parse img js style layer applet dbm nspr security \ htmldlgs util jtools pref caps java libreg softupdt jsdebug \ - netcache network httpurl plugin plugimpl mocha oji ojiimpl xpcom + netcache network httpurl plugin plugimpl mocha oji ojiimpl xpcom \ + layout ifdef DOM EXPORTS = lm_dom.h # required by layout @@ -58,6 +59,7 @@ CSRCS = et_mocha.c \ lm_supdt.c \ lm_taint.c \ lm_trans.c \ + lm_tree.c \ lm_trggr.c \ lm_url.c \ lm_win.c \ diff --git a/mozilla/lib/libmocha/Makefile.in b/mozilla/lib/libmocha/Makefile.in index fa002aa4b33..cccaa018006 100644 --- a/mozilla/lib/libmocha/Makefile.in +++ b/mozilla/lib/libmocha/Makefile.in @@ -29,7 +29,8 @@ LIBRARY_NAME = mocha REQUIRES = lay parse img js style layer applet dbm nspr security \ htmldlgs util jtools pref caps java libreg softupdt jsdebug \ - netcache network httpurl plugin plugimpl mocha oji ojiimpl xpcom + netcache network httpurl plugin plugimpl mocha oji ojiimpl xpcom \ + layout ifdef DOM EXPORTS = lm_dom.h # required by layout @@ -63,6 +64,7 @@ CSRCS = et_mocha.c \ lm_supdt.c \ lm_taint.c \ lm_trans.c \ + lm_tree.c \ lm_trggr.c \ lm_url.c \ lm_win.c \ diff --git a/mozilla/lib/libmocha/lm.h b/mozilla/lib/libmocha/lm.h index 7483d1d11c6..d729b232d59 100644 --- a/mozilla/lib/libmocha/lm.h +++ b/mozilla/lib/libmocha/lm.h @@ -76,6 +76,8 @@ extern char lm_spans_str[]; /* "spans" */ extern char lm_transclusions_str[]; /* "transclusions" */ #endif + +extern char lm_builtins_str[]; extern char lm_location_str[]; /* "location" */ extern char lm_navigator_str[]; /* "navigator" */ extern char lm_netcaster_str[]; /* "netcaster" */ @@ -249,6 +251,8 @@ extern JSObject *lm_GetImageArray(MochaDecoder *decoder, extern JSObject *lm_GetDocumentLayerArray(MochaDecoder *decoder, JSObject *document); +extern JSBool lm_InitBuiltinClass(MochaDecoder *decoder); +extern JSObject *lm_GetBuiltinsArray(MochaDecoder *decoder, JSObject *document); /* * dummy object for applets and embeds that can't be reflected @@ -345,6 +349,7 @@ typedef struct JSDocument { JSObject *transclusions; JSObject *dom_documentElement; #endif + JSObject *builtins; } JSDocument; #define URL_NOT_INDEXED ((uint32)-1) diff --git a/mozilla/lib/libmocha/lm_doc.c b/mozilla/lib/libmocha/lm_doc.c index e5e08fb22c2..2b2db4f0d74 100644 --- a/mozilla/lib/libmocha/lm_doc.c +++ b/mozilla/lib/libmocha/lm_doc.c @@ -73,7 +73,8 @@ enum doc_slot { DOC_VLINK_COLOR = -20, DOC_ALINK_COLOR = -21, DOC_WIDTH = -22, - DOC_HEIGHT = -23 + DOC_HEIGHT = -23, + DOC_BUILTINS = -24 }; #else enum doc_slot { @@ -103,7 +104,8 @@ enum doc_slot { DOC_VLINK_COLOR = -23, DOC_ALINK_COLOR = -24, DOC_WIDTH = -25, - DOC_HEIGHT = -26 + DOC_HEIGHT = -26, + DOC_BUILTINS = -27 }; #endif @@ -139,6 +141,7 @@ static JSPropertySpec doc_props[] = { {"alinkColor", DOC_ALINK_COLOR, JSPROP_ENUMERATE}, {"width", DOC_WIDTH, JSPROP_ENUMERATE}, {"height", DOC_HEIGHT, JSPROP_ENUMERATE}, + {lm_builtins_str,DOC_BUILTINS, JSPROP_ENUMERATE|JSPROP_READONLY}, {0} }; @@ -287,6 +290,15 @@ doc_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) LO_UnlockLayout(); return JS_TRUE; + case DOC_BUILTINS: + *vp = OBJECT_TO_JSVAL(lm_GetBuiltinsArray(decoder, obj)); + active_layer_id = LM_GetActiveLayer(context); + LM_SetActiveLayer(context, doc->layer_id); + (void) LO_EnumerateBuiltins(context,doc->layer_id); + LM_SetActiveLayer(context, active_layer_id); + LO_UnlockLayout(); + return JS_TRUE; + case DOC_LAYERS: *vp = OBJECT_TO_JSVAL(lm_GetDocumentLayerArray(decoder, obj)); LO_UnlockLayout(); diff --git a/mozilla/lib/libmocha/lm_init.c b/mozilla/lib/libmocha/lm_init.c index 36255df7da1..a3e5343b501 100644 --- a/mozilla/lib/libmocha/lm_init.c +++ b/mozilla/lib/libmocha/lm_init.c @@ -106,6 +106,7 @@ char lm_layers_str[] = "layers"; char lm_spans_str[] = "spans"; char lm_transclusions_str[] = "transclusions"; #endif +char lm_builtins_str[] = "trees"; char lm_location_str[] = "location"; char lm_navigator_str[] = "navigator"; char lm_netcaster_str[] = "netcaster"; diff --git a/mozilla/lib/libmocha/lm_win.c b/mozilla/lib/libmocha/lm_win.c index 45e1d8ec11e..10126bda650 100644 --- a/mozilla/lib/libmocha/lm_win.c +++ b/mozilla/lib/libmocha/lm_win.c @@ -3395,6 +3395,7 @@ lm_DefineWindowProps(JSContext *cx, MochaDecoder *decoder) lm_InitSpanClass(decoder) && lm_InitTransclusionClass(decoder) && #endif + lm_InitBuiltinClass(decoder) && lm_InitInputClasses(decoder) && lm_DefinePkcs11(decoder)); } diff --git a/mozilla/lib/libmocha/macbuild/LibMocha.mcp b/mozilla/lib/libmocha/macbuild/LibMocha.mcp index 54bf0df8596..391a720b23a 100644 Binary files a/mozilla/lib/libmocha/macbuild/LibMocha.mcp and b/mozilla/lib/libmocha/macbuild/LibMocha.mcp differ