From 4cef0f955c3be33344361f84d600bccf1b28ce75 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 20 May 2020 23:17:48 +0100 Subject: pass the browser window to selection click handler this means the content handlers do not have to provide a separate method to extract their browser window and it can simply be passed in. --- content/handlers/html/html.c | 12 ------------ content/handlers/html/interaction.c | 1 + content/handlers/html/private.h | 9 --------- content/handlers/text/textplain.c | 14 +------------- content/handlers/text/textplain.h | 8 -------- desktop/selection.c | 18 ++---------------- desktop/selection.h | 3 ++- 7 files changed, 6 insertions(+), 59 deletions(-) diff --git a/content/handlers/html/html.c b/content/handlers/html/html.c index 23d607823..33320aa7b 100644 --- a/content/handlers/html/html.c +++ b/content/handlers/html/html.c @@ -2383,15 +2383,3 @@ error: return error; } - - -/* exported function documented in html/private.h */ -struct browser_window *html_get_browser_window(struct content *c) -{ - html_content *html = (html_content *) c; - - assert(c != NULL); - assert(c->handler == &html_content_handler); - - return html->bw; -} diff --git a/content/handlers/html/interaction.c b/content/handlers/html/interaction.c index f2eae70df..0a963dd54 100644 --- a/content/handlers/html/interaction.c +++ b/content/handlers/html/interaction.c @@ -1220,6 +1220,7 @@ default_mouse_action(html_content *html, &pixel_offset); if (selection_click(&html->sel, + html->bw, mouse, mas->text.box->byte_offset + idx)) { /* key presses must be directed at the diff --git a/content/handlers/html/private.h b/content/handlers/html/private.h index dde61c2a9..ff20be837 100644 --- a/content/handlers/html/private.h +++ b/content/handlers/html/private.h @@ -229,15 +229,6 @@ extern bool html_redraw_debug; void html__redraw_a_box(html_content *htmlc, struct box *box); -/** - * Get the browser window containing an HTML content - * - * \param c HTML content - * \return the browser window - */ -struct browser_window *html_get_browser_window(struct content *c); - - /** * Complete conversion of an HTML document * diff --git a/content/handlers/text/textplain.c b/content/handlers/text/textplain.c index 501ba1d34..534b91d93 100644 --- a/content/handlers/text/textplain.c +++ b/content/handlers/text/textplain.c @@ -706,7 +706,7 @@ textplain_mouse_action(struct content *c, browser_window_set_drag_type(bw, DRAGGING_NONE, NULL); idx = textplain_offset_from_coords(c, x, y, dir); - if (selection_click(&text->sel, mouse, idx)) { + if (selection_click(&text->sel, text->bw, mouse, idx)) { if (selection_dragging(&text->sel)) { browser_window_set_drag_type(bw, @@ -1634,15 +1634,3 @@ textplain_get_raw_data(struct content *c, return text->utf8_data + start; } - - -/* exported interface documented in html/textplain.h */ -struct browser_window *textplain_get_browser_window(struct content *c) -{ - textplain_content *text = (textplain_content *) c; - - assert(c != NULL); - assert(c->handler == &textplain_content_handler); - - return text->bw; -} diff --git a/content/handlers/text/textplain.h b/content/handlers/text/textplain.h index a2cfb5e00..716397acc 100644 --- a/content/handlers/text/textplain.h +++ b/content/handlers/text/textplain.h @@ -73,12 +73,4 @@ void textplain_coords_from_range(struct content *c, char *textplain_get_raw_data(struct content *c, unsigned start, unsigned end, size_t *plen); -/** - * Get the browser window containing a textplain content - * - * \param[in] c text/plain content - * \return the browser window - */ -struct browser_window *textplain_get_browser_window(struct content *c); - #endif diff --git a/desktop/selection.c b/desktop/selection.c index 4bbcda9a7..47d51f83e 100644 --- a/desktop/selection.c +++ b/desktop/selection.c @@ -77,21 +77,6 @@ typedef bool (*seln_traverse_handler)(const char *text, size_t length, const char *whitespace_text, size_t whitespace_length); -/** - * Get the browser window containing the content a selection object belongs to. - * - * \param s selection object - * \return the browser window - */ -static struct browser_window * selection_get_browser_window(struct selection *s) -{ - if (s->is_html) - return html_get_browser_window(s->c); - else - return textplain_get_browser_window(s->c); -} - - /** * Label each text box in the given box subtree with its position * in a textual representation of the content. @@ -691,13 +676,14 @@ selection_init(struct selection *s, /* exported interface documented in desktop/selection.h */ bool selection_click(struct selection *s, + struct browser_window *top, browser_mouse_state mouse, unsigned idx) { browser_mouse_state modkeys = (mouse & (BROWSER_MOUSE_MOD_1 | BROWSER_MOUSE_MOD_2)); int pos = -1; /* 0 = inside selection, 1 = after it */ - struct browser_window *top = selection_get_browser_window(s); + top = browser_window_get_root(top); if (selection_defined(s)) { diff --git a/desktop/selection.h b/desktop/selection.h index ca0d19fe9..cfaf59baf 100644 --- a/desktop/selection.h +++ b/desktop/selection.h @@ -28,6 +28,7 @@ #include "content/handlers/css/utils.h" struct box; +struct browser_window; typedef enum { DRAG_NONE, @@ -166,7 +167,7 @@ void selection_set_position(struct selection *s, unsigned start, unsigned end); * \param idx byte offset within textual representation * \return true iff the click has been handled by the selection code */ -bool selection_click(struct selection *s, browser_mouse_state mouse, unsigned idx); +bool selection_click(struct selection *s, struct browser_window *top, browser_mouse_state mouse, unsigned idx); /** * Handles movements related to the selection, eg. dragging of start and -- cgit v1.2.3