summaryrefslogtreecommitdiff
path: root/render/html.c
diff options
context:
space:
mode:
Diffstat (limited to 'render/html.c')
-rw-r--r--render/html.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/render/html.c b/render/html.c
index 8d64fdf7d..d37a6246c 100644
--- a/render/html.c
+++ b/render/html.c
@@ -2644,10 +2644,8 @@ html_get_contextual_content(struct content *c,
struct box *box = html->layout;
struct box *next;
int box_x = 0, box_y = 0;
- hlcache_handle *containing_content = NULL;
- while ((next = box_at_point(box, x, y, &box_x, &box_y,
- &containing_content)) != NULL) {
+ while ((next = box_at_point(box, x, y, &box_x, &box_y)) != NULL) {
box = next;
if (box->style && css_computed_visibility(box->style) ==
@@ -2659,6 +2657,10 @@ html_get_contextual_content(struct content *c,
x - box_x, y - box_y, data);
if (box->object)
+ content_get_contextual_content(box->object,
+ x - box_x, y - box_y, data);
+
+ if (box->object)
data->object = box->object;
if (box->href)
@@ -2709,13 +2711,11 @@ html_scroll_at_point(struct content *c, int x, int y, int scrx, int scry)
struct box *box = html->layout;
struct box *next;
int box_x = 0, box_y = 0;
- hlcache_handle *containing_content = NULL;
bool handled_scroll = false;
/* TODO: invert order; visit deepest box first */
- while ((next = box_at_point(box, x, y, &box_x, &box_y,
- &containing_content)) != NULL) {
+ while ((next = box_at_point(box, x, y, &box_x, &box_y)) != NULL) {
box = next;
if (box->style && css_computed_visibility(box->style) ==
@@ -2727,6 +2727,12 @@ html_scroll_at_point(struct content *c, int x, int y, int scrx, int scry)
x - box_x, y - box_y, scrx, scry) == true)
return true;
+ /* Pass into object */
+ if (box->object != NULL && content_scroll_at_point(
+ box->object, x - box_x, y - box_y,
+ scrx, scry) == true)
+ return true;
+
/* Handle box scrollbars */
if (box->scroll_y && scrollbar_scroll(box->scroll_y, scry))
handled_scroll = true;
@@ -2761,11 +2767,9 @@ static bool html_drop_file_at_point(struct content *c, int x, int y, char *file)
struct box *file_box = NULL;
struct box *text_box = NULL;
int box_x = 0, box_y = 0;
- hlcache_handle *containing_content = NULL;
/* Scan box tree for boxes that can handle drop */
- while ((next = box_at_point(box, x, y, &box_x, &box_y,
- &containing_content)) != NULL) {
+ while ((next = box_at_point(box, x, y, &box_x, &box_y)) != NULL) {
box = next;
if (box->style && css_computed_visibility(box->style) ==
@@ -2776,6 +2780,10 @@ static bool html_drop_file_at_point(struct content *c, int x, int y, char *file)
return browser_window_drop_file_at_point(box->iframe,
x - box_x, y - box_y, file);
+ if (box->object && content_drop_file_at_point(box->object,
+ x - box_x, y - box_y, file) == true)
+ return true;
+
if (box->gadget) {
switch (box->gadget->type) {
case GADGET_FILE:
@@ -2823,10 +2831,7 @@ static bool html_drop_file_at_point(struct content *c, int x, int y, char *file)
file_box->gadget->value = utf8_fn;
/* Redraw box. */
- if (containing_content == NULL)
- html__redraw_a_box(html, file_box);
- else
- html_redraw_a_box(containing_content, file_box);
+ html__redraw_a_box(html, file_box);
} else if (html->bw != NULL) {
/* File dropped on text input */