diff options
Diffstat (limited to 'render')
-rw-r--r-- | render/box.c | 1 | ||||
-rw-r--r-- | render/box.h | 2 | ||||
-rw-r--r-- | render/html.c | 50 | ||||
-rw-r--r-- | render/html.h | 16 |
4 files changed, 55 insertions, 14 deletions
diff --git a/render/box.c b/render/box.c index 5776501b0..95224ec2a 100644 --- a/render/box.c +++ b/render/box.c @@ -229,7 +229,6 @@ struct box * box_create(struct css_style * style, box->background = 0; box->object = 0; box->object_params = 0; - box->object_state = 0; box->x = box->y = 0; box->height = 0; for (i = 0; i != 4; i++) diff --git a/render/box.h b/render/box.h index f92a339ad..3f69917bf 100644 --- a/render/box.h +++ b/render/box.h @@ -216,8 +216,6 @@ struct box { struct content* object; /** Parameters for the object, or 0. */ struct object_params *object_params; - /** State of object, or 0. */ - void *object_state; }; /** Table column data. */ diff --git a/render/html.c b/render/html.c index 09cdd570c..8bf03c4bf 100644 --- a/render/html.c +++ b/render/html.c @@ -110,6 +110,7 @@ bool html_create(struct content *c, const char *params[]) html->imagemaps = 0; html->string_pool = pool_create(8000); html->box_pool = pool_create(sizeof (struct box) * 100); + html->bw = 0; if (!html->parser || !html->base_url || !html->string_pool || !html->box_pool) { @@ -664,8 +665,14 @@ void html_object_callback(content_msg msg, struct content *object, case CONTENT_MSG_LOADING: /* check if the type is acceptable for this object */ if (html_object_type_permitted(object->type, - c->data.html.object[i].permitted_types)) + c->data.html.object[i].permitted_types)) { + if (c->data.html.bw) + content_open(object, + c->data.html.bw, c, + box, + box->object_params); break; + } /* not acceptable */ c->data.html.object[i].content = 0; @@ -945,3 +952,44 @@ void html_destroy(struct content *c) pool_destroy(c->data.html.string_pool); pool_destroy(c->data.html.box_pool); } + + +/** + * Handle a window containing a CONTENT_HTML being opened. + */ + +void html_open(struct content *c, struct browser_window *bw, + struct content *page, struct box *box, + struct object_params *params) +{ + unsigned int i; + c->data.html.bw = bw; + for (i = 0; i != c->data.html.object_count; i++) { + if (c->data.html.object[i].content == 0) + continue; + if (c->data.html.object[i].content->type == CONTENT_UNKNOWN) + continue; + content_open(c->data.html.object[i].content, + bw, c, + c->data.html.object[i].box, + c->data.html.object[i].box->object_params); + } +} + + +/** + * Handle a window containing a CONTENT_HTML being closed. + */ + +void html_close(struct content *c) +{ + unsigned int i; + c->data.html.bw = 0; + for (i = 0; i != c->data.html.object_count; i++) { + if (c->data.html.object[i].content == 0) + continue; + if (c->data.html.object[i].content->type == CONTENT_UNKNOWN) + continue; + content_close(c->data.html.object[i].content); + } +} diff --git a/render/html.h b/render/html.h index 85a342a14..be84d9efd 100644 --- a/render/html.h +++ b/render/html.h @@ -70,6 +70,9 @@ struct content_html_data { pool box_pool; /**< Memory pool for box tree. */ pool string_pool; /**< Memory pool for strings. */ + + /**< Browser window containing this document, or 0 if not open. */ + struct browser_window *bw; }; @@ -83,17 +86,10 @@ void html_fetch_object(struct content *c, char *url, struct box *box, int available_width, int available_height, bool background); void html_stop(struct content *c); - -/* in riscos/htmlinstance.c */ -void html_add_instance(struct content *c, struct browser_window *bw, - struct content *page, struct box *box, - struct object_params *params, void **state); -void html_reshape_instance(struct content *c, struct browser_window *bw, - struct content *page, struct box *box, - struct object_params *params, void **state); -void html_remove_instance(struct content *c, struct browser_window *bw, +void html_open(struct content *c, struct browser_window *bw, struct content *page, struct box *box, - struct object_params *params, void **state); + struct object_params *params); +void html_close(struct content *c); /* in riscos/htmlredraw.c */ bool html_redraw(struct content *c, int x, int y, |