summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
Diffstat (limited to 'render')
-rw-r--r--render/box.c1
-rw-r--r--render/box.h2
-rw-r--r--render/html.c50
-rw-r--r--render/html.h16
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,