mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-01-03 17:54:33 +03:00
split out html interaction header elements and rename source
This commit is contained in:
parent
82d4a2265b
commit
b9bc34b875
@ -3,5 +3,5 @@
|
|||||||
S_HTML := box.c box_construct.c box_normalise.c box_textarea.c \
|
S_HTML := box.c box_construct.c box_normalise.c box_textarea.c \
|
||||||
font.c form.c imagemap.c layout.c search.c table.c \
|
font.c form.c imagemap.c layout.c search.c table.c \
|
||||||
html.c html_css.c html_css_fetcher.c html_script.c \
|
html.c html_css.c html_css_fetcher.c html_script.c \
|
||||||
html_interaction.c html_redraw.c html_redraw_border.c \
|
interaction.c html_redraw.c html_redraw_border.c \
|
||||||
html_forms.c html_object.c
|
html_forms.c html_object.c
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "utils/nsoption.h"
|
#include "utils/nsoption.h"
|
||||||
#include "utils/log.h"
|
#include "utils/log.h"
|
||||||
#include "utils/talloc.h"
|
#include "utils/talloc.h"
|
||||||
|
#include "utils/nsurl.h"
|
||||||
#include "netsurf/misc.h"
|
#include "netsurf/misc.h"
|
||||||
#include "netsurf/content.h"
|
#include "netsurf/content.h"
|
||||||
#include "netsurf/mouse.h"
|
#include "netsurf/mouse.h"
|
||||||
@ -40,10 +41,12 @@
|
|||||||
#include "css/dump.h"
|
#include "css/dump.h"
|
||||||
#include "desktop/scrollbar.h"
|
#include "desktop/scrollbar.h"
|
||||||
#include "desktop/gui_internal.h"
|
#include "desktop/gui_internal.h"
|
||||||
|
#include "desktop/search.h"
|
||||||
|
|
||||||
#include "html/box.h"
|
#include "html/box.h"
|
||||||
#include "html/form_internal.h"
|
#include "html/form_internal.h"
|
||||||
#include "html/html_internal.h"
|
#include "html/html_internal.h"
|
||||||
|
#include "html/interaction.h"
|
||||||
|
|
||||||
#define box_is_float(box) (box->type == BOX_FLOAT_LEFT || \
|
#define box_is_float(box) (box->type == BOX_FLOAT_LEFT || \
|
||||||
box->type == BOX_FLOAT_RIGHT)
|
box->type == BOX_FLOAT_RIGHT)
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
#include "html/html.h"
|
#include "html/html.h"
|
||||||
#include "html/html_save.h"
|
#include "html/html_save.h"
|
||||||
#include "html/html_internal.h"
|
#include "html/html_internal.h"
|
||||||
|
#include "html/interaction.h"
|
||||||
#include "html/box.h"
|
#include "html/box.h"
|
||||||
#include "html/form_internal.h"
|
#include "html/form_internal.h"
|
||||||
#include "html/imagemap.h"
|
#include "html/imagemap.h"
|
||||||
|
@ -31,8 +31,10 @@
|
|||||||
#include "content/content_protected.h"
|
#include "content/content_protected.h"
|
||||||
#include "desktop/selection.h"
|
#include "desktop/selection.h"
|
||||||
|
|
||||||
|
|
||||||
struct gui_layout_table;
|
struct gui_layout_table;
|
||||||
struct scrollbar_msg_data;
|
struct scrollbar_msg_data;
|
||||||
|
struct content_redraw_data;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HTML_DRAG_NONE, /** No drag */
|
HTML_DRAG_NONE, /** No drag */
|
||||||
@ -85,11 +87,6 @@ union html_focus_owner {
|
|||||||
struct box *content;
|
struct box *content;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct html_scrollbar_data {
|
|
||||||
struct content *c;
|
|
||||||
struct box *box;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data specific to CONTENT_HTML.
|
* Data specific to CONTENT_HTML.
|
||||||
*/
|
*/
|
||||||
@ -300,19 +297,6 @@ bool html_redraw_inline_borders(struct box *box, struct rect b,
|
|||||||
const struct rect *clip, float scale, bool first, bool last,
|
const struct rect *clip, float scale, bool first, bool last,
|
||||||
const struct redraw_context *ctx);
|
const struct redraw_context *ctx);
|
||||||
|
|
||||||
/* in html/html_interaction.c */
|
|
||||||
void html_mouse_track(struct content *c, struct browser_window *bw,
|
|
||||||
browser_mouse_state mouse, int x, int y);
|
|
||||||
void html_mouse_action(struct content *c, struct browser_window *bw,
|
|
||||||
browser_mouse_state mouse, int x, int y);
|
|
||||||
bool html_keypress(struct content *c, uint32_t key);
|
|
||||||
void html_overflow_scroll_callback(void *client_data,
|
|
||||||
struct scrollbar_msg_data *scrollbar_data);
|
|
||||||
void html_search(struct content *c, void *context,
|
|
||||||
search_flags_t flags, const char *string);
|
|
||||||
void html_search_clear(struct content *c);
|
|
||||||
|
|
||||||
|
|
||||||
/* in html/html_script.c */
|
/* in html/html_script.c */
|
||||||
dom_hubbub_error html_process_script(void *ctx, dom_node *node);
|
dom_hubbub_error html_process_script(void *ctx, dom_node *node);
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
#include "html/html_internal.h"
|
#include "html/html_internal.h"
|
||||||
#include "html/imagemap.h"
|
#include "html/imagemap.h"
|
||||||
#include "html/search.h"
|
#include "html/search.h"
|
||||||
|
#include "html/interaction.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get pointer shape for given box
|
* Get pointer shape for given box
|
||||||
@ -220,22 +221,6 @@ static size_t html_selection_drag_end(struct html_content *html,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle mouse tracking (including drags) in an HTML content window.
|
|
||||||
*
|
|
||||||
* \param c content of type html
|
|
||||||
* \param bw browser window
|
|
||||||
* \param mouse state of mouse buttons and modifier keys
|
|
||||||
* \param x coordinate of mouse
|
|
||||||
* \param y coordinate of mouse
|
|
||||||
*/
|
|
||||||
|
|
||||||
void html_mouse_track(struct content *c, struct browser_window *bw,
|
|
||||||
browser_mouse_state mouse, int x, int y)
|
|
||||||
{
|
|
||||||
html_mouse_action(c, bw, mouse, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper for file gadgets to store their filename.
|
* Helper for file gadgets to store their filename.
|
||||||
*
|
*
|
||||||
@ -334,23 +319,200 @@ html_overflow_scroll_drag_end(struct scrollbar *scrollbar,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle mouse clicks and movements in an HTML content window.
|
* handle html mouse action when select menu is open
|
||||||
*
|
*
|
||||||
* \param c content of type html
|
|
||||||
* \param bw browser window
|
|
||||||
* \param mouse state of mouse buttons and modifier keys
|
|
||||||
* \param x coordinate of mouse
|
|
||||||
* \param y coordinate of mouse
|
|
||||||
*
|
|
||||||
* This function handles both hovering and clicking. It is important that the
|
|
||||||
* code path is identical (except that hovering doesn't carry out the action),
|
|
||||||
* so that the status bar reflects exactly what will happen. Having separate
|
|
||||||
* code paths opens the possibility that an attacker will make the status bar
|
|
||||||
* show some harmless action where clicking will be harmful.
|
|
||||||
*/
|
*/
|
||||||
|
static nserror
|
||||||
|
mouse_action_select_menu(html_content *html,
|
||||||
|
struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
struct box *box;
|
||||||
|
int box_x = 0;
|
||||||
|
int box_y = 0;
|
||||||
|
const char *status;
|
||||||
|
int width, height;
|
||||||
|
struct hlcache_handle *bw_content;
|
||||||
|
|
||||||
void html_mouse_action(struct content *c, struct browser_window *bw,
|
assert(html->visible_select_menu != NULL);
|
||||||
browser_mouse_state mouse, int x, int y)
|
|
||||||
|
box = html->visible_select_menu->box;
|
||||||
|
box_coords(box, &box_x, &box_y);
|
||||||
|
|
||||||
|
box_x -= box->border[LEFT].width;
|
||||||
|
box_y += box->height + box->border[BOTTOM].width +
|
||||||
|
box->padding[BOTTOM] + box->padding[TOP];
|
||||||
|
|
||||||
|
status = form_select_mouse_action(html->visible_select_menu,
|
||||||
|
mouse,
|
||||||
|
x - box_x,
|
||||||
|
y - box_y);
|
||||||
|
if (status != NULL) {
|
||||||
|
/* set status if menu still open */
|
||||||
|
union content_msg_data msg_data;
|
||||||
|
msg_data.explicit_status_text = status;
|
||||||
|
content_broadcast((struct content *)html,
|
||||||
|
CONTENT_MSG_STATUS,
|
||||||
|
&msg_data);
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* close menu and redraw where it was */
|
||||||
|
form_select_get_dimensions(html->visible_select_menu, &width, &height);
|
||||||
|
|
||||||
|
html->visible_select_menu = NULL;
|
||||||
|
|
||||||
|
bw_content = browser_window_get_content(bw);
|
||||||
|
content_request_redraw(bw_content,
|
||||||
|
box_x,
|
||||||
|
box_y,
|
||||||
|
width,
|
||||||
|
height);
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* handle html mouse action when a selection drag is being performed
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static nserror
|
||||||
|
mouse_action_drag_selection(html_content *html,
|
||||||
|
struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
struct box *box;
|
||||||
|
int dir = -1;
|
||||||
|
int dx, dy;
|
||||||
|
size_t idx;
|
||||||
|
union html_drag_owner drag_owner;
|
||||||
|
int pixel_offset;
|
||||||
|
plot_font_style_t fstyle;
|
||||||
|
|
||||||
|
if (!mouse) {
|
||||||
|
/* End of selection drag */
|
||||||
|
if (selection_dragging_start(&html->sel)) {
|
||||||
|
dir = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
idx = html_selection_drag_end(html, mouse, x, y, dir);
|
||||||
|
|
||||||
|
if (idx != 0) {
|
||||||
|
selection_track(&html->sel, mouse, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
drag_owner.no_owner = true;
|
||||||
|
html_set_drag_type(html, HTML_DRAG_NONE, drag_owner, NULL);
|
||||||
|
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selection_dragging_start(&html->sel)) {
|
||||||
|
dir = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
box = box_pick_text_box(html, x, y, dir, &dx, &dy);
|
||||||
|
if (box != NULL) {
|
||||||
|
font_plot_style_from_css(&html->len_ctx, box->style, &fstyle);
|
||||||
|
|
||||||
|
guit->layout->position(&fstyle,
|
||||||
|
box->text,
|
||||||
|
box->length,
|
||||||
|
dx,
|
||||||
|
&idx,
|
||||||
|
&pixel_offset);
|
||||||
|
|
||||||
|
selection_track(&html->sel, mouse, box->byte_offset + idx);
|
||||||
|
}
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* handle html mouse action when a scrollbar drag is being performed
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static nserror
|
||||||
|
mouse_action_drag_scrollbar(html_content *html,
|
||||||
|
struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
struct scrollbar *scr;
|
||||||
|
struct html_scrollbar_data *data;
|
||||||
|
struct box *box;
|
||||||
|
int box_x = 0;
|
||||||
|
int box_y = 0;
|
||||||
|
const char *status;
|
||||||
|
int scroll_mouse_x = 0, scroll_mouse_y = 0;
|
||||||
|
scrollbar_mouse_status scrollbar_status;
|
||||||
|
|
||||||
|
scr = html->drag_owner.scrollbar;
|
||||||
|
|
||||||
|
if (!mouse) {
|
||||||
|
/* drag end: scrollbar */
|
||||||
|
html_overflow_scroll_drag_end(scr, mouse, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
data = scrollbar_get_data(scr);
|
||||||
|
|
||||||
|
box = data->box;
|
||||||
|
|
||||||
|
box_coords(box, &box_x, &box_y);
|
||||||
|
|
||||||
|
if (scrollbar_is_horizontal(scr)) {
|
||||||
|
scroll_mouse_x = x - box_x ;
|
||||||
|
scroll_mouse_y = y - (box_y + box->padding[TOP] +
|
||||||
|
box->height + box->padding[BOTTOM] -
|
||||||
|
SCROLLBAR_WIDTH);
|
||||||
|
scrollbar_status = scrollbar_mouse_action(scr,
|
||||||
|
mouse,
|
||||||
|
scroll_mouse_x,
|
||||||
|
scroll_mouse_y);
|
||||||
|
} else {
|
||||||
|
scroll_mouse_x = x - (box_x + box->padding[LEFT] +
|
||||||
|
box->width + box->padding[RIGHT] -
|
||||||
|
SCROLLBAR_WIDTH);
|
||||||
|
scroll_mouse_y = y - box_y;
|
||||||
|
|
||||||
|
scrollbar_status = scrollbar_mouse_action(scr,
|
||||||
|
mouse,
|
||||||
|
scroll_mouse_x,
|
||||||
|
scroll_mouse_y);
|
||||||
|
}
|
||||||
|
status = scrollbar_mouse_status_to_message(scrollbar_status);
|
||||||
|
|
||||||
|
if (status != NULL) {
|
||||||
|
union content_msg_data msg_data;
|
||||||
|
|
||||||
|
msg_data.explicit_status_text = status;
|
||||||
|
content_broadcast((struct content *)html,
|
||||||
|
CONTENT_MSG_STATUS,
|
||||||
|
&msg_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* exported interface documented in html/interaction.h */
|
||||||
|
nserror html_mouse_track(struct content *c,
|
||||||
|
struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
return html_mouse_action(c, bw, mouse, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* exported interface documented in html/interaction.h */
|
||||||
|
nserror
|
||||||
|
html_mouse_action(struct content *c,
|
||||||
|
struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse,
|
||||||
|
int x, int y)
|
||||||
{
|
{
|
||||||
html_content *html = (html_content *) c;
|
html_content *html = (html_content *) c;
|
||||||
enum { ACTION_NONE, ACTION_SUBMIT, ACTION_GO } action = ACTION_NONE;
|
enum { ACTION_NONE, ACTION_SUBMIT, ACTION_GO } action = ACTION_NONE;
|
||||||
@ -383,7 +545,6 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
|
|||||||
browser_drag_type drag_type = browser_window_get_drag_type(bw);
|
browser_drag_type drag_type = browser_window_get_drag_type(bw);
|
||||||
union content_msg_data msg_data;
|
union content_msg_data msg_data;
|
||||||
struct dom_node *node = html->layout->node; /* Default to the <HTML> */
|
struct dom_node *node = html->layout->node; /* Default to the <HTML> */
|
||||||
union html_drag_owner drag_owner;
|
|
||||||
union html_selection_owner sel_owner;
|
union html_selection_owner sel_owner;
|
||||||
bool click = mouse & (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_PRESS_2 |
|
bool click = mouse & (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_PRESS_2 |
|
||||||
BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2 |
|
BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2 |
|
||||||
@ -399,112 +560,16 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (html->visible_select_menu != NULL) {
|
if (html->visible_select_menu != NULL) {
|
||||||
box = html->visible_select_menu->box;
|
return mouse_action_select_menu(html, bw, mouse, x, y);
|
||||||
box_coords(box, &box_x, &box_y);
|
|
||||||
|
|
||||||
box_x -= box->border[LEFT].width;
|
|
||||||
box_y += box->height + box->border[BOTTOM].width +
|
|
||||||
box->padding[BOTTOM] + box->padding[TOP];
|
|
||||||
status = form_select_mouse_action(html->visible_select_menu,
|
|
||||||
mouse, x - box_x, y - box_y);
|
|
||||||
if (status != NULL) {
|
|
||||||
msg_data.explicit_status_text = status;
|
|
||||||
content_broadcast(c, CONTENT_MSG_STATUS, &msg_data);
|
|
||||||
} else {
|
|
||||||
int width, height;
|
|
||||||
struct hlcache_handle *bw_content;
|
|
||||||
form_select_get_dimensions(html->visible_select_menu,
|
|
||||||
&width, &height);
|
|
||||||
html->visible_select_menu = NULL;
|
|
||||||
bw_content = browser_window_get_content(bw);
|
|
||||||
content_request_redraw(bw_content,box_x, box_y,
|
|
||||||
width, height);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (html->drag_type == HTML_DRAG_SELECTION) {
|
if (html->drag_type == HTML_DRAG_SELECTION) {
|
||||||
/* Selection drag */
|
return mouse_action_drag_selection(html, bw, mouse, x, y);
|
||||||
struct box *box;
|
|
||||||
int dir = -1;
|
|
||||||
int dx, dy;
|
|
||||||
|
|
||||||
if (!mouse) {
|
|
||||||
/* End of selection drag */
|
|
||||||
int dir = -1;
|
|
||||||
size_t idx;
|
|
||||||
|
|
||||||
if (selection_dragging_start(&html->sel))
|
|
||||||
dir = 1;
|
|
||||||
|
|
||||||
idx = html_selection_drag_end(html, mouse, x, y, dir);
|
|
||||||
|
|
||||||
if (idx != 0)
|
|
||||||
selection_track(&html->sel, mouse, idx);
|
|
||||||
|
|
||||||
drag_owner.no_owner = true;
|
|
||||||
html_set_drag_type(html, HTML_DRAG_NONE,
|
|
||||||
drag_owner, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (selection_dragging_start(&html->sel))
|
|
||||||
dir = 1;
|
|
||||||
|
|
||||||
box = box_pick_text_box(html, x, y, dir, &dx, &dy);
|
|
||||||
|
|
||||||
if (box != NULL) {
|
|
||||||
int pixel_offset;
|
|
||||||
size_t idx;
|
|
||||||
plot_font_style_t fstyle;
|
|
||||||
|
|
||||||
font_plot_style_from_css(&html->len_ctx,
|
|
||||||
box->style, &fstyle);
|
|
||||||
|
|
||||||
guit->layout->position(&fstyle,
|
|
||||||
box->text, box->length,
|
|
||||||
dx, &idx, &pixel_offset);
|
|
||||||
|
|
||||||
selection_track(&html->sel, mouse,
|
|
||||||
box->byte_offset + idx);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (html->drag_type == HTML_DRAG_SCROLLBAR) {
|
if (html->drag_type == HTML_DRAG_SCROLLBAR) {
|
||||||
struct scrollbar *scr = html->drag_owner.scrollbar;
|
return mouse_action_drag_scrollbar(html, bw, mouse, x, y);
|
||||||
struct html_scrollbar_data *data = scrollbar_get_data(scr);
|
|
||||||
|
|
||||||
if (!mouse) {
|
|
||||||
/* drag end: scrollbar */
|
|
||||||
html_overflow_scroll_drag_end(scr, mouse, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
box = data->box;
|
|
||||||
box_coords(box, &box_x, &box_y);
|
|
||||||
if (scrollbar_is_horizontal(scr)) {
|
|
||||||
scroll_mouse_x = x - box_x ;
|
|
||||||
scroll_mouse_y = y - (box_y + box->padding[TOP] +
|
|
||||||
box->height + box->padding[BOTTOM] -
|
|
||||||
SCROLLBAR_WIDTH);
|
|
||||||
status = scrollbar_mouse_status_to_message(
|
|
||||||
scrollbar_mouse_action(scr, mouse,
|
|
||||||
scroll_mouse_x,
|
|
||||||
scroll_mouse_y));
|
|
||||||
} else {
|
|
||||||
scroll_mouse_x = x - (box_x + box->padding[LEFT] +
|
|
||||||
box->width + box->padding[RIGHT] -
|
|
||||||
SCROLLBAR_WIDTH);
|
|
||||||
scroll_mouse_y = y - box_y;
|
|
||||||
status = scrollbar_mouse_status_to_message(
|
|
||||||
scrollbar_mouse_action(scr, mouse,
|
|
||||||
scroll_mouse_x,
|
|
||||||
scroll_mouse_y));
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_data.explicit_status_text = status;
|
|
||||||
content_broadcast(c, CONTENT_MSG_STATUS, &msg_data);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (html->drag_type == HTML_DRAG_TEXTAREA_SELECTION ||
|
if (html->drag_type == HTML_DRAG_TEXTAREA_SELECTION ||
|
77
content/handlers/html/interaction.h
Normal file
77
content/handlers/html/interaction.h
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||||
|
*
|
||||||
|
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||||
|
*
|
||||||
|
* NetSurf is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* NetSurf is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
* HTML content user interaction handling
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NETSURF_HTML_INTERACTION_H
|
||||||
|
#define NETSURF_HTML_INTERACTION_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Context for scrollbar
|
||||||
|
*/
|
||||||
|
struct html_scrollbar_data {
|
||||||
|
struct content *c;
|
||||||
|
struct box *box;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle mouse tracking (including drags) in an HTML content window.
|
||||||
|
*
|
||||||
|
* \param c content of type html
|
||||||
|
* \param bw browser window
|
||||||
|
* \param mouse state of mouse buttons and modifier keys
|
||||||
|
* \param x coordinate of mouse
|
||||||
|
* \param y coordinate of mouse
|
||||||
|
*/
|
||||||
|
nserror html_mouse_track(struct content *c, struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse, int x, int y);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle mouse clicks and movements in an HTML content window.
|
||||||
|
*
|
||||||
|
* This function handles both hovering and clicking. It is important that the
|
||||||
|
* code path is identical (except that hovering doesn't carry out the action),
|
||||||
|
* so that the status bar reflects exactly what will happen. Having separate
|
||||||
|
* code paths opens the possibility that an attacker will make the status bar
|
||||||
|
* show some harmless action where clicking will be harmful.
|
||||||
|
*
|
||||||
|
* \param c content of type html
|
||||||
|
* \param bw browser window
|
||||||
|
* \param mouse state of mouse buttons and modifier keys
|
||||||
|
* \param x x coordinate of mouse
|
||||||
|
* \param y y coordinate of mouse
|
||||||
|
* \return NSERROR_OK or appropriate error code.
|
||||||
|
*/
|
||||||
|
nserror html_mouse_action(struct content *c, struct browser_window *bw,
|
||||||
|
browser_mouse_state mouse, int x, int y);
|
||||||
|
|
||||||
|
bool html_keypress(struct content *c, uint32_t key);
|
||||||
|
|
||||||
|
void html_overflow_scroll_callback(void *client_data,
|
||||||
|
struct scrollbar_msg_data *scrollbar_data);
|
||||||
|
|
||||||
|
void html_search(struct content *c, void *context,
|
||||||
|
search_flags_t flags, const char *string);
|
||||||
|
|
||||||
|
void html_search_clear(struct content *c);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user