From 2979a19786ed8248b32a8b63e297fb2638744dc9 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 7 Feb 2013 14:21:48 +0000 Subject: Remove input subtree special numberspacing. --- desktop/selection.c | 64 +++++++++++------------------------------------------ 1 file changed, 13 insertions(+), 51 deletions(-) (limited to 'desktop') diff --git a/desktop/selection.c b/desktop/selection.c index ae9df5ec6..fa82ad027 100644 --- a/desktop/selection.c +++ b/desktop/selection.c @@ -47,24 +47,8 @@ /** * Text selection works by labelling each node in the box tree with its * start index in the textual representation of the tree's content. - * - * Text input fields and text areas have their own number spaces so that - * they can be relabelled more efficiently when editing (rather than relabel - * the entire box tree) and so that selections are either wholly within - * or wholly without the textarea/input box. */ -#define IS_INPUT(box) ((box) && (box)->gadget && \ - ((box)->gadget->type == GADGET_TEXTAREA || \ - (box)->gadget->type == GADGET_TEXTBOX || \ - (box)->gadget->type == GADGET_PASSWORD)) - -/** check whether the given text box is in the same number space as the - current selection; number spaces are identified by their uppermost nybble */ - -#define NUMBER_SPACE(x) ((x) & 0xF0000000U) -#define SAME_SPACE(s, offset) (NUMBER_SPACE((s)->max_idx) == NUMBER_SPACE(offset)) - #define SPACE_LEN(b) ((b->space == 0) ? 0 : 1) @@ -99,7 +83,7 @@ static bool save_handler(const char *text, size_t length, struct box *box, static bool selected_part(struct box *box, unsigned start_idx, unsigned end_idx, unsigned *start_offset, unsigned *end_offset); static bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx, - unsigned int num_space, seln_traverse_handler handler, + seln_traverse_handler handler, void *handle, save_text_whitespace *before, bool *first, bool do_marker); static struct box *get_box(struct box *b, unsigned offset, size_t *pidx); @@ -188,13 +172,7 @@ void selection_reinit(struct selection *s, struct box *root) assert(s); - if (IS_INPUT(root)) { - static int next_idx = 0; - if (!++next_idx) next_idx = 1; - root_idx = next_idx << 28; - } - else - root_idx = 0; + root_idx = 0; // if (s->root == root) { // /* keep the same number space as before, because we want @@ -255,8 +233,7 @@ void selection_init(struct selection *s, struct box *root) bool selection_read_only(struct selection *s) { - return !s->root || !NUMBER_SPACE(s->root->byte_offset); - + return true; } @@ -280,13 +257,10 @@ unsigned selection_label_subtree(struct box *box, unsigned idx) idx += box->length + SPACE_LEN(box); while (child) { - if (!IS_INPUT(child)) { - if (child->list_marker) - idx = selection_label_subtree( - child->list_marker, idx); + if (child->list_marker) + idx = selection_label_subtree(child->list_marker, idx); - idx = selection_label_subtree(child, idx); - } + idx = selection_label_subtree(child, idx); child = child->next; } @@ -317,9 +291,6 @@ bool selection_click(struct selection *s, browser_mouse_state mouse, top = browser_window_get_root(top); - if (!SAME_SPACE(s, idx)) - return false; /* not our problem */ - if (selection_defined(s)) { if (idx > s->start_idx) { if (idx <= s->end_idx) @@ -421,9 +392,6 @@ bool selection_click(struct selection *s, browser_mouse_state mouse, void selection_track(struct selection *s, browser_mouse_state mouse, unsigned idx) { - if (!SAME_SPACE(s, idx)) - return; - if (!mouse) { s->drag_state = DRAG_NONE; } @@ -516,7 +484,6 @@ bool selected_part(struct box *box, unsigned start_idx, unsigned end_idx, * \param box box subtree * \param start_idx start of range within textual representation (bytes) * \param end_idx end of range - * \param num_space number space of the selection * \param handler handler function to call * \param handle handle to pass * \param before type of whitespace to place before next encountered text @@ -526,7 +493,7 @@ bool selected_part(struct box *box, unsigned start_idx, unsigned end_idx, */ bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx, - unsigned int num_space, seln_traverse_handler handler, + seln_traverse_handler handler, void *handle, save_text_whitespace *before, bool *first, bool do_marker) { @@ -547,7 +514,7 @@ bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx, /* do the marker box before continuing with the rest of the * list element */ if (!traverse_tree(box->list_marker, start_idx, end_idx, - num_space, handler, handle, before, first, + handler, handle, before, first, true)) return false; } @@ -568,8 +535,7 @@ bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx, else { whitespace_text = NULL; } - if (num_space == NUMBER_SPACE(box->byte_offset) && - box->type != BOX_BR && + if (box->type != BOX_BR && !((box->type == BOX_FLOAT_LEFT || box->type == BOX_FLOAT_RIGHT) && !box->text)) { @@ -607,7 +573,7 @@ bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx, * the tree */ struct box *next = child->next; - if (!traverse_tree(child, start_idx, end_idx, num_space, + if (!traverse_tree(child, start_idx, end_idx, handler, handle, before, first, false)) return false; @@ -642,8 +608,7 @@ static bool selection_traverse(struct selection *s, if (s->root) { /* HTML */ return traverse_tree(s->root, s->start_idx, s->end_idx, - NUMBER_SPACE(s->max_idx), handler, handle, - &before, &first, false); + handler, handle, &before, &first, false); } /* Text */ @@ -727,7 +692,7 @@ void selection_redraw(struct selection *s, unsigned start_idx, unsigned end_idx) if (s->root) { if (!traverse_tree(s->root, start_idx, end_idx, - NUMBER_SPACE(s->max_idx), redraw_handler, &rdw, + redraw_handler, &rdw, NULL, NULL, false)) return; } @@ -977,10 +942,7 @@ void selection_select_all(struct selection *s) assert(s); s->defined = true; - if (IS_INPUT(s->root)) - selection_set_start(s, s->root->children->children->byte_offset); - else - selection_set_start(s, 0); + selection_set_start(s, 0); selection_set_end(s, s->max_idx); } -- cgit v1.2.3